diff options
| -rw-r--r-- | compiler/elymasGlobalSysAsm.ey | 2 | ||||
| -rw-r--r-- | elymas/lib/sys/opt.ey | 34 |
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 =[] } |
