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,