Mercurial > hg > truffle
comparison src/cpu/x86/vm/interp_masm_x86_64.cpp @ 342:37f87013dfd8
6711316: Open source the Garbage-First garbage collector
Summary: First mercurial integration of the code for the Garbage-First garbage collector.
Reviewed-by: apetrusenko, iveresov, jmasa, sgoldman, tonyp, ysr
author | ysr |
---|---|
date | Thu, 05 Jun 2008 15:57:56 -0700 |
parents | ba764ed4b6f2 |
children | 6aae2f9d0294 |
comparison
equal
deleted
inserted
replaced
189:0b27f3512f9e | 342:37f87013dfd8 |
---|---|
33 // interpreter specific | 33 // interpreter specific |
34 // | 34 // |
35 // Note: No need to save/restore bcp & locals (r13 & r14) pointer | 35 // Note: No need to save/restore bcp & locals (r13 & r14) pointer |
36 // since these are callee saved registers and no blocking/ | 36 // since these are callee saved registers and no blocking/ |
37 // GC can happen in leaf calls. | 37 // GC can happen in leaf calls. |
38 // Further Note: DO NOT save/restore bcp/locals. If a caller has | |
39 // already saved them so that it can use esi/edi as temporaries | |
40 // then a save/restore here will DESTROY the copy the caller | |
41 // saved! There used to be a save_bcp() that only happened in | |
42 // the ASSERT path (no restore_bcp). Which caused bizarre failures | |
43 // when jvm built with ASSERTs. | |
38 #ifdef ASSERT | 44 #ifdef ASSERT |
39 save_bcp(); | |
40 { | 45 { |
41 Label L; | 46 Label L; |
42 cmpq(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int)NULL_WORD); | 47 cmpq(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int)NULL_WORD); |
43 jcc(Assembler::equal, L); | 48 jcc(Assembler::equal, L); |
44 stop("InterpreterMacroAssembler::call_VM_leaf_base:" | 49 stop("InterpreterMacroAssembler::call_VM_leaf_base:" |
47 } | 52 } |
48 #endif | 53 #endif |
49 // super call | 54 // super call |
50 MacroAssembler::call_VM_leaf_base(entry_point, number_of_arguments); | 55 MacroAssembler::call_VM_leaf_base(entry_point, number_of_arguments); |
51 // interpreter specific | 56 // interpreter specific |
52 #ifdef ASSERT | 57 // Used to ASSERT that r13/r14 were equal to frame's bcp/locals |
53 { | 58 // but since they may not have been saved (and we don't want to |
54 Label L; | 59 // save thme here (see note above) the assert is invalid. |
55 cmpq(r13, Address(rbp, frame::interpreter_frame_bcx_offset * wordSize)); | |
56 jcc(Assembler::equal, L); | |
57 stop("InterpreterMacroAssembler::call_VM_leaf_base:" | |
58 " r13 not callee saved?"); | |
59 bind(L); | |
60 } | |
61 { | |
62 Label L; | |
63 cmpq(r14, Address(rbp, frame::interpreter_frame_locals_offset * wordSize)); | |
64 jcc(Assembler::equal, L); | |
65 stop("InterpreterMacroAssembler::call_VM_leaf_base:" | |
66 " r14 not callee saved?"); | |
67 bind(L); | |
68 } | |
69 #endif | |
70 } | 60 } |
71 | 61 |
72 void InterpreterMacroAssembler::call_VM_base(Register oop_result, | 62 void InterpreterMacroAssembler::call_VM_base(Register oop_result, |
73 Register java_thread, | 63 Register java_thread, |
74 Register last_java_sp, | 64 Register last_java_sp, |