1+ use std:: sync:: atomic:: Ordering ;
2+
13use super :: UPCALLS ;
2- use crate :: OpenJDK ;
4+ use crate :: { vm_metadata, OpenJDK } ;
5+ use mmtk:: util:: metadata:: { header_metadata:: HeaderMetadataSpec , MetadataSpec } ;
36use mmtk:: util:: { Address , ObjectReference } ;
47use mmtk:: vm:: * ;
58use mmtk:: AllocationSemantics ;
@@ -8,10 +11,76 @@ use mmtk::CopyContext;
811pub struct VMObjectModel { }
912
1013impl ObjectModel < OpenJDK > for VMObjectModel {
11- #[ cfg( target_pointer_width = "64" ) ]
12- const GC_BYTE_OFFSET : isize = 7 ;
13- #[ cfg( target_pointer_width = "32" ) ]
14- const GC_BYTE_OFFSET : isize = 0 ;
14+ // For now we use the default const from mmtk-core
15+ const GLOBAL_LOG_BIT_SPEC : MetadataSpec = vm_metadata:: LOGGING_SIDE_METADATA_SPEC ;
16+
17+ const LOCAL_FORWARDING_POINTER_SPEC : MetadataSpec =
18+ vm_metadata:: FORWARDING_POINTER_METADATA_SPEC ;
19+ const LOCAL_FORWARDING_BITS_SPEC : MetadataSpec = vm_metadata:: FORWARDING_BITS_METADATA_SPEC ;
20+ const LOCAL_MARK_BIT_SPEC : MetadataSpec = vm_metadata:: MARKING_METADATA_SPEC ;
21+ const LOCAL_LOS_MARK_NURSERY_SPEC : MetadataSpec = vm_metadata:: LOS_METADATA_SPEC ;
22+
23+ #[ inline( always) ]
24+ fn load_metadata (
25+ metadata_spec : HeaderMetadataSpec ,
26+ object : ObjectReference ,
27+ mask : Option < usize > ,
28+ atomic_ordering : Option < Ordering > ,
29+ ) -> usize {
30+ vm_metadata:: load_metadata ( metadata_spec, object, mask, atomic_ordering)
31+ }
32+
33+ #[ inline( always) ]
34+ fn store_metadata (
35+ metadata_spec : HeaderMetadataSpec ,
36+ object : ObjectReference ,
37+ val : usize ,
38+ mask : Option < usize > ,
39+ atomic_ordering : Option < Ordering > ,
40+ ) {
41+ vm_metadata:: store_metadata ( metadata_spec, object, val, mask, atomic_ordering) ;
42+ }
43+
44+ #[ inline( always) ]
45+ fn compare_exchange_metadata (
46+ metadata_spec : HeaderMetadataSpec ,
47+ object : ObjectReference ,
48+ old_val : usize ,
49+ new_val : usize ,
50+ mask : Option < usize > ,
51+ success_order : Ordering ,
52+ failure_order : Ordering ,
53+ ) -> bool {
54+ vm_metadata:: compare_exchange_metadata (
55+ metadata_spec,
56+ object,
57+ old_val,
58+ new_val,
59+ mask,
60+ success_order,
61+ failure_order,
62+ )
63+ }
64+
65+ #[ inline( always) ]
66+ fn fetch_add_metadata (
67+ metadata_spec : HeaderMetadataSpec ,
68+ object : ObjectReference ,
69+ val : usize ,
70+ order : Ordering ,
71+ ) -> usize {
72+ vm_metadata:: fetch_add_metadata ( metadata_spec, object, val, order)
73+ }
74+
75+ #[ inline( always) ]
76+ fn fetch_sub_metadata (
77+ metadata_spec : HeaderMetadataSpec ,
78+ object : ObjectReference ,
79+ val : usize ,
80+ order : Ordering ,
81+ ) -> usize {
82+ vm_metadata:: fetch_sub_metadata ( metadata_spec, object, val, order)
83+ }
1584
1685 #[ inline]
1786 fn copy (
0 commit comments