diff options
| author | David Lovemore | 2012-09-10 12:15:20 +0100 |
|---|---|---|
| committer | David Lovemore | 2012-09-10 12:15:20 +0100 |
| commit | 8cc0eeb220353e59c45adeae84d0a34bbe2d62f3 (patch) | |
| tree | 21d0ca271d99be7ef5da8e5d8750c03d5928d7f5 /mps/code/poolabs.c | |
| parent | 1c9b8d7eb3455c6ebbf10e5a9b6e8f49dbb51d79 (diff) | |
| download | emacs-8cc0eeb220353e59c45adeae84d0a34bbe2d62f3.tar.gz emacs-8cc0eeb220353e59c45adeae84d0a34bbe2d62f3.zip | |
Scan at correct rank according to the band in arenaread.
Copied from Perforce
Change: 179385
ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code/poolabs.c')
| -rw-r--r-- | mps/code/poolabs.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/mps/code/poolabs.c b/mps/code/poolabs.c index 9834feb711d..e3e45b7480c 100644 --- a/mps/code/poolabs.c +++ b/mps/code/poolabs.c | |||
| @@ -348,6 +348,8 @@ Res PoolNoAccess(Pool pool, Seg seg, Addr addr, | |||
| 348 | 348 | ||
| 349 | /* SegAccess | 349 | /* SegAccess |
| 350 | * | 350 | * |
| 351 | * See also PoolSingleAccess | ||
| 352 | * | ||
| 351 | * Should be used (for the access method) by Pool Classes which intend | 353 | * Should be used (for the access method) by Pool Classes which intend |
| 352 | * to handle page faults by scanning the entire segment and lowering | 354 | * to handle page faults by scanning the entire segment and lowering |
| 353 | * the barrier. | 355 | * the barrier. |
| @@ -372,6 +374,8 @@ Res PoolSegAccess(Pool pool, Seg seg, Addr addr, | |||
| 372 | 374 | ||
| 373 | /* SingleAccess | 375 | /* SingleAccess |
| 374 | * | 376 | * |
| 377 | * See also ArenaRead, and PoolSegAccess. | ||
| 378 | * | ||
| 375 | * Handles page faults by attempting emulation. If the faulting | 379 | * Handles page faults by attempting emulation. If the faulting |
| 376 | * instruction cannot be emulated then this function returns ResFAIL. | 380 | * instruction cannot be emulated then this function returns ResFAIL. |
| 377 | * | 381 | * |
| @@ -410,7 +414,7 @@ Res PoolSingleAccess(Pool pool, Seg seg, Addr addr, | |||
| 410 | /* .single-access.assume.ref */ | 414 | /* .single-access.assume.ref */ |
| 411 | /* .single-access.improve.format */ | 415 | /* .single-access.improve.format */ |
| 412 | ref = *(Ref *)addr; | 416 | ref = *(Ref *)addr; |
| 413 | /* Check that the reference is aligned to a word boundary */ | 417 | /* .tagging: Check that the reference is aligned to a word boundary */ |
| 414 | /* (we assume it is not a reference otherwise). */ | 418 | /* (we assume it is not a reference otherwise). */ |
| 415 | if(WordIsAligned((Word)ref, sizeof(Word))) { | 419 | if(WordIsAligned((Word)ref, sizeof(Word))) { |
| 416 | Rank rank; | 420 | Rank rank; |
| @@ -427,6 +431,8 @@ Res PoolSingleAccess(Pool pool, Seg seg, Addr addr, | |||
| 427 | 431 | ||
| 428 | /* Update SegSummary according to the possibly changed reference. */ | 432 | /* Update SegSummary according to the possibly changed reference. */ |
| 429 | ref = *(Ref *)addr; | 433 | ref = *(Ref *)addr; |
| 434 | /* .tagging: ought to check the reference for a tag. But | ||
| 435 | * this is conservative. */ | ||
| 430 | SegSetSummary(seg, RefSetAdd(arena, SegSummary(seg), ref)); | 436 | SegSetSummary(seg, RefSetAdd(arena, SegSummary(seg), ref)); |
| 431 | 437 | ||
| 432 | ShieldCover(arena, seg); | 438 | ShieldCover(arena, seg); |