Mercurial > hg > graal-compiler
diff src/cpu/x86/vm/graalRuntime_x86.cpp @ 8490:1567c6cc6561
Towards porting G1 WBs
author | Christos Kotselidis <christos.kotselidis@oracle.com> |
---|---|
date | Wed, 20 Feb 2013 16:15:43 +0100 |
parents | 92d21814cf7b |
children | b089cde44076 |
line wrap: on
line diff
--- a/src/cpu/x86/vm/graalRuntime_x86.cpp Tue Feb 19 17:57:14 2013 +0100 +++ b/src/cpu/x86/vm/graalRuntime_x86.cpp Wed Feb 20 16:15:43 2013 +0100 @@ -1191,25 +1191,43 @@ } __ ret(0); break; - } - case graal_g1_wb_slow_id: { - Register obj = j_rarg0; - { - GraalStubFrame f(sasm, "graal_g1_wb_slow", dont_gc_arguments); - OopMap* map = save_live_registers(sasm, 2, save_fpu_registers); + } + case graal_wb_pre_call_id: { + Register obj = j_rarg0; + { + GraalStubFrame f(sasm, "graal_wb_pre_call", dont_gc_arguments); + OopMap* map = save_live_registers(sasm, 2, save_fpu_registers); + + // note: really a leaf routine but must setup last java sp + // => use call_RT for now (speed can be improved by + // doing last java sp setup manually) + int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, graal_wb_pre_call), obj); - // note: really a leaf routine but must setup last java sp - // => use call_RT for now (speed can be improved by - // doing last java sp setup manually) - int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, graal_g1_wb_slow), obj); + oop_maps = new OopMapSet(); + oop_maps->add_gc_map(call_offset, map); + restore_live_registers(sasm, save_fpu_registers); + } + __ ret(0); + break; + } + case graal_wb_post_call_id: { + Register obj = j_rarg0; + { + GraalStubFrame f(sasm, "graal_wb_post_call", dont_gc_arguments); + OopMap* map = save_live_registers(sasm, 2, save_fpu_registers); - oop_maps = new OopMapSet(); - oop_maps->add_gc_map(call_offset, map); - restore_live_registers(sasm, save_fpu_registers); - } - __ ret(0); - break; - } + // note: really a leaf routine but must setup last java sp + // => use call_RT for now (speed can be improved by + // doing last java sp setup manually) + int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, graal_wb_post_call), obj); + + oop_maps = new OopMapSet(); + oop_maps->add_gc_map(call_offset, map); + restore_live_registers(sasm, save_fpu_registers); + } + __ ret(0); + break; + } case graal_identity_hash_code_id: { Register obj = j_rarg0; // Incoming __ set_info("identity_hash_code", dont_gc_arguments);