Mercurial > hg > truffle
comparison src/cpu/x86/vm/interp_masm_x86_64.cpp @ 362:f8199438385b
Merge
author | apetrusenko |
---|---|
date | Wed, 17 Sep 2008 16:49:18 +0400 |
parents | dc7f315e41f7 1ee8caae33af |
children | 52a431267315 70998f2e05ef |
comparison
equal
deleted
inserted
replaced
316:5fa96a5a7e76 | 362:f8199438385b |
---|---|
42 // interpreter specific | 42 // interpreter specific |
43 // | 43 // |
44 // Note: No need to save/restore bcp & locals (r13 & r14) pointer | 44 // Note: No need to save/restore bcp & locals (r13 & r14) pointer |
45 // since these are callee saved registers and no blocking/ | 45 // since these are callee saved registers and no blocking/ |
46 // GC can happen in leaf calls. | 46 // GC can happen in leaf calls. |
47 // Further Note: DO NOT save/restore bcp/locals. If a caller has | |
48 // already saved them so that it can use esi/edi as temporaries | |
49 // then a save/restore here will DESTROY the copy the caller | |
50 // saved! There used to be a save_bcp() that only happened in | |
51 // the ASSERT path (no restore_bcp). Which caused bizarre failures | |
52 // when jvm built with ASSERTs. | |
47 #ifdef ASSERT | 53 #ifdef ASSERT |
48 save_bcp(); | |
49 { | 54 { |
50 Label L; | 55 Label L; |
51 cmpptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD); | 56 cmpptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD); |
52 jcc(Assembler::equal, L); | 57 jcc(Assembler::equal, L); |
53 stop("InterpreterMacroAssembler::call_VM_leaf_base:" | 58 stop("InterpreterMacroAssembler::call_VM_leaf_base:" |
56 } | 61 } |
57 #endif | 62 #endif |
58 // super call | 63 // super call |
59 MacroAssembler::call_VM_leaf_base(entry_point, number_of_arguments); | 64 MacroAssembler::call_VM_leaf_base(entry_point, number_of_arguments); |
60 // interpreter specific | 65 // interpreter specific |
61 #ifdef ASSERT | 66 // Used to ASSERT that r13/r14 were equal to frame's bcp/locals |
62 { | 67 // but since they may not have been saved (and we don't want to |
63 Label L; | 68 // save thme here (see note above) the assert is invalid. |
64 cmpptr(r13, Address(rbp, frame::interpreter_frame_bcx_offset * wordSize)); | |
65 jcc(Assembler::equal, L); | |
66 stop("InterpreterMacroAssembler::call_VM_leaf_base:" | |
67 " r13 not callee saved?"); | |
68 bind(L); | |
69 } | |
70 { | |
71 Label L; | |
72 cmpptr(r14, Address(rbp, frame::interpreter_frame_locals_offset * wordSize)); | |
73 jcc(Assembler::equal, L); | |
74 stop("InterpreterMacroAssembler::call_VM_leaf_base:" | |
75 " r14 not callee saved?"); | |
76 bind(L); | |
77 } | |
78 #endif | |
79 } | 69 } |
80 | 70 |
81 void InterpreterMacroAssembler::call_VM_base(Register oop_result, | 71 void InterpreterMacroAssembler::call_VM_base(Register oop_result, |
82 Register java_thread, | 72 Register java_thread, |
83 Register last_java_sp, | 73 Register last_java_sp, |