Skip to content

Simplified LXR GC#358

Draft
wenyuzhao wants to merge 607 commits into
mmtk:jdk-21from
wenyuzhao:lxr-x/jdk21-simplified
Draft

Simplified LXR GC#358
wenyuzhao wants to merge 607 commits into
mmtk:jdk-21from
wenyuzhao:lxr-x/jdk21-simplified

Conversation

@wenyuzhao

Copy link
Copy Markdown
Member

The mmtk-core PR: mmtk/mmtk-core#1508

Important features that has been removed from the main lxr branch:

  • class unloading
  • weak ref processing
  • various performance optimizations

wenyuzhao and others added 29 commits March 22, 2026 21:17
Remove scan_multiple_thread_roots from the OpenJDK binding to match the
corresponding removal in mmtk-core. This includes removing:
- scan_multiple_thread_root implementation in scanning.rs
- scan_multiple_thread_roots field from OpenJDK_Upcalls struct
- mmtk_scan_multiple_thread_roots function and initializer entry in mmtkUpcalls.cpp
- Function pointer declaration in mmtk.h

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
- Remove ~30 unused Cargo feature flags: barrier measurement/instrumentation
  (barrier_measurement, yield_and_roots_timer, satb_timer, log_gc, etc.),
  experiment flags (field_barrier_no_*, compressed pointer modes, no_fast_alloc,
  same_stw_and_conc_threads, lxr_*_conc_workers), and stale flags
  (release_debug_assertions, discontig_space, g3_compatibilities)
- Delete .cargo/config.toml that forced AVX/SSE target features
- Remove DISABLE_ALLOCATION_FAST_PATH and FIELD_BARRIER_NO_* exported statics
  from lib.rs and their corresponding extern declarations in mmtk.h
- Remove stale declarations from mmtk.h: CLASS_UNLOADING_ENABLED,
  ENABLE_CLASS_UNLOADING_LOGS macro, GLOBAL_SIDE_METADATA_VM_BASE_ADDRESS_COMPRESSED,
  HEAP_START, HEAP_END, disable_fast_alloc()
- Simplify mmtk_builder_set_conc_threads to pass through the value directly
- Remove all FIELD_BARRIER_NO_* conditional guards from C++ barrier code
  (mmtkFieldBarrier.cpp/hpp, mmtkBarrierSet.cpp, mmtkBarrierSetC2.cpp,
  mmtkBarrierSetAssembler_x86.cpp), always executing the full barrier path
- Remove disable_fast_alloc() checks from allocation fast-path conditions
- Remove commented-out profile settings from Cargo.toml

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Remove the VM binding implementations for the array scanning
optimization that was removed from mmtk-core.

Changes:
- Remove Scanning trait method implementations: obj_array_data,
  is_obj_array, is_val_array, get_obj_kind
- Remove helper functions from object_scanning.rs: is_obj_array,
  is_val_array, get_obj_kind, obj_array_data
- Remove ObjectKind imports

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…wrappers

All barrier types (FieldBarrier, ObjectBarrier, SATBBarrier) on all
architectures (x86, aarch64, riscv) now call Rust FFI functions directly
from assembler, C1, and C2 generated code, eliminating the intermediate
C++ wrapper functions that only added a Thread::current() lookup.

Rust FFI parameter order changes (mutator moved to last position):
- mmtk_object_reference_write_pre(src, slot, target, mutator)
- mmtk_object_reference_write_post(src, slot, target, mutator)
- mmtk_array_copy_post(src, dst, count, mutator)

Assembler changes (x86, aarch64, riscv):
- UnlogBitBarrier: loads mutator from thread register, calls
  mmtk_object_reference_write_slow/pre/post directly
- ObjectBarrier arraycopy_epilogue: calls mmtk_array_copy_post directly
- SATBBarrier load_at/arraycopy_prologue: calls mmtk_load_reference and
  mmtk_array_copy_pre directly

C1 runtime stubs (x86, aarch64, riscv):
- Loads mutator as the (argc+1)-th argument from thread register
- Entry points changed to Rust functions

C2 (shared):
- UnlogBitBarrier, SATBBarrier, FieldBarrier: all call Rust functions
  directly with mutator node from thread pointer

Removed C++ wrapper functions from MMTkBarrierSetRuntime:
- object_reference_write_pre_call
- object_reference_write_post_call
- object_reference_write_slow_call
- object_reference_array_copy_pre_call
- object_reference_array_copy_post_call
- load_reference_call

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…mbly calls

- Updated assembly code across various architectures (AArch64, RISC-V, x86) to eliminate the need for passing the mutator as an argument in barrier calls.
- Introduced new runtime functions in MMTkBarrierSetRuntime to handle mutator retrieval internally.
- Adjusted function signatures in the MMTk API to reflect the changes in argument order for load and write barriers.
- Removed unnecessary includes of mmtkMutator.hpp from several files.
- Ensured that all references to mutator in barrier calls are replaced with the new runtime functions.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants