aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/elymasGlobalSysAsm.ey2
-rw-r--r--elymas/lib/sys/opt.ey34
2 files changed, 34 insertions, 2 deletions
diff --git a/compiler/elymasGlobalSysAsm.ey b/compiler/elymasGlobalSysAsm.ey
index e31ab74..14052f5 100644
--- a/compiler/elymasGlobalSysAsm.ey
+++ b/compiler/elymasGlobalSysAsm.ey
@@ -266,7 +266,7 @@
/rsi /ecx :movlMemReg
8 /rsi :addqImm8Reg
3 /rcx :shrqImm8Reg
- :repnz :movsq
+ :reprcx :movsq
/rbp /rdi :xchgqRegReg
diff --git a/elymas/lib/sys/opt.ey b/elymas/lib/sys/opt.ey
index 16ceb74..e1ae466 100644
--- a/elymas/lib/sys/opt.ey
+++ b/elymas/lib/sys/opt.ey
@@ -249,7 +249,7 @@
/rdx :pushqReg
/rcx :pushqReg
- |and ::rawAddress /rax :movqImmReg
+ |or ::rawAddress /rax :movqImmReg
/rax :pushqReg
"*" | ::rawCodeAddress /rax :movqImmReg
/rax :callqReg
@@ -257,6 +257,37 @@
@done
]] ] ==:INLINEBLOCKOR
+ [ NATIVENOSCOPE [[
+ /rcx :popqReg
+ /rcx /rax :movqRegReg
+
+ 63 /rax :btrqImm8Reg
+ /nonInlineCase :jncLbl8
+
+ /rcx /rcx :xorqRegReg
+ /rax /rax :testqRegReg
+ /cl :seteReg
+ 63 /rcx :btsqImm8Reg
+ /rcx :pushqReg
+ /done :jmpLbl8
+
+ @positive
+ 1 /rax :movqImmReg
+ 63 /rax :btsqImm8Reg
+ /rax :pushqReg
+ /done :jmpLbl8
+
+ @nonInlineCase
+ /rcx :pushqReg
+
+ |not ::rawAddress /rax :movqImmReg
+ /rax :pushqReg
+ "*" | ::rawCodeAddress /rax :movqImmReg
+ /rax :callqReg
+
+ @done
+ ]] ] ==:INLINEBLOCKNOT
+
{ ==negatedOpcodeName ==functionName
[ NATIVENOSCOPE [[
/rcx :popqReg
@@ -754,6 +785,7 @@
[
{ 1 last * |and ::rawAddress eq }' { INLINEBLOCKAND i logic =[] [ NOP ] i 1 sub logic =[] }
{ 1 last * |or ::rawAddress eq }' { INLINEBLOCKOR i logic =[] [ NOP ] i 1 sub logic =[] }
+ { 1 last * |not ::rawAddress eq }' { INLINEBLOCKNOT i logic =[] [ NOP ] i 1 sub logic =[] }
{ 1 last * |eq ::rawAddress eq }' { INLINEBLOCKEQ i logic =[] [ NOP ] i 1 sub logic =[] }
{ 1 last * |neq ::rawAddress eq }' { INLINEBLOCKNEQ i logic =[] [ NOP ] i 1 sub logic =[] }