aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2013-09-15 21:03:17 +0200
committerDrahflow <drahflow@gmx.de>2013-09-15 21:03:17 +0200
commitcb5d3e47e54a188ecbb5385f80b0bdadf9297b33 (patch)
treecb8acb5765eac291aa3df3b9047cc4a66d0f1130
parent9b1a4420c62c5698c077f2659060a9ad1bfc7a30 (diff)
Obvious optimization is obvious
-rw-r--r--compiler/elymasAsmLib.ey23
1 files changed, 8 insertions, 15 deletions
diff --git a/compiler/elymasAsmLib.ey b/compiler/elymasAsmLib.ey
index c8c71f9..f2f597f 100644
--- a/compiler/elymasAsmLib.ey
+++ b/compiler/elymasAsmLib.ey
@@ -259,9 +259,6 @@
/noFreeBlockAvailable :jmpLbl32
@freeBlockFound
- /r9 :popqReg
- /r8 :popqReg
-
# rdi == size of block to allocate
# rbx == last cell of free block of sufficient size
@@ -280,11 +277,9 @@
/rbx /rax :movqRegReg
3 /rax :shrqImm8Reg
- /rdx :movqImmOOBReg BLOCKBASE
- 1 /rdx /rax /sil :orbMemIndexScaleReg # sil now { mask block bor }
+ 1 /r8 /rax /sil :orbMemIndexScaleReg # sil now { mask block bor }
/rsi :notqReg # sil now { mask block bor bnot }
- /rdx :movqImmOOBReg MARKBASE
- /sil 1 /rdx /rax :orbRegMemIndexScale # set mark bit if block bit was zero
+ /sil 1 /r9 /rax :orbRegMemIndexScale # set mark bit if block bit was zero
@dontSplit
# mark block as used (-> white)
@@ -301,11 +296,9 @@
/rbx /rax :movqRegReg
3 /rax :shrqImm8Reg
- /rdx :movqImmOOBReg BLOCKBASE
- /sil 1 /rdx /rax :orbRegMemIndexScale # set block bit
+ /sil 1 /r8 /rax :orbRegMemIndexScale # set block bit
/rsi :notqReg # sil now { mask bnot }
- /rdx :movqImmOOBReg MARKBASE
- /sil 1 /rdx /rax :andbRegMemIndexScale # reset mark bit
+ /sil 1 /r9 /rax :andbRegMemIndexScale # reset mark bit
# ensure the new block is marked as block extend throughout in the bitmaps
# TODO reconnect free blocks while scanning instead
@@ -329,10 +322,8 @@
/rbx /rax :movqRegReg
3 /rax :shrqImm8Reg
- /rdx :movqImmOOBReg BLOCKBASE
- /sil 1 /rdx /rax :andbRegMemIndexScale # reset block bit
- /rdx :movqImmOOBReg MARKBASE
- /sil 1 /rdx /rax :andbRegMemIndexScale # reset mark bit
+ /sil 1 /r8 /rax :andbRegMemIndexScale # reset block bit
+ /sil 1 /r9 /rax :andbRegMemIndexScale # reset mark bit
/markBlockFree :jmpLbl8
@markedBlockFree
@@ -357,6 +348,8 @@
:reprcx :stosq
/rax :popqReg
+ /r9 :popqReg
+ /r8 :popqReg
:retn
@noFreeBlockAvailable