diff options
| author | Drahflow <drahflow@gmx.de> | 2013-02-06 00:02:28 +0100 |
|---|---|---|
| committer | Drahflow <drahflow@gmx.de> | 2013-02-06 00:02:28 +0100 |
| commit | 4f9ab0adc677045612c3199f3be04cdcfd32a42a (patch) | |
| tree | ad210bc95f17e167797f968ff8992241fa1fcf44 /compiler/elymasAsm.ey | |
| parent | 199c2079370634675f9d3d7f366ea258c0cae890 (diff) | |
Typed functions now executing (a little)
Diffstat (limited to 'compiler/elymasAsm.ey')
| -rw-r--r-- | compiler/elymasAsm.ey | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/compiler/elymasAsm.ey b/compiler/elymasAsm.ey index bf55a51..974f1ce 100644 --- a/compiler/elymasAsm.ey +++ b/compiler/elymasAsm.ey @@ -29,7 +29,7 @@ [ /two /dl /dx /edx /rdx ] { 2 -01 defv }' each [ /three /bl /bx /ebx /rbx ] { 3 -01 defv }' each [ /four /sib /spl /ah /sp /esp /rsp ] { 4 -01 defv }' each - [ /five /bpl /ch /bp /ebp /rbp ] { 5 -01 defv }' each + [ /five /bpl /bp /ebp /rbp ] { 5 -01 defv }' each [ /six /sil /si /esi /rsi ] { 6 -01 defv }' each [ /seven /dil /di /edi /rdi ] { 7 -01 defv }' each [ /r8b /r8w /r8d /r8 ] { 8 -01 defv }' each @@ -44,6 +44,14 @@ { regnoTable -01 . } /regno deff + < + [ /al /cl /dl /bl ] { 0 -01 defv }' each + [ /spl /bpl /sil /dil ] { 1 -01 defv }' each + [ /r8b /r9b /r10b /r11b /r12b /r13b /r14b /r15b ] { 1 -01 defv }' each + > ==rexreqbyteTable + + { rexreqbyteTable -01 . } /rexreqbyte deff + # encoding a REX prefix { # ==b ==x ==r ==w %40 @@ -160,8 +168,8 @@ opcode lbl labelRel8 - _ 128 neg ge assert - _ 128 lt assert + _ 128 neg ge not { lbl " out of Lbl8 reach" cat die } rep + _ 128 lt not { lbl " out of Lbl8 reach" cat die } rep } name "Lbl8" cat > -- 2 |deff rep }' /defJmpRel8 deff @@ -231,7 +239,7 @@ reg bit8assert i 256 lt assert - reg regno %07 gt { 0 /none /none reg rex } rep + reg regno %07 gt reg rexreqbyte or { 0 /none /none reg rex } rep %80 /four reg modrm11 i imm8 @@ -372,12 +380,21 @@ reg bit8assert i 256 lt assert - reg regno %07 gt { 0 /none /none reg rex } rep + reg regno %07 gt reg rexreqbyte or { 0 /none /none reg rex } rep %80 /seven reg modrm11 i imm8 } /cmpbImmReg deff + { ==dst ==src + src bit8assert + dst bit8assert + + src regno %07 gt dst regno %07 gt src rexreqbyte dst rexreqbyte or or or { 0 src /none dst rex } rep + %38 + src dst modrm11 + } /cmpbRegReg deff + { ==mem ==reg reg bit32assert mem bit64assert @@ -590,7 +607,7 @@ mem bit64assert disp 128 lt assert - reg regno %07 gt mem regno %07 gt or { 0 reg /none mem rex } rep + reg regno %07 gt reg rexreqbyte mem regno %07 gt or or { 0 reg /none mem rex } rep %8A reg mem modrm01 disp imm8 @@ -600,7 +617,7 @@ reg bit8assert mem bit64assert - reg regno %07 gt mem regno %07 gt or { 0 reg /none mem rex } rep + reg regno %07 gt reg rexreqbyte mem regno %07 gt or or { 0 reg /none mem rex } rep %88 reg mem modrm00 } /movbRegMem deff @@ -987,6 +1004,16 @@ %0F %05 } /syscall deff + { ==reg =i + reg bit8assert + i 256 lt assert + + reg regno %07 gt { 0 /none /none reg rex } rep + %F6 + /zero reg modrm11 + i imm8 + } /testbImmReg deff + { ==dst ==src dst bit64assert src bit64assert |
