aboutsummaryrefslogtreecommitdiff
path: root/elymas/lib/sys
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2013-09-27 22:55:06 +0200
committerDrahflow <drahflow@gmx.de>2013-09-27 22:55:06 +0200
commitc9f003ea0a34a36fb6fb2bd285a7379f4aa36ea6 (patch)
tree5a1e08bf6deab257cf8576ceff6669248aa02e2b /elymas/lib/sys
parent7bac36eb5770408963b97f183dd8214c698f41a8 (diff)
Static writes directly using r14 as well
Diffstat (limited to 'elymas/lib/sys')
-rw-r--r--elymas/lib/sys/opt.ey27
1 files changed, 19 insertions, 8 deletions
diff --git a/elymas/lib/sys/opt.ey b/elymas/lib/sys/opt.ey
index 28faa9b..b82156f 100644
--- a/elymas/lib/sys/opt.ey
+++ b/elymas/lib/sys/opt.ey
@@ -547,16 +547,27 @@
{ action STATICWRITE streq }' {
[
- /r14 /rax :movqRegReg
- 2 entry { 16 /rax /rax :movqMemDisp8Reg } rep
+ 2 entry {
+ 16 /r14 /rax :movqMemDisp8Reg
+ 2 entry 1 sub { 16 /rax /rax :movqMemDisp8Reg } rep
- 3 entry {
- 24 /rax /rcx :movqMemDisp8Reg # load extension area pointer
- /rax /edx :movlMemReg # load scope length
- /rdx :negqReg # prepare for substraction
- 1 entry 1 /rdx /rcx :popqMemIndexScaleDisp32 # load entry from stack
+ 3 entry {
+ 24 /rax /rcx :movqMemDisp8Reg # load extension area pointer
+ /rax /edx :movlMemReg # load scope length
+ /rdx :negqReg # prepare for substraction
+ 1 entry 1 /rdx /rcx :popqMemIndexScaleDisp32 # load entry from stack
+ } {
+ 1 entry /rax :popqMemDisp32
+ } ? *
} {
- 1 entry /rax :popqMemDisp32
+ 3 entry {
+ 24 /r14 /rcx :movqMemDisp8Reg # load extension area pointer
+ /r14 /edx :movlMemReg # load scope length
+ /rdx :negqReg # prepare for substraction
+ 1 entry 1 /rdx /rcx :popqMemIndexScaleDisp32 # load entry from stack
+ } {
+ 1 entry /r14 :popqMemDisp32
+ } ? *
} ? *
] emitOpcodes
}