mescc: Support negative divide.
[mes.git] / lib / x86_64-mes / x86_64.M1
index 70785ef906b3058f9511738a2ef3e9101aec2bc4..760fef3d14653fe332186e93877fc253095892a8 100644 (file)
@@ -17,8 +17,9 @@
 ### along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
 
 # reduced instruction set: rax, rdi (some rcx for shift, rdx for mul, div)
-# 184 instructions
-# TODO: $i64/$0x64 instructions are missing
+# and r10 as i64 immediate helper
+# 206 instructions
+
 DEFINE add____$i32,%rax 4805
 DEFINE add____$i32,%rbp 4881c5
 DEFINE add____$i32,%rdi 4881c7
@@ -30,6 +31,8 @@ DEFINE add____$i8,%rsp 4883c4
 DEFINE add____$i8,(%rax) 8300
 DEFINE add____$i8,(%rdi) 8307
 DEFINE add____$i8,0x8(%rbp) 8345
+DEFINE add____%r15,(%rax) 4c0138
+DEFINE add____%r15,(%rdi) 4c013f
 DEFINE add____%rax,%rax 4801c0
 DEFINE add____%rbp,%rax 4801e8
 DEFINE add____%rdi,%rax 4801f8
@@ -43,12 +46,17 @@ DEFINE addl___$i8,(%rdi) 8307
 DEFINE addw___$i8,(%rax) 668100
 DEFINE addw___$i8,(%rdi) 668107
 DEFINE and____$i32,%rdi 4881e7
+DEFINE and____%r15,%rax 4c21f8
+DEFINE and____%r15,%rdi 4c21ff
 DEFINE and____%rdi,%rax 4821f8
 DEFINE call32 e8
 DEFINE call___*%rax ffd0
 DEFINE call___*%rdi ffd7
 DEFINE cmp____$i32,%rax 483d
 DEFINE cmp____$i8,%rax 4883f8
+DEFINE cmp____%r15,%rax 4c39f8
+DEFINE cmp____%r15,%rdi 4c39ff
+DEFINE cqto 4899
 DEFINE hlt f4
 DEFINE idiv___%rdi 48f7ff
 DEFINE ja32  0f87
@@ -68,17 +76,24 @@ DEFINE lahf 9f
 DEFINE mov____$i32,%rax 48c7c0
 DEFINE mov____$i32,%rdi 48c7c7
 DEFINE mov____$i32,0x8(%rbp) c745
+DEFINE mov____$i64,%r15 49bf
 DEFINE mov____$i64,%rax 48a1
 DEFINE mov____$i64,%rax 48b8
+DEFINE mov____$i64,%rax 48b8
+DEFINE mov____$i64,%rdi 48bf
 DEFINE mov____%al,(%rdi) 8807
 DEFINE mov____%al,0x32(%rbp) 8885
 DEFINE mov____%al,0x8(%rbp) 8845
 DEFINE mov____%ax,(%rdi) 668907
 DEFINE mov____%ax,0x8(%rbp) 668945
+DEFINE mov____%eax,%eax 89c0
+DEFINE mov____%eax,%rax 89c0
 DEFINE mov____%eax,(%rdi) 8907
 DEFINE mov____%eax,0x32(%rbp)  8985
 DEFINE mov____%eax,0x8(%rbp) 8945
 DEFINE mov____%eax,0x8(%rbp) 8945
+DEFINE mov____%edi,%edi 89ff
+DEFINE mov____%edi,%rdi 89ff
 DEFINE mov____%edi,0x32(%rbp) 89bd
 DEFINE mov____%edi,0x8(%rbp) 897d
 DEFINE mov____%esi,%eax 89f0
@@ -128,6 +143,8 @@ DEFINE mov____0x8(%rbp),%rsp 488b65
 DEFINE mov____0x8(%rdi),%rax 488b47
 DEFINE mov____0x8(%rdi),%rbp 488b6f
 DEFINE mov____0x8(%rdi),%rsp 488b67
+DEFINE movl___%eax,0x32 890425
+DEFINE movl___%edi,0x32 893c25
 DEFINE movsbq_%al,%rax 480fbec0
 DEFINE movsbq_%dil,%rdi 480fbeff
 DEFINE movsbq_(%rax),%rax 480fbe00
@@ -140,13 +157,19 @@ DEFINE movswq_%ax,%rax 480fbfc0
 DEFINE movswq_%di,%rdi 480fbfff
 DEFINE movswq_(%rax),%rax 480fbf00
 DEFINE movswq_(%rdi),%rdi 480fbf3f
+DEFINE movw___%ax,0x32 66890425
+DEFINE movw___%di,0x32 66893c25
 DEFINE movz___(%rax),%rax 480fb600
 DEFINE movzbq_%al,%rax 480fb6c0
 DEFINE movzbq_%dil,%rdi 480fb6ff
 DEFINE movzbq_(%rax),%rax 480fb600
 DEFINE movzbq_(%rdi),%rdi 480fb63f
+DEFINE movzlq_%eax,%rax 89c0
+DEFINE movzlq_%edi,%rdi 89ff
 DEFINE movzlq_(%rax),%rax 8b00
 DEFINE movzlq_(%rdi),%rdi 8b3f
+DEFINE movzwq_%ax,%rax 480fb7c0
+DEFINE movzwq_%di,%rdi 480fb7ff
 DEFINE movzwq_(%rax),%rax 480fb700
 DEFINE movzwq_(%rdi),%rdi 480fb73f
 DEFINE mul____%rdi 48f7e7
@@ -159,6 +182,7 @@ DEFINE pop____%rbp 5d
 DEFINE pop____%rdi 5f
 DEFINE pop____%rdx 5a
 DEFINE push___$i32 68
+DEFINE push___%r15 4157
 DEFINE push___%rax 50
 DEFINE push___%rbp 55
 DEFINE push___%rdi 57
@@ -180,6 +204,7 @@ DEFINE setg___%dil 400f9fc7
 DEFINE setge__%al 0f9dc0
 DEFINE setge__%dil 400f9dc7
 DEFINE setl___%al 0f9cc0
+DEFINE setl___%dil 400f9cc7
 DEFINE setle__%al 0f9ec0
 DEFINE setle__%dil 400f9ec7
 DEFINE setne__%al 0f95c0