diff options
| author | Irene Knapp <ireneista@irenes.space> | 2026-09-12 20:44:52 -0700 |
|---|---|---|
| committer | Irene Knapp <ireneista@irenes.space> | 2026-09-12 20:44:52 -0700 |
| commit | 010625ab1a82f95a2d5dd51939a25636c5fdcbf9 (patch) | |
| tree | 1509f6ea18ab8b946e9b4a2675e2e67045946511 | |
| parent | fb274a2b22f7a4c1f81b7639a80fb02ddc5bf402 (diff) | |
fully verify the hex-transformed output of all Evocation-assembly words
the verification included words that aren't used in Evocation itself. it also resulted in fixing several such words that were broken in ways that would have crashed. it was a very thorough verification. do honor to the effort that was put into it by always verifying that changes to amd64.e don't break it, from now on :) Force-Push: yes Change-Id: Ia1904f4b35f90772fd9dce79a0274627c547edbf
| -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 |