hotspot/src/cpu/x86/vm/assembler_x86.cpp
void MacroAssembler::set_last_Java_frame(Register last_java_sp,
Register last_java_fp,
address last_java_pc) {
{- -------------------------------------------
(1) (引数で last_java_sp に使うレジスタが指定されていなければ, SP を使うこととする)
---------------------------------------- -}
// determine last_java_sp register
if (!last_java_sp->is_valid()) {
last_java_sp = rsp;
}
{- -------------------------------------------
(1) コード生成: (ただし, 引数で last_java_fp が指定されていなければ生成しない)
「カレントスレッドの last_Java_fp フィールドに, 指定されたレジスタの値をセットする.」
---------------------------------------- -}
// last_java_fp is optional
if (last_java_fp->is_valid()) {
movptr(Address(r15_thread, JavaThread::last_Java_fp_offset()),
last_java_fp);
}
{- -------------------------------------------
(1) コード生成: (ただし, 引数で last_java_pc が指定されていなければ生成しない)
「カレントスレッドの last_Java_pc フィールドに, 指定されたレジスタの値をセットする.」
---------------------------------------- -}
// last_java_pc is optional
if (last_java_pc != NULL) {
Address java_pc(r15_thread,
JavaThread::frame_anchor_offset() + JavaFrameAnchor::last_Java_pc_offset());
lea(rscratch1, InternalAddress(last_java_pc));
movptr(java_pc, rscratch1);
}
{- -------------------------------------------
(1) コード生成:
「カレントスレッドの last_Java_sp フィールドをセットする.」
(なお, last_Java_sp への書き込みは最後に行う.
これは, last_Java_sp に値が書き込まれている状態では他のフィールドにも値が入っている, と保証するため)
---------------------------------------- -}
movptr(Address(r15_thread, JavaThread::last_Java_sp_offset()), last_java_sp);
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.