aboutsummaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2015-05-13 15:05:07 +0200
committerDrahflow <drahflow@gmx.de>2015-05-13 15:05:07 +0200
commitec762220e5ec0785b8860af226fa517aac8494bc (patch)
treed30db40fc45ccdd8bf4c3d00aa6b9abb894c737d /compiler
parent505524b45f59263fb29057e829b9a39ef86e0e99 (diff)
Now with 57% less runtime
Diffstat (limited to 'compiler')
-rw-r--r--compiler/elymasAsmLib.ey19
-rw-r--r--compiler/elymasGlobal.ey12
2 files changed, 22 insertions, 9 deletions
diff --git a/compiler/elymasAsmLib.ey b/compiler/elymasAsmLib.ey
index fdf97b8..ce5ffcf 100644
--- a/compiler/elymasAsmLib.ey
+++ b/compiler/elymasAsmLib.ey
@@ -938,8 +938,17 @@
@allocateFromSystem
heapSize /rax :movqImmReg
/rax /rdi :movqMemReg
- ALLOCCHUNKSIZE /rsi :movqImmReg # size of new block
+ ALLOCCHUNKSIZE /rax :movqImmReg # minimum size of new block
+ /rdi /rcx :movqRegReg
+ 24 /rcx :shrqImm8Reg
+ /rcx :incqReg
+ /rdx /rdx :xorqRegReg
+ /rcx :mulqReg # allocate more if heap is already large
+ /rax /rsi :movqRegReg
+ /rsi :pushqReg
+
/rsi /rdi :addqRegReg
+ heapSize /rax :movqImmReg
/rdi /rax :movqRegMem
/rsi /rdi :subqRegReg
/rax :movqImmOOBReg HEAPBASE
@@ -950,7 +959,11 @@
heapSize /rax :movqImmReg
/rax /rdi :movqMemReg
7 /rdi :shrqImm8Reg
- ALLOCCHUNKSIZE 128 udiv /rsi :movqImmReg
+
+ /rsi :popqReg
+ 7 /rsi :shrqImm8Reg
+ /rsi :pushqReg
+
/rsi /rdi :subqRegReg
/rax :movqImmOOBReg BLOCKBASE
/rax /rdi :addqRegReg
@@ -959,7 +972,7 @@
heapSize /rax :movqImmReg
/rax /rdi :movqMemReg
7 /rdi :shrqImm8Reg
- ALLOCCHUNKSIZE 128 udiv /rsi :movqImmReg
+ /rsi :popqReg
/rsi /rdi :subqRegReg
/rax :movqImmOOBReg MARKBASE
/rax /rdi :addqRegReg
diff --git a/compiler/elymasGlobal.ey b/compiler/elymasGlobal.ey
index e7cea98..90fbfda 100644
--- a/compiler/elymasGlobal.ey
+++ b/compiler/elymasGlobal.ey
@@ -1809,12 +1809,12 @@
%30 -101* /eydefvst defv
%31 -101* /eydeffst defv
%33 -101* /eydefmst defv
- %50 -101* /eydefvc defv
- %51 -101* /eydeffc defv
- %53 -101* /eydefmc defv
- %D0 -101* /eydefvd defv
- %D1 -101* /eydeffd defv
- %D3 -101* /eydefmd defv
+ %40 -101* /eydefvc defv
+ %41 -101* /eydeffc defv
+ %43 -101* /eydefmc defv
+ %C0 -101* /eydefvd defv
+ %C1 -101* /eydeffd defv
+ %C3 -101* /eydefmd defv
--
# retype a function