Skip to content

Commit 3be34fc

Browse files
authored
Update to mmtk-core PR#108. Fat pointer for spaces in allocators. (#19)
1 parent 2763eaf commit 3be34fc

File tree

4 files changed

+40
-24
lines changed

4 files changed

+40
-24
lines changed

jikesrvm/rvm/src/org/jikesrvm/mm/mminterface/NoGCContext.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public class NoGCContext extends NoGCMutator {
3535
@Entrypoint
3636
Address space;
3737
@Entrypoint
38+
Address spaceFat; // space is a fat pointer
39+
@Entrypoint
3840
Address planNoGC;
3941
// CommonMutatorContext
4042
// Immortal BumpAllocator
@@ -47,6 +49,8 @@ public class NoGCContext extends NoGCMutator {
4749
@Entrypoint
4850
Address spaceImmortal;
4951
@Entrypoint
52+
Address spaceImmortalFat;
53+
@Entrypoint
5054
Address planImmortal;
5155
// LargeObjectAllocator
5256
@Entrypoint
@@ -60,12 +64,14 @@ public class NoGCContext extends NoGCMutator {
6064
static final Offset cursorOffset = getField(NoGCContext.class, "cursor", Address.class).getOffset();
6165
static final Offset limitOffset = getField(NoGCContext.class, "limit", Address.class).getOffset();
6266
static final Offset spaceOffset = getField(NoGCContext.class, "space", Address.class).getOffset();
67+
static final Offset spaceFatOffset = getField(NoGCContext.class, "spaceFat", Address.class).getOffset();
6368
static final Offset planNoGCOffset = getField(NoGCContext.class, "planNoGC", Address.class).getOffset();
6469

6570
static final Offset threadIdImmortalOffset = getField(NoGCContext.class, "threadIdImmortal", Address.class).getOffset();
6671
static final Offset cursorImmortalOffset = getField(NoGCContext.class, "cursorImmortal", Address.class).getOffset();
6772
static final Offset limitImmortalOffset = getField(NoGCContext.class, "limitImmortal", Address.class).getOffset();
6873
static final Offset spaceImmortalOffset = getField(NoGCContext.class, "spaceImmortal", Address.class).getOffset();
74+
static final Offset spaceImmortalFatOffset = getField(NoGCContext.class, "spaceImmortalFat", Address.class).getOffset();
6975
static final Offset planImmortalOffset = getField(NoGCContext.class, "planImmortal", Address.class).getOffset();
7076

7177
static final Offset threadIdLosOffset = getField(NoGCContext.class, "threadIdLos", Address.class).getOffset();
@@ -103,17 +109,19 @@ public Address setBlock(Address mmtkHandle) {
103109
cursor = mmtkHandle.plus(BYTES_IN_WORD).loadAddress();
104110
limit = mmtkHandle.plus(BYTES_IN_WORD * 2).loadAddress();
105111
space = mmtkHandle.plus(BYTES_IN_WORD * 3).loadAddress();
106-
planNoGC = mmtkHandle.plus(BYTES_IN_WORD * 4).loadAddress();
107-
108-
threadIdImmortal = mmtkHandle.plus(BYTES_IN_WORD * 5).loadAddress();
109-
cursorImmortal = mmtkHandle.plus(BYTES_IN_WORD * 6).loadAddress();
110-
limitImmortal = mmtkHandle.plus(BYTES_IN_WORD * 7).loadAddress();
111-
spaceImmortal = mmtkHandle.plus(BYTES_IN_WORD * 8).loadAddress();
112-
planImmortal = mmtkHandle.plus(BYTES_IN_WORD * 9).loadAddress();
113-
114-
threadIdLos = mmtkHandle.plus(BYTES_IN_WORD * 10).loadAddress();
115-
spaceLos = mmtkHandle.plus(BYTES_IN_WORD * 11).loadAddress();
116-
planLos = mmtkHandle.plus(BYTES_IN_WORD * 12).loadAddress();
112+
spaceFat = mmtkHandle.plus(BYTES_IN_WORD * 4).loadAddress();
113+
planNoGC = mmtkHandle.plus(BYTES_IN_WORD * 5).loadAddress();
114+
115+
threadIdImmortal = mmtkHandle.plus(BYTES_IN_WORD * 6).loadAddress();
116+
cursorImmortal = mmtkHandle.plus(BYTES_IN_WORD * 7).loadAddress();
117+
limitImmortal = mmtkHandle.plus(BYTES_IN_WORD * 8).loadAddress();
118+
spaceImmortal = mmtkHandle.plus(BYTES_IN_WORD * 9).loadAddress();
119+
spaceImmortalFat = mmtkHandle.plus(BYTES_IN_WORD * 10).loadAddress();
120+
planImmortal = mmtkHandle.plus(BYTES_IN_WORD * 11).loadAddress();
121+
122+
threadIdLos = mmtkHandle.plus(BYTES_IN_WORD * 12).loadAddress();
123+
spaceLos = mmtkHandle.plus(BYTES_IN_WORD * 13).loadAddress();
124+
planLos = mmtkHandle.plus(BYTES_IN_WORD * 14).loadAddress();
117125

118126
return Magic.objectAsAddress(this).plus(threadIdOffset);
119127
}

jikesrvm/rvm/src/org/jikesrvm/mm/mminterface/SSContext.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ public class SSContext extends SSMutator {
3737
@Entrypoint
3838
Address space;
3939
@Entrypoint
40+
Address spaceFat; // space is a fat pointer
41+
@Entrypoint
4042
Address planSS;
4143
// plan ref
4244
@Entrypoint
@@ -52,6 +54,8 @@ public class SSContext extends SSMutator {
5254
@Entrypoint
5355
Address spaceImmortal;
5456
@Entrypoint
57+
Address spaceImmortalFat;
58+
@Entrypoint
5559
Address planImmortal;
5660
// LargeObjectAllocator
5761
@Entrypoint
@@ -65,6 +69,7 @@ public class SSContext extends SSMutator {
6569
static final Offset cursorOffset = getField(SSContext.class, "cursor", Address.class).getOffset();
6670
static final Offset limitOffset = getField(SSContext.class, "limit", Address.class).getOffset();
6771
static final Offset spaceOffset = getField(SSContext.class, "space", Address.class).getOffset();
72+
static final Offset spaceFatOffset = getField(SSContext.class, "spaceFat", Address.class).getOffset();
6873
static final Offset planSSOffset = getField(SSContext.class, "planSS", Address.class).getOffset();
6974

7075
static final Offset planRefOffset = getField(SSContext.class, "planRef", Address.class).getOffset();
@@ -73,6 +78,7 @@ public class SSContext extends SSMutator {
7378
static final Offset cursorImmortalOffset = getField(SSContext.class, "cursorImmortal", Address.class).getOffset();
7479
static final Offset limitImmortalOffset = getField(SSContext.class, "limitImmortal", Address.class).getOffset();
7580
static final Offset spaceImmortalOffset = getField(SSContext.class, "spaceImmortal", Address.class).getOffset();
81+
static final Offset spaceImmortalFatOffset = getField(SSContext.class, "spaceImmortalFat", Address.class).getOffset();
7682
static final Offset planImmortalOffset = getField(SSContext.class, "planImmortal", Address.class).getOffset();
7783

7884
static final Offset threadIdLosOffset = getField(SSContext.class, "threadIdLos", Address.class).getOffset();
@@ -84,19 +90,21 @@ public Address setBlock(Address mmtkHandle) {
8490
cursor = mmtkHandle.plus(BYTES_IN_WORD).loadAddress();
8591
limit = mmtkHandle.plus(BYTES_IN_WORD * 2).loadAddress();
8692
space = mmtkHandle.plus(BYTES_IN_WORD * 3).loadAddress();
87-
planSS = mmtkHandle.plus(BYTES_IN_WORD * 4).loadAddress();
93+
spaceFat = mmtkHandle.plus(BYTES_IN_WORD * 4).loadAddress();
94+
planSS = mmtkHandle.plus(BYTES_IN_WORD * 5).loadAddress();
8895

89-
planRef = mmtkHandle.plus(BYTES_IN_WORD * 5).loadAddress();
96+
planRef = mmtkHandle.plus(BYTES_IN_WORD * 6).loadAddress();
9097

91-
threadIdImmortal = mmtkHandle.plus(BYTES_IN_WORD * 6).loadAddress();
92-
cursorImmortal = mmtkHandle.plus(BYTES_IN_WORD * 7).loadAddress();
93-
limitImmortal = mmtkHandle.plus(BYTES_IN_WORD * 8).loadAddress();
94-
spaceImmortal = mmtkHandle.plus(BYTES_IN_WORD * 9).loadAddress();
95-
planImmortal = mmtkHandle.plus(BYTES_IN_WORD * 10).loadAddress();
98+
threadIdImmortal = mmtkHandle.plus(BYTES_IN_WORD * 7).loadAddress();
99+
cursorImmortal = mmtkHandle.plus(BYTES_IN_WORD * 8).loadAddress();
100+
limitImmortal = mmtkHandle.plus(BYTES_IN_WORD * 9).loadAddress();
101+
spaceImmortal = mmtkHandle.plus(BYTES_IN_WORD * 10).loadAddress();
102+
spaceImmortalFat = mmtkHandle.plus(BYTES_IN_WORD * 11).loadAddress();
103+
planImmortal = mmtkHandle.plus(BYTES_IN_WORD * 12).loadAddress();
96104

97-
threadIdLos = mmtkHandle.plus(BYTES_IN_WORD * 11).loadAddress();
98-
spaceLos = mmtkHandle.plus(BYTES_IN_WORD * 12).loadAddress();
99-
planLos = mmtkHandle.plus(BYTES_IN_WORD * 13).loadAddress();
105+
threadIdLos = mmtkHandle.plus(BYTES_IN_WORD * 13).loadAddress();
106+
spaceLos = mmtkHandle.plus(BYTES_IN_WORD * 14).loadAddress();
107+
planLos = mmtkHandle.plus(BYTES_IN_WORD * 15).loadAddress();
100108
return Magic.objectAsAddress(this).plus(threadIdOffset);
101109
}
102110

mmtk/src/api.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ use mmtk::util::heap::MonotonePageResource;
194194
#[no_mangle]
195195
pub extern "C" fn alloc_slow_bump_monotone_immortal(allocator: *mut c_void, size: usize, align: usize, offset:isize) -> Address {
196196
use mmtk::policy::immortalspace::ImmortalSpace;
197-
unsafe { &mut *(allocator as *mut BumpAllocator<JikesRVM, MonotonePageResource<JikesRVM, ImmortalSpace<JikesRVM>>>) }.alloc_slow(size, align, offset)
197+
unsafe { &mut *(allocator as *mut BumpAllocator<JikesRVM>) }.alloc_slow(size, align, offset)
198198
}
199199

200200
// For plans that do not include copy space, use the other implementation
@@ -204,7 +204,7 @@ pub extern "C" fn alloc_slow_bump_monotone_immortal(allocator: *mut c_void, size
204204
#[cfg(any(feature = "semispace"))]
205205
pub extern "C" fn alloc_slow_bump_monotone_copy(allocator: *mut c_void, size: usize, align: usize, offset:isize) -> Address {
206206
use mmtk::policy::copyspace::CopySpace;
207-
unsafe { &mut *(allocator as *mut BumpAllocator<JikesRVM, MonotonePageResource<JikesRVM, CopySpace<JikesRVM>>>) }.alloc_slow(size, align, offset)
207+
unsafe { &mut *(allocator as *mut BumpAllocator<JikesRVM>) }.alloc_slow(size, align, offset)
208208
}
209209
#[no_mangle]
210210
#[cfg(not(any(feature = "semispace")))]

0 commit comments

Comments
 (0)