aboutsummaryrefslogtreecommitdiff
path: root/compiler/elymasAsmLib.ey
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/elymasAsmLib.ey')
-rw-r--r--compiler/elymasAsmLib.ey6
1 files changed, 3 insertions, 3 deletions
diff --git a/compiler/elymasAsmLib.ey b/compiler/elymasAsmLib.ey
index fb6bd76..2d3fe88 100644
--- a/compiler/elymasAsmLib.ey
+++ b/compiler/elymasAsmLib.ey
@@ -803,12 +803,10 @@
# guaranteed not to clobber rcx, rsi (because it is used in many loops)
@markObject
# rdi == address of a reachable object or some other random bits
- 15 /dil :testbImmReg
- /markObjectDone :jnzLbl32 # pointing to unaligned address
-
/rdi /rdx :movqRegReg
/r8 /rdx :subqRegReg
/markObjectDone :jbLbl32 # pointing below the heap
+
/rdi /r11 :cmpqRegReg
/markObjectDone :jbeLbl32 # pointing above the heap
@@ -821,6 +819,8 @@
/markObjectDone :jcLbl8 # was already marked (or not an object at all)
/rdx /r9 :btqRegMem # test block bit
/markObjectDoneFixMarkBit :jncLbl8 # not pointing to an object (... and mark bit should not have been set)
+ 15 /dil :testbImmReg
+ /markObjectDoneFixMarkBit :jnzLbl32 # pointing to unaligned address (... and mark bit should not have been set)
/rbp /rbp :xorqRegReg # rbp == 0: not from stack exploration, function code references ignored if trivial forward