Blob Blame History Raw
--- common/asm-i386.hh.orig	2017-02-23 14:48:41.000000000 -0700
+++ common/asm-i386.hh	2017-02-24 14:00:27.428126212 -0700
@@ -160,6 +160,7 @@
 #define MEM(base)(R(base))
 #define MEM_DISP(base,displacement)displacement(R(base))
 #define MEM_INDEX(base,index)(R(base),R(index))
+#define MEM_DISPINDEX(base,displacement,index) displacement(R(base),R(index))
 #define MEM_SHINDEX(base,index,size)(R(base),R(index),size)
 #define MEM_DISP_SHINDEX0(displacement,index,size)displacement(,R(index),size)
 #define MEM_DISP_SHINDEX(base,displacement,index,size)displacement(R(base),R(index),size)
@@ -167,6 +168,7 @@
 #define INSNCONC(mnemonic,size_suffix)mnemonic##size_suffix
 #define INSN1(mnemonic,size_suffix,dst)INSNCONC(mnemonic,size_suffix) dst
 #define INSN2(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix) src,dst
+#define INSN3(mnemonic,size_suffix,displacement,src,dst)INSNCONC(mnemonic,size_suffix) displacement,src,dst
 #define INSN2MOVX(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix##l) src,dst
 #if defined(BSD_SYNTAX) || defined(COHERENT)
 #define INSN2SHCL(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix) R(cl),src,dst
@@ -199,6 +201,7 @@
 #define MEM(base) [base]
 #define MEM_DISP(base,displacement) [base+(displacement)]
 #define MEM_INDEX(base,index) [base+index]
+#define MEM_DISPINDEX(base,displacement,index) [base+(displacement)+index]
 #define MEM_SHINDEX(base,index,size) [base+index*size]
 #define MEM_DISP_SHINDEX0(displacement,index,size) [(displacement)+index*size]
 #define MEM_DISP_SHINDEX(base,displacement,index,size) [base+(displacement)+index*size]
@@ -206,6 +209,7 @@
 #define INSNCONC(mnemonic,suffix)mnemonic##suffix
 #define INSN1(mnemonic,size_suffix,dst)mnemonic dst
 #define INSN2(mnemonic,size_suffix,src,dst)mnemonic dst,src
+#define INSN3(mnemonic,size_suffix,displacement,src,dst) displacement,dst,src
 #define INSN2MOVX(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,x) dst,src
 #define INSN2SHCL(mnemonic,size_suffix,src,dst)mnemonic dst,src,R(cl)
 #define REPZ repz
--- common/asm-i386.sh.orig	2017-02-23 14:48:41.000000000 -0700
+++ common/asm-i386.sh	2017-02-24 14:02:19.403144281 -0700
@@ -82,15 +82,17 @@ s/[(]%\(e..\)[)]/MEM(\1)/g
 s/\([-+0-9A-Z_]\+\)[(],%\(e..\),\([0-9]*\)[)]/MEM_DISP_SHINDEX0(\1,\2,\3)/g
 s/\([-+0-9A-Z_]\+\)[(]%\(e..\),%\(e..\),\([0-9]*\)[)]/MEM_DISP_SHINDEX(\2,\1,\3,\4)/g
 s/[(]%\(e..\),%\(e..\),\([0-9]*\)[)]/MEM_SHINDEX(\1,\2,\3)/g
+s/\([-+0-9A-Z_]\+\)[(]%\(e..\),%\(e..\)[)]/MEM_DISPINDEX(\2,\1,\3)/g
 s/[(]%\(e..\),%\(e..\)[)]/MEM_INDEX(\1,\2)/g
 EOF
 
 cat > $tmpscript05 << \EOF
 # ----------- Introduce macro syntax for instructions
+s/\(imul\)\(.\)\([ 	]\+\)\(.*\)$/INSN3(\1,\2	,\4)/
 s/\(push\|pop\|mul\|div\|not\|neg\|inc\|dec\|fld\|fstp\)\(.\)\([ 	]\+\)\(.*\)$/INSN1(\1,\2	,\4)/
-s/\(call\|jmp\|jc\|jnc\|je\|jne\|jz\|jnz\|ja\|jae\|jb\|jbe\|jl\|jge\|js\|jns\)\([ 	]\+\)\(.*\)$/INSN1(\1,_	,\3)/
+s/\(call\|jmp\|jc\|jnc\|je\|jne\|jz\|jnz\|ja\|jae\|jb\|jbe\|jl\|jle\|jg\|jge\|js\|jns\)\([ 	]\+\)\(.*\)$/INSN1(\1,_	,\3)/
 s/\(movs\|movz\)\(.\)l\([ 	]\+\)\(.*\)$/INSN2MOVX(\1,\2,\4)/
-s/\(mov\|add\|sub\|adc\|sbb\|xor\|test\|cmp\|rcl\|rcr\|and\|or\|sar\|shr\|shl\|lea\)\(.\)\([ 	]\+\)\(.*\)$/INSN2(\1,\2	,\4)/
+s/\([[:blank:]]\+\)\(mov\|add\|sub\|adc\|sbb\|xor\|test\|cmp\|rcl\|rcr\|and\|or\|sar\|shr\|shl\|lea\)\(.\)\([ 	]\+\)\(.*\)$/\1INSN2(\2,\3	,\5)/
 s/\(shld\|shrd\)\(.\)\([ 	]\+\)shcl\( \+\)\(.*\)$/INSN2SHCL(\1,\2	,\5)/
 s/rep[ 	];/REP/
 s/repz[ 	];/REPZ/