summary refs log tree commit diff
path: root/amd64.e
diff options
context:
space:
mode:
Diffstat (limited to 'amd64.e')
-rw-r--r--amd64.e77
1 files changed, 41 insertions, 36 deletions
diff --git a/amd64.e b/amd64.e
index e11ec2e..1449bfd 100644
--- a/amd64.e
+++ b/amd64.e
@@ -190,6 +190,7 @@ s" :cc-greater" keyword
 ~
 ~ (register -- 3-bit encoded value for register)
 : reg64
+  ~ : provide-keyword
   dup :rax = { drop 0 exit } if
   dup :rcx = { drop 1 exit } if
   dup :rdx = { drop 2 exit } if
@@ -202,6 +203,7 @@ s" :cc-greater" keyword
 
 ~ (register -- 3-bit encoded value for register)
 : extrareg64
+  ~ : provide-keyword
   dup :r8 = { drop 0 exit } if
   dup :r9 = { drop 1 exit } if
   dup :r10 = { drop 2 exit } if
@@ -214,6 +216,7 @@ s" :cc-greater" keyword
 
 ~ (register -- 3-bit encoded value for register)
 : reg32
+  ~ : provide-keyword
   dup :eax = { drop 0 exit } if
   dup :ecx = { drop 1 exit } if
   dup :edx = { drop 2 exit } if
@@ -226,6 +229,7 @@ s" :cc-greater" keyword
 
 ~ (register -- 3-bit encoded value for register)
 : reg16
+  ~ : provide-keyword
   dup :ax = { drop 0 exit } if
   dup :cx = { drop 1 exit } if
   dup :dx = { drop 2 exit } if
@@ -238,6 +242,7 @@ s" :cc-greater" keyword
 
 ~ (register -- 3-bit encoded value for register)
 : reg8
+  ~ : provide-keyword
   dup :al = { drop 0 exit } if
   dup :cl = { drop 1 exit } if
   dup :dl = { drop 2 exit } if
@@ -643,7 +648,7 @@ s" :cc-greater" keyword
 
 ~ (output point, immediate value, register -- output point)
 : mov-reg64-imm32
-  ~ : 5 # mov-reg64-imm32
+  ~ : 5 # # mov-reg64-imm32
   3roll
   rex-w 0xC7 pack8 swap
   0 swap addressing-reg64
@@ -651,12 +656,12 @@ s" :cc-greater" keyword
   ~ : provide-hex32
   pack32 ;
 : mov-reg64-imm64
-  ~ : 8 # mov-reg64-imm64
+  ~ : 8 # # mov-reg64-imm64
   3roll rex-w swap reg64 0xB8 opcodereg swap
   ~ : provide-hex64
   pack64 ;
 : mov-extrareg64-imm64
-  ~ : 8 # mov-extrareg64-imm64
+  ~ : 8 # # mov-extrareg64-imm64
   ~   Note the use of the B rex bit here; this instruction puts the register
   ~ number in the opcode field, so it uses Table 3-1.
   3roll rex-wb swap extrareg64 0xB8 opcodereg swap
@@ -665,31 +670,31 @@ s" :cc-greater" keyword
 
 ~ (output point, source register, target register -- output point)
 : mov-reg64-reg64
-  ~ : 1 mov-reg64-reg64
+  ~ : 1 # # mov-reg64-reg64
   3roll rex-w 0x89 pack8 3unroll
   swap reg64 swap addressing-reg64 ;
 : mov-indirect-reg64-reg64
-  ~ : 1 mov-indirect-reg64-reg64
+  ~ : 1 # # mov-indirect-reg64-reg64
   3roll rex-w 0x89 pack8 3unroll
   swap reg64 swap addressing-indirect-reg64 ;
 
 ~ (output point, source register, target register, target displacement value
 ~  -- output point)
 : mov-disp8-reg64-reg64
-  ~ : 1 mov-disp8-reg64-reg64
+  ~ : 1 # # mov-disp8-reg64-reg64
   4 roll rex-w 0x89 pack8 4 unroll
   3roll reg64 3unroll addressing-disp8-reg64 ;
 
 ~ (output point, source register, target register -- output point)
 : mov-reg64-indirect-reg64
-  ~ : 1 mov-reg64-indirect-reg64
+  ~ : 1 # # mov-reg64-indirect-reg64
   3roll rex-w 0x8B pack8 3unroll
   reg64 swap addressing-indirect-reg64 ;
 
 ~ (output point, source register, source displacement value, target register
 ~  -- output point)
 : mov-reg64-disp8-reg64
-  ~ : 1 mov-reg64-disp8-reg64
+  ~ : 1 # # mov-reg64-disp8-reg64
   4 roll rex-w 0x8B pack8 4 unroll
   reg64 3unroll addressing-disp8-reg64 ;
 : mov-reg64-disp32-reg64
@@ -1000,25 +1005,25 @@ s" :cc-greater" keyword
 
 ~ (output point, source register, target register -- output point)
 : add-reg64-reg64
-  ~ : 1 add-reg64-reg64
+  ~ : 1 # # add-reg64-reg64
   3roll rex-w 0x01 pack8 3unroll
   swap reg64 swap addressing-reg64 ;
 
 ~ (output point, source register, target register -- output point)
 : add-indirect-reg64-reg64
-  ~ : 1 add-indirect-reg64-reg64
+  ~ : 1 # # add-indirect-reg64-reg64
   3roll rex-w 0x01 pack8 3unroll
   swap reg64 swap addressing-indirect-reg64 ;
 
 ~ (output point, source register, target register -- output point)
 : add-reg64-indirect-reg64
-  ~ : 1 add-reg64-indirect-reg64
+  ~ : 1 # # add-reg64-indirect-reg64
   3roll rex-w 0x03 pack8 3unroll
   reg64 swap addressing-indirect-reg64 ;
 
 ~ (output point, immediate value, target register -- output point)
 : add-reg64-imm8
-  ~ : 2 # add-reg64-imm8
+  ~ : 2 # # add-reg64-imm8
   3roll rex-w 0x83 pack8 swap 0 swap addressing-reg64
   swap
   ~ : provide-hex8
@@ -1028,13 +1033,13 @@ s" :cc-greater" keyword
 ~
 ~ (output point, source register, target register -- output point)
 : sub-reg64-reg64
-  ~ : 1 sub-reg64-reg64
+  ~ : 1 # # sub-reg64-reg64
   3roll rex-w 0x2B pack8 3unroll
   reg64 swap addressing-reg64 ;
 
 ~ (output point, source register, target register -- output point)
 : sub-indirect-reg64-reg64
-  ~ : 1 sub-indirect-reg64-reg64
+  ~ : 1 # # sub-indirect-reg64-reg64
   3roll rex-w 0x2B pack8 3unroll
   swap reg64 swap addressing-indirect-reg64 ;
 
@@ -1042,7 +1047,7 @@ s" :cc-greater" keyword
 ~
 ~ (output point, immediate value, target register -- output point)
 : sub-reg64-imm8
-  ~ : 2 # sub-reg64-imm8
+  ~ : 2 # # sub-reg64-imm8
   3roll rex-w 0x83 pack8 swap 5 swap addressing-reg64
   swap
   ~ : provide-hex8
@@ -1052,7 +1057,7 @@ s" :cc-greater" keyword
 ~
 ~ (output point, source register, target register -- output point)
 : sbb-reg64-imm8
-  ~ : 2 # sbb-reg64-imm8
+  ~ : 2 # # sbb-reg64-imm8
   3roll rex-w 0x83 pack8 swap 3 swap addressing-reg64
   swap
   ~ : provide-hex8
@@ -1062,7 +1067,7 @@ s" :cc-greater" keyword
 ~
 ~ (output point, source register -- output point)
 : mul-reg64
-  ~ : 1 mul-reg64
+  ~ : 1 # mul-reg64
   swap rex-w 0xF7 pack8 swap
   4 swap addressing-reg64 ;
 
@@ -1075,7 +1080,7 @@ s" :cc-greater" keyword
 ~
 ~ (output point, divisor register -- output point)
 : divmod-reg64
-  ~ : 1 divmod-reg64
+  ~ : 1 # divmod-reg64
   swap rex-w 0xF7 pack8 swap
   6 swap addressing-reg64 ;
 
@@ -1083,29 +1088,29 @@ s" :cc-greater" keyword
 ~
 ~ (output point, divisor register -- output point)
 : idivmod-reg64
-  ~ : 1 idivmod-reg64
+  ~ : 1 # idivmod-reg64
   swap rex-w 0xF7 pack8 swap
   7 swap addressing-reg64 ;
 
 ~ (output point, target register -- output point)
 : inc-reg64
-  ~ : 1 inc-reg64
+  ~ : 1 # inc-reg64
   swap rex-w 0xFF pack8 swap 0 swap addressing-reg64 ;
 
 ~ (output point, target register -- output point)
 : dec-reg64
-  ~ : 1 dec-reg64
+  ~ : 1 # dec-reg64
   swap rex-w 0xFF pack8 swap 1 swap addressing-reg64 ;
 
 ~ (output point, source register, target register -- output point)
 : and-reg64-reg64
-  ~ : 1 and-reg64-reg64
+  ~ : 1 # # and-reg64-reg64
   3roll rex-w 0x23 pack8 3unroll
   reg64 swap addressing-reg64 ;
 
 ~ (output point, source value, target register -- output point)
 : and-reg64-imm8
-  ~ : 2 # and-reg64-imm8
+  ~ : 2 # # and-reg64-imm8
   3roll rex-w 0x83 pack8 swap
   4 swap addressing-reg64
   swap
@@ -1114,13 +1119,13 @@ s" :cc-greater" keyword
 
 ~ (output point, source register, target register -- output point)
 : or-reg64-reg64
-  ~ : 1 or-reg64-reg64
+  ~ : 1 # # or-reg64-reg64
   3roll rex-w 0x0B pack8 3unroll
   reg64 swap addressing-reg64 ;
 
 ~ (output point, source value, target register -- output point)
 : or-reg64-imm8
-  ~ : 2 # or-reg64-imm8
+  ~ : 2 # # or-reg64-imm8
   3roll rex-w 0x83 pack8 swap
   1 swap addressing-reg64
   swap
@@ -1129,19 +1134,19 @@ s" :cc-greater" keyword
 
 ~ (output point, source register, target register -- output point)
 : xor-reg64-reg64
-  ~ : 1 xor-reg64-reg64
+  ~ : 1 # # xor-reg64-reg64
   3roll rex-w 0x33 pack8 3unroll
   reg64 swap addressing-reg64 ;
 
 ~ (output point, target register -- output point)
 : not-reg64
-  ~ : 1 not-reg64
+  ~ : 1 # not-reg64
   swap rex-w 0xF7 pack8
   swap 2 swap addressing-reg64 ;
 
 ~ (output point, bit count, target register -- output point)
 : rol-reg64-imm8
-  ~ : 2 # rol-reg64-imm8
+  ~ : 2 # # rol-reg64-imm8
   3roll rex-w 0xC1 pack8 swap
   0 swap addressing-reg64
   swap
@@ -1150,7 +1155,7 @@ s" :cc-greater" keyword
 
 ~ (output point, bit count, target register -- output point)
 : rol-reg8-imm8
-  ~ : 2 # rol-reg8-imm8
+  ~ : 2 # # rol-reg8-imm8
   3roll 0xC0 pack8 swap
   0 swap addressing-reg8
   swap
@@ -1159,7 +1164,7 @@ s" :cc-greater" keyword
 
 ~ (output point, bit count, target register -- output point)
 : ror-reg64-imm8
-  ~ : 1 # ror-reg64-imm8
+  ~ : 1 # # ror-reg64-imm8
   3roll rex-w 0xC1 swap
   1 swap addressing-reg64
   swap
@@ -1168,7 +1173,7 @@ s" :cc-greater" keyword
 
 ~ (output point, bit count, target register -- output point)
 : ror-reg8-imm8
-  ~ : 2 # ror-reg8-imm8
+  ~ : 2 # # ror-reg8-imm8
   3roll 0xC0 pack8 swap
   1 swap addressing-reg64
   swap
@@ -1188,7 +1193,7 @@ s" :cc-greater" keyword
 ~
 ~ (output point, left register, right register -- output point)
 : cmp-reg64-reg64
-  ~ : 1 cmp-reg64-reg64
+  ~ : 1 # # cmp-reg64-reg64
   3roll rex-w 0x3B pack8 3unroll
   reg64 swap addressing-reg64 ;
 
@@ -1196,7 +1201,7 @@ s" :cc-greater" keyword
 ~
 ~ (output point, immediate value, target register -- output point)
 : cmp-reg64-imm8
-  ~ : 2 # cmp-reg64-imm8
+  ~ : 2 # # cmp-reg64-imm8
   3roll rex-w 0x83 pack8
   ~ (immediate value, register, output point)
   swap 7 swap addressing-reg64
@@ -1214,13 +1219,13 @@ s" :cc-greater" keyword
 ~
 ~ (output point, left register, right register -- output point)
 : test-reg64-reg64
-  ~ : 1 test-reg64-reg64
+  ~ : 1 # # test-reg64-reg64
   3roll rex-w 0x85 pack8 3unroll
   swap reg64 swap addressing-reg64 ;
 
 ~ (output point, condition code, target register -- output point)
 : set-reg8-cc
-  ~ : 1 set-reg8-cc
+  ~ : 1 # set-reg8-cc
   3roll 0x0F pack8
   3roll condition-code 0x90 opcodecc
   swap reg8 3 0 3roll modrm ;
@@ -1244,7 +1249,7 @@ s" :cc-greater" keyword
 
 ~ (output point, register -- output point)
 : jmp-abs-indirect-reg64
-  ~ : 1 jmp-abs-indirect-reg64
+  ~ : 1 # jmp-abs-indirect-reg64
   swap 0xFF pack8 swap
   4 swap addressing-indirect-reg64 ;