Skip to content

Commit 27e5882

Browse files
authored
Update to mmtk-core PR #644 (#176)
This PR updates the OpenJDK binding for mmtk/mmtk-core#644. Furthermore, it separates a write barrier call from the write barrier slowpath call.
1 parent 688791e commit 27e5882

File tree

6 files changed

+27
-12
lines changed

6 files changed

+27
-12
lines changed

mmtk/Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mmtk/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ once_cell = "1.10.0"
2929
# - change branch
3030
# - change repo name
3131
# But other changes including adding/removing whitespaces in commented lines may break the CI.
32-
mmtk = { git = "https://github.com/mmtk/mmtk-core.git", rev = "4904004d55c48858d12a97a8e2ebb559fb91c0de" }
32+
mmtk = { git = "https://github.com/mmtk/mmtk-core.git", rev = "d8bcf90991224cfe06153689b14c3e1eea0e025e" }
3333
# Uncomment the following to build locally
3434
# mmtk = { path = "../repos/mmtk-core" }
3535

mmtk/src/api.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,11 +309,20 @@ pub extern "C" fn executable() -> bool {
309309
}
310310

311311
#[no_mangle]
312-
pub extern "C" fn record_modified_node(
312+
pub extern "C" fn post_write_barrier(mutator: &'static mut Mutator<OpenJDK>, obj: ObjectReference) {
313+
mutator
314+
.barrier()
315+
.post_write_barrier(mmtk::plan::BarrierWriteTarget::Object(obj))
316+
}
317+
318+
#[no_mangle]
319+
pub extern "C" fn post_write_barrier_slow(
313320
mutator: &'static mut Mutator<OpenJDK>,
314321
obj: ObjectReference,
315322
) {
316-
mutator.record_modified_node(obj);
323+
mutator
324+
.barrier()
325+
.post_write_barrier_slow(mmtk::plan::BarrierWriteTarget::Object(obj))
317326
}
318327

319328
// finalization

openjdk/barriers/mmtkObjectBarrier.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
#include "runtime/interfaceSupport.inline.hpp"
44

55
void MMTkObjectBarrierSetRuntime::record_modified_node_slow(void* obj) {
6-
::record_modified_node((MMTk_Mutator) &Thread::current()->third_party_heap_mutator, (void*) obj);
6+
::post_write_barrier_slow((MMTk_Mutator) &Thread::current()->third_party_heap_mutator, (void*) obj);
7+
}
8+
9+
void MMTkObjectBarrierSetRuntime::record_modified_node_full(void* obj) {
10+
::post_write_barrier((MMTk_Mutator) &Thread::current()->third_party_heap_mutator, (void*) obj);
711
}
812

913
void MMTkObjectBarrierSetRuntime::record_modified_node(oop src) {
@@ -16,7 +20,7 @@ void MMTkObjectBarrierSetRuntime::record_modified_node(oop src) {
1620
record_modified_node_slow((void*) src);
1721
}
1822
#else
19-
record_modified_node_slow((void*) src);
23+
record_modified_node_full((void*) src);
2024
#endif
2125
}
2226

@@ -73,7 +77,7 @@ void MMTkObjectBarrierSetAssembler::record_modified_node(MacroAssembler* masm, R
7377
#else
7478
assert_different_registers(c_rarg0, obj);
7579
__ movptr(c_rarg0, obj);
76-
__ call_VM_leaf_base(CAST_FROM_FN_PTR(address, MMTkObjectBarrierSetRuntime::record_modified_node_slow), 1);
80+
__ call_VM_leaf_base(CAST_FROM_FN_PTR(address, MMTkObjectBarrierSetRuntime::record_modified_node_full), 1);
7781
#endif
7882
}
7983

@@ -194,7 +198,7 @@ void MMTkObjectBarrierSetC2::record_modified_node(GraphKit* kit, Node* src, Node
194198
} __ end_if();
195199
#else
196200
const TypeFunc* tf = __ func_type(TypeOopPtr::BOTTOM);
197-
Node* x = __ make_leaf_call(tf, CAST_FROM_FN_PTR(address, MMTkObjectBarrierSetRuntime::record_modified_node_slow), "record_modified_node", src);
201+
Node* x = __ make_leaf_call(tf, CAST_FROM_FN_PTR(address, MMTkObjectBarrierSetRuntime::record_modified_node_full), "record_modified_node", src);
198202
#endif
199203

200204
kit->final_sync(ideal); // Final sync IdealKit and GraphKit.

openjdk/barriers/mmtkObjectBarrier.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ const intptr_t SIDE_METADATA_BASE_ADDRESS = (intptr_t) GLOBAL_SIDE_METADATA_VM_B
2323
class MMTkObjectBarrierSetRuntime: public MMTkBarrierSetRuntime {
2424
public:
2525
static void record_modified_node_slow(void* src);
26+
static void record_modified_node_full(void* src);
2627

2728
virtual bool is_slow_path_call(address call) {
28-
return call == CAST_FROM_FN_PTR(address, record_modified_node_slow);
29+
return call == CAST_FROM_FN_PTR(address, record_modified_node_slow) || call == CAST_FROM_FN_PTR(address, record_modified_node_full);
2930
}
3031

3132
virtual void record_modified_node(oop src);
@@ -68,7 +69,7 @@ class MMTkObjectBarrierSetAssembler: public MMTkBarrierSetAssembler {
6869

6970
__ save_live_registers_no_oop_map(true);
7071

71-
__ call_VM_leaf_base(CAST_FROM_FN_PTR(address, MMTkObjectBarrierSetRuntime::record_modified_node_slow), 1);
72+
__ call_VM_leaf_base(CAST_FROM_FN_PTR(address, MMTkObjectBarrierSetRuntime::record_modified_node_full), 1);
7273

7374
__ restore_live_registers(true);
7475

openjdk/mmtk.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ extern void* alloc_slow_largeobject(MMTk_Mutator mutator, size_t size,
4545
extern void post_alloc(MMTk_Mutator mutator, void* refer,
4646
int bytes, int allocator);
4747

48-
extern void record_modified_node(MMTk_Mutator mutator, void* obj);
48+
extern void post_write_barrier(MMTk_Mutator mutator, void* obj);
49+
extern void post_write_barrier_slow(MMTk_Mutator mutator, void* obj);
4950

5051
extern void release_buffer(void** buffer, size_t len, size_t cap);
5152

0 commit comments

Comments
 (0)