diff options
Diffstat (limited to 'amd64.e')
| -rw-r--r-- | amd64.e | 68 |
1 files changed, 46 insertions, 22 deletions
diff --git a/amd64.e b/amd64.e index 5036c81..20f140c 100644 --- a/amd64.e +++ b/amd64.e @@ -745,7 +745,6 @@ s" :cc-greater" keyword ~ (output point, source register, target register, target displacement value ~ -- output point) -~ TODO IAK this is where the verification is up to : mov-disp8-reg64-reg64 ~ : 1 # # # mov-disp8-reg64-reg64 4 roll rex-w 0x89 pack8 4 unroll @@ -768,7 +767,10 @@ s" :cc-greater" keyword : mov-reg64-disp32-reg64 ~ : 1 # # # mov-reg64-disp32-reg64 4 roll rex-w 0x89 pack8 4 unroll - 3roll reg64 swap 3roll addressing-disp32-reg64 ; + 3roll reg64 swap 3roll addressing-disp32-reg64 + ~ : swap-subitems + ~ : 3 roll-subitems + ; ~ (output point, ~ source base register, source index register, source index scale factor, @@ -785,20 +787,26 @@ s" :cc-greater" keyword ~ : 1 # # # # mov-indexed-reg64-reg64 5 roll rex-w 0x89 pack8 5 unroll 4 roll reg64 4 unroll - 3unroll swap addressing-indexed-reg64 ; + 3unroll swap addressing-indexed-reg64 + ~ : 4 roll-subitems + ; ~ (output point, source register, target register -- output point) : mov-indirect-reg64-reg32 ~ : 1 # # mov-indirect-reg64-reg32 3roll 0x89 pack8 3unroll - swap reg32 swap addressing-indirect-reg64 ; + swap reg32 swap addressing-indirect-reg64 + ~ : swap-subitems + ; ~ (output point, source register, target register, target displacement value ~ -- output point) : mov-disp8-reg64-reg32 ~ : 1 # # # mov-disp8-reg64-reg32 4 roll 0x89 pack8 4 unroll - 3roll reg32 3unroll addressing-disp8-reg64 ; + 3roll reg32 3unroll addressing-disp8-reg64 + ~ : 3 roll-subitems + ; ~ (output point, source register, target register -- output point) : mov-reg32-indirect-reg64 @@ -817,14 +825,18 @@ s" :cc-greater" keyword : mov-indirect-reg64-reg16 ~ : 2 # # mov-indirect-reg64-reg16 3roll 0x66 pack8 0x89 pack8 3unroll - swap reg16 swap addressing-indirect-reg64 ; + swap reg16 swap addressing-indirect-reg64 + ~ : swap-subitems + ; ~ (output point, source register, target register, target displacement value ~ -- output point) : mov-disp8-reg64-reg16 ~ : 2 # # # mov-disp8-reg64-reg16 4 roll 0x66 pack8 0x89 pack8 4 unroll - 3roll reg16 3unroll addressing-disp8-reg64 ; + 3roll reg16 3unroll addressing-disp8-reg64 + ~ : 3 roll-subitems + ; ~ (output point, source register, target register -- output point) : mov-reg16-indirect-reg64 @@ -843,14 +855,18 @@ s" :cc-greater" keyword : mov-indirect-reg64-reg8 ~ : 1 # # mov-indirect-reg64-reg8 3roll 0x88 pack8 3unroll - swap reg8 swap addressing-indirect-reg64 ; + swap reg8 swap addressing-indirect-reg64 + ~ : swap-subitems + ; ~ (output point, source register, target register, target displacement value ~ -- output point) : mov-disp8-reg64-reg8 ~ : 1 # # # mov-disp8-reg64-reg8 4 roll 0x88 pack8 4 unroll - 3roll reg8 3unroll addressing-disp8-reg64 ; + 3roll reg8 3unroll addressing-disp8-reg64 + ~ : 3 roll-subitems + ; ~ (output point, source register, target register -- output point) : mov-reg8-indirect-reg64 @@ -858,22 +874,20 @@ s" :cc-greater" keyword 3roll 0x8A pack8 3unroll reg8 swap addressing-indirect-reg64 ; -~ TODO this word is probably broken? It appears to try packing something -~ that doesn't exist, and it's never called. ~ (output point, source register, source displacement value, target register ~ -- output point) : mov-reg8-disp8-reg64 ~ : 2 # # # mov-reg8-disp8-reg64 - 4 roll - ~ : provide-hex8 - pack8 0x8A pack8 4 unroll + 4 roll 0x8A pack8 4 unroll reg8 3unroll addressing-disp8-reg64 ; ~ (output point, source register, target register -- output point) : mov-reg8-reg8 ~ : 1 # # mov-reg8-reg8 3roll 0x88 pack8 3unroll - swap reg8 swap addressing-reg8 ; + swap reg8 swap addressing-reg8 + ~ : swap-subitems + ; ~ String instructions @@ -1077,13 +1091,17 @@ s" :cc-greater" keyword : add-reg64-reg64 ~ : 1 # # add-reg64-reg64 3roll rex-w 0x01 pack8 3unroll - swap reg64 swap addressing-reg64 ; + swap reg64 swap addressing-reg64 + ~ : swap-subitems + ; ~ (output point, source register, target register -- output point) : add-indirect-reg64-reg64 ~ : 1 # # add-indirect-reg64-reg64 3roll rex-w 0x01 pack8 3unroll - swap reg64 swap addressing-indirect-reg64 ; + swap reg64 swap addressing-indirect-reg64 + ~ : swap-subitems + ; ~ (output point, source register, target register -- output point) : add-reg64-indirect-reg64 @@ -1111,7 +1129,9 @@ s" :cc-greater" keyword : sub-indirect-reg64-reg64 ~ : 1 # # sub-indirect-reg64-reg64 3roll rex-w 0x2B pack8 3unroll - swap reg64 swap addressing-indirect-reg64 ; + swap reg64 swap addressing-indirect-reg64 + ~ : swap-subitems + ; ~ See above re: parameter order. ~ @@ -1235,7 +1255,7 @@ s" :cc-greater" keyword ~ (output point, bit count, target register -- output point) : ror-reg64-imm8 ~ : 1 # # ror-reg64-imm8 - 3roll rex-w 0xC1 swap + 3roll rex-w 0xC1 pack8 swap 1 swap addressing-reg64 swap ~ : provide-hex @@ -1291,14 +1311,18 @@ s" :cc-greater" keyword : test-reg64-reg64 ~ : 1 # # test-reg64-reg64 3roll rex-w 0x85 pack8 3unroll - swap reg64 swap addressing-reg64 ; + swap reg64 swap addressing-reg64 + ~ : swap-subitems + ; ~ (output point, condition code, target register -- output point) : set-reg8-cc ~ : 1 # # set-reg8-cc 3roll 0x0F pack8 3roll condition-code 0x90 opcodecc - swap reg8 3 0 3roll modrm ; + swap reg8 3 0 3roll modrm + ~ : swap-subitems + ; ~ (output point, address offset value, condition code -- output point) : jmp-cc-rel-imm8 @@ -1311,7 +1335,7 @@ s" :cc-greater" keyword ~ (output point, address offset value, condition code -- output point) : jmp-cc-rel-imm32 ~ : 5 # # jmp-cc-rel-imm32 - 3unroll 0x0F pack8 + 3roll 0x0F pack8 swap condition-code 0x70 opcodecc swap ~ : provide-hex |