diff options
| author | Drahflow <drahflow@gmx.de> | 2015-07-10 12:20:27 +0200 |
|---|---|---|
| committer | Drahflow <drahflow@gmx.de> | 2015-07-10 12:20:27 +0200 |
| commit | 670c560397aaa4f492d2d306e865c60f18591288 (patch) | |
| tree | 96cd34f846c005de2076b09aedc77fbf66bc40a0 /compiler | |
| parent | 6ffad6c1458ed20eccdb7c7079d9747bd1bccaa3 (diff) | |
SHA512
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/elymasAsmOps.ey | 53 | ||||
| -rw-r--r-- | compiler/elymasGlobalSysAsm.ey | 2 |
2 files changed, 54 insertions, 1 deletions
diff --git a/compiler/elymasAsmOps.ey b/compiler/elymasAsmOps.ey index f3fe043..150a863 100644 --- a/compiler/elymasAsmOps.ey +++ b/compiler/elymasAsmOps.ey @@ -382,6 +382,16 @@ i imm8 } mnemonic /qImm8Reg defOp + { ==reg ==i + reg bit64assert + i 65536 65536 mul lt not { "Imm32 too large" die } rep + + 1 /none /none reg rex + %81 + modrmOpcode reg modrm11 + i imm32 + } mnemonic /qImm32Reg defOp + memoryAddressingVariants keys { ==variant memoryAddressingVariants variant . =*parse { parse ==mem ==i i 256 lt not { "Imm8 too large" die } rep @@ -412,6 +422,15 @@ modrmOpcode mem .encode i imm8 } mnemonic /qImm8 variant cat defOp + + { parse ==mem ==i + i 65536 65536 mul lt not { "Imm32 too large" die } rep + + 1 /none mem .idx mem .base rex + %81 + modrmOpcode mem .encode + i imm32 + } mnemonic /qImm32 variant cat defOp } each } /defAsmAddImm deff @@ -515,6 +534,14 @@ /bsf %0F %BC defAsmBsfq /bsr %0F %BD defAsmBsfq +{ ==reg + reg bit64assert + + 1 /none /none reg rex + %0F + %C8 reg regno %07 band add +} /bswapqReg deff + { ==off %E8 off imm32 @@ -1343,6 +1370,32 @@ memoryAddressingVariants keys { ==variant memoryAddressingVariants variant . =*p i imm8 } /rolqImm8Reg deff +{ ==reg + reg bit8assert + + reg regno %07 gt reg rexreqbyte or { 0 reg /none /none rex } rep + %D2 + /one reg modrm11 +} /rorbClReg deff + +{ ==reg + reg bit64assert + + 1 /none /none reg rex + %D3 + /one reg modrm11 +} /rorqClReg deff + +{ ==reg ==i + reg bit64assert + i 64 lt not { "Shift immediate too large" die } rep + + 1 /none /none reg rex + %C1 + /one reg modrm11 + i imm8 +} /rorqImm8Reg deff + { %AE } /scasb deff diff --git a/compiler/elymasGlobalSysAsm.ey b/compiler/elymasGlobalSysAsm.ey index 9fe2f2d..112b440 100644 --- a/compiler/elymasGlobalSysAsm.ey +++ b/compiler/elymasGlobalSysAsm.ey @@ -356,7 +356,7 @@ @referencesCopyLoop /rsi /rax :movqMemReg - 8 /rax /rax :movqMemDisp8Reg + 8 /rax /rax :movqMemDisp8Reg # FIXME: this should be parallel to replace :stosq 8 /rsi :addqImm8Reg /referencesCopyLoop :loopLbl8 |
