Skip to content

Commit 94ee3e0

Browse files
committed
fop interpreter working with no barrier fast path and basically nop slow path
Set mmtk-core FULL_NURSERY_GC to true as well java -XX:+UseThirdPartyHeap -XX:MetaspaceSize=1G -XX:+UnlockDiagnosticVMOptions -Xint -Xmx60M -Xms60M -jar /mnt /dacapo/dacapo-evaluation-git-f480064.jar fop
1 parent f7da8b5 commit 94ee3e0

File tree

2 files changed

+48
-46
lines changed

2 files changed

+48
-46
lines changed

openjdk/cpu/riscv/mmtkObjectBarrierSetAssembler_riscv.cpp

Lines changed: 47 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -31,62 +31,64 @@
3131
// mv a0,a4
3232
// tail _Z32object_reference_write_slow_callPvS_m
3333
void MMTkObjectBarrierSetAssembler::object_reference_write_post(MacroAssembler* masm, DecoratorSet decorators, Address dst, Register val, Register tmp1, Register tmp2) const {
34-
// tmp1 and tmp2 is from MacroAssembler::access_store_at
35-
// For do_oop_store, we have three tmps, x28/t3, x29/t4, x13/a3
36-
// printf("object_reference_write_post\n");
37-
if (can_remove_barrier(decorators, val, /* skip_const_null */ true)) return;
34+
// // tmp1 and tmp2 is from MacroAssembler::access_store_at
35+
// // For do_oop_store, we have three tmps, x28/t3, x29/t4, x13/a3
36+
// // printf("object_reference_write_post\n");
37+
// if (can_remove_barrier(decorators, val, /* skip_const_null */ true)) return;
3838
Register obj = dst.base();
3939
assert(obj->is_valid(), "dst must be an offset from a base register");
4040
RegSet saved = RegSet::of(obj); // see void G1BarrierSetAssembler::g1_write_barrier_post
4141
__ push_reg(saved, sp);
42-
#if MMTK_ENABLE_BARRIER_FASTPATH
43-
Label done;
44-
assert_different_registers(obj, tmp1, tmp2);
45-
assert_different_registers(val, tmp1, tmp2);
46-
assert(tmp1->is_valid(), "need temp reg");
47-
assert(tmp2->is_valid(), "need temp reg");
48-
// tmp1 = load-byte (SIDE_METADATA_BASE_ADDRESS + (obj >> 6));
49-
__ mv(tmp1, obj);
50-
__ srli(tmp1, tmp1, 6); // tmp1 = obj >> 6;
51-
__ li(tmp2, SIDE_METADATA_BASE_ADDRESS);
52-
__ add(tmp1, tmp1, tmp2); // tmp1 = SIDE_METADATA_BASE_ADDRESS + (obj >> 6);
53-
__ lbu(tmp1, Address(tmp1, 0));
54-
// tmp2 = (obj >> 3) & 7
55-
__ mv(tmp2, obj);
56-
__ srli(tmp2, tmp2, 3);
57-
__ andi(tmp2, tmp2, 7);
58-
// tmp1 = tmp1 >> tmp2
59-
__ sraw(tmp1, tmp1, tmp2);
60-
// if ((tmp1 & 1) == 1) fall through to slowpath;
61-
__ andi(tmp1, tmp1, 1);
62-
__ bnez(tmp1, done); // (tmp1 & 1) == 1 is equivalent to (tmp1 & 1) != 0
63-
// setup calling convention
64-
__ mv(c_rarg0, obj);
65-
__ la(c_rarg1, dst);
66-
__ mv(c_rarg2, val == noreg ? zr : val);
67-
__ call_VM_leaf_base(FN_ADDR(MMTkBarrierSetRuntime::object_reference_write_slow_call), 3);
42+
// #if MMTK_ENABLE_BARRIER_FASTPATH
43+
// Label done;
44+
// assert_different_registers(obj, tmp1, tmp2);
45+
// assert_different_registers(val, tmp1, tmp2);
46+
// assert(tmp1->is_valid(), "need temp reg");
47+
// assert(tmp2->is_valid(), "need temp reg");
48+
// // tmp1 = load-byte (SIDE_METADATA_BASE_ADDRESS + (obj >> 6));
49+
// __ mv(tmp1, obj);
50+
// __ srli(tmp1, tmp1, 6); // tmp1 = obj >> 6;
51+
// __ li(tmp2, SIDE_METADATA_BASE_ADDRESS);
52+
// __ add(tmp1, tmp1, tmp2); // tmp1 = SIDE_METADATA_BASE_ADDRESS + (obj >> 6);
53+
// __ lbu(tmp1, Address(tmp1, 0));
54+
// // tmp2 = (obj >> 3) & 7
55+
// __ mv(tmp2, obj);
56+
// __ srli(tmp2, tmp2, 3);
57+
// __ andi(tmp2, tmp2, 7);
58+
// // tmp1 = tmp1 >> tmp2
59+
// __ sraw(tmp1, tmp1, tmp2);
60+
// // if ((tmp1 & 1) == 1) fall through to slowpath;
61+
// __ andi(tmp1, tmp1, 1);
62+
// __ bnez(tmp1, done); // (tmp1 & 1) == 1 is equivalent to (tmp1 & 1) != 0
63+
// // setup calling convention
64+
// __ mv(c_rarg0, obj);
65+
// __ la(c_rarg1, dst);
66+
// __ mv(c_rarg2, val == noreg ? zr : val);
67+
// __ call_VM_leaf_base(FN_ADDR(MMTkBarrierSetRuntime::object_reference_write_slow_call), 3);
6868

69-
__ bind(done);
70-
#else
71-
__ mv(c_rarg0, obj);
72-
__ la(c_rarg1, dst);
73-
__ mv(c_rarg2, val == noreg ? zr : val);
74-
__ call_VM_leaf_base(FN_ADDR(MMTkBarrierSetRuntime::object_reference_write_post_call), 3);
75-
#endif
69+
// __ bind(done);
70+
// #else
71+
// __ push_reg(c_rarg0, obj);
72+
// // __ mv(c_rarg0, obj);
73+
// // //__ la(c_rarg1, dst);
74+
// // //__ mv(c_rarg2, val == noreg ? zr : val);
75+
// // __ call_VM_leaf_base(FN_ADDR(MMTkBarrierSetRuntime::object_reference_write_post_call), 3);
76+
// __ pop_reg(c_rarg0, obj);
77+
// #endif
7678
__ pop_reg(saved, sp);
7779
}
7880

7981
void MMTkObjectBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop,
8082
Register src, Register dst, Register count, Register tmp, RegSet saved_regs) {
8183
// see also void G1BarrierSetAssembler::gen_write_ref_array_post_barrier
82-
assert_different_registers(src, dst, count);
83-
const bool dest_uninitialized = (decorators & IS_DEST_UNINITIALIZED) != 0;
84-
if (is_oop && !dest_uninitialized) {
85-
// in address generate_checkcast_copy, caller tells us to save count
86-
__ push_reg(saved_regs, sp);
87-
__ call_VM_leaf(FN_ADDR(MMTkBarrierSetRuntime::object_reference_array_copy_post_call), src, dst, count);
88-
__ pop_reg(saved_regs, sp);
89-
}
84+
// assert_different_registers(src, dst, count);
85+
// const bool dest_uninitialized = (decorators & IS_DEST_UNINITIALIZED) != 0;
86+
// if (is_oop && !dest_uninitialized) {
87+
// // in address generate_checkcast_copy, caller tells us to save count
88+
// __ push_reg(saved_regs, sp);
89+
// __ call_VM_leaf(FN_ADDR(MMTkBarrierSetRuntime::object_reference_array_copy_post_call), src, dst, count);
90+
// __ pop_reg(saved_regs, sp);
91+
// }
9092
}
9193

9294
#undef __

openjdk/share/mmtkBarrierSet.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
#include CPU_HEADER(mmtkBarrierSetAssembler)
3939

4040
#define MMTK_ENABLE_ALLOCATION_FASTPATH true
41-
#define MMTK_ENABLE_BARRIER_FASTPATH true
41+
#define MMTK_ENABLE_BARRIER_FASTPATH false
4242

4343
const intptr_t ALLOC_BIT_BASE_ADDRESS = GLOBAL_ALLOC_BIT_ADDRESS;
4444

0 commit comments

Comments
 (0)