aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/elymasAsmLib.ey32
1 files changed, 15 insertions, 17 deletions
diff --git a/compiler/elymasAsmLib.ey b/compiler/elymasAsmLib.ey
index 8d940bb..5bfd938 100644
--- a/compiler/elymasAsmLib.ey
+++ b/compiler/elymasAsmLib.ey
@@ -81,8 +81,8 @@
{ %00 %00 %00 %00 %00 %60 %00 %00 } /HEAPBASE deff
{ %00 %00 %00 %00 %00 %50 %00 %00 } /BLOCKBASE deff
{ %00 %00 %00 %00 %00 %40 %00 %00 } /MARKBASE deff
- 4096 16 mul 8 mul ==ALLOCCHUNKSIZE # minimum ALLOCCHUNKSIZE
- # 4096 16 mul 8 mul 256 mul ==ALLOCCHUNKSIZE # FIXME: there is still some wonkyness with freezing
+ # 4096 16 mul 8 mul ==ALLOCCHUNKSIZE # minimum ALLOCCHUNKSIZE
+ 4096 16 mul 8 mul 16 mul ==ALLOCCHUNKSIZE # FIXME: there is still some wonkyness with freezing
<
# current end of heap memory (grows upwards)
@@ -277,21 +277,11 @@
/rbx /r9 :btrqRegMem # reset mark bit
# prepare block length and GC header (-> light grey)
+ 59 /rdi :btsqImm8Reg
4 /rbx :shlqImm8Reg
/rax :movqImmOOBReg HEAPBASE
/rbx /rax :addqRegReg
/rdi /rax :movqRegMem
- %08 7 /rax :movbImmMemDisp8
-
- # zero rest of block # TODO eliminate this one day
- /rax :pushqReg
- /rdi /rcx :movqRegReg
- 8 /rax /rdi :leaqMemDisp8Reg
- 3 /rcx :shrqImm8Reg
- /rcx :decqReg
- /rax /rax :xorqRegReg
- :reprcx :stosq
- /rax :popqReg
/r9 :popqReg
/r8 :popqReg
@@ -920,8 +910,17 @@
%26 7 /rax :orbImmMemDisp8
8 /rax :popqMemDisp8 # reference name table
16 /rax :popqMemDisp8 # set parent
- /rdi /rdi :xorqRegReg # zero extension
- /rdi 24 /rax :movqRegMemDisp8
+
+ # zero extension and remaining scope
+
+ /rax /ecx :movlMemReg
+ 3 /rcx :shrqImm8Reg
+ 3 /rcx :subqImm8Reg
+ 24 /rax /rdi :leaqMemDisp8Reg
+ /rsi /rax :xchgqRegReg
+ /rax /rax :xorqRegReg
+ :reprcx :stosq
+ /rsi /rax :xchgqRegReg
:retn
] /internalAllocateScope defv
@@ -996,8 +995,7 @@
# set type
%10 7 /rax :orbImmMemDisp8
- /rdx /rdx :xorqRegReg
- /rdx 8 /rax :movqRegMemDisp8
+ 0 8 /rax :andqImm8MemDisp8
16 /rax :popqMemDisp8
:retn