Implement the increment and decrement instructions, and the two operand form of signe...
authorGabe Black <gblack@eecs.umich.edu>
Fri, 20 Jul 2007 21:59:14 +0000 (14:59 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Fri, 20 Jul 2007 21:59:14 +0000 (14:59 -0700)
--HG--
extra : convert_revision : d87df4b1b5470bed1d963dfe8e2ffa1403718342

src/arch/x86/isa/insts/arithmetic/increment_and_decrement.py
src/arch/x86/isa/insts/arithmetic/multiply_and_divide.py

index c504d47ce4cdbb247c1afc4b4611501c1ba50d18..eed39c10c24c45f5ed9b155bd2d5ef1c8dab0905 100644 (file)
 #
 # Authors: Gabe Black
 
-microcode = ""
+microcode = '''
+def macroop INC_R
+{
+    addi reg, reg, 1, flags=(OF, SF, ZF, AF, PF)
+};
+
+def macroop INC_M
+{
+    ld t1, ds, [scale, index, base], disp
+    addi t1, t1, 1, flags=(OF, SF, ZF, AF, PF)
+    st t1, ds, [scale, index, base], disp
+};
+
+def macroop INC_P
+{
+    rdip t7
+    ld t1, ds, [0, t0, t7], disp
+    addi reg, reg, 1, flags=(OF, SF, ZF, AF, PF)
+    st t1, ds, [0, t0, t7], disp
+};
+
+def macroop DEC_R
+{
+    subi reg, reg, 1, flags=(OF, SF, ZF, AF, PF)
+};
+
+def macroop DEC_M
+{
+    ld t1, ds, [scale, index, base], disp
+    subi t1, t1, 1, flags=(OF, SF, ZF, AF, PF)
+    st t1, ds, [scale, index, base], disp
+};
+
+def macroop DEC_P
+{
+    rdip t7
+    ld t1, ds, [0, t0, t7], disp
+    subi reg, reg, 1, flags=(OF, SF, ZF, AF, PF)
+    st t1, ds, [0, t0, t7], disp
+};
+'''
 #let {{
 #    class DEC(Inst):
 #      "GenFault ${new UnimpInstFault}"
index 662022e6ab20bec34c9a22beb1e46ec3c725197a..8697bef65c4309bc00f73250206e606b077628ef 100644 (file)
 #
 # Authors: Gabe Black
 
-microcode = ""
+microcode = '''
+
+#
+# Two operand signed multiply. These should set the CF and OF flags if the
+# result is too large for the destination register
+#
+
+def macroop IMUL_R_R
+{
+    mul1s reg, reg, regm
+};
+
+def macroop IMUL_R_M
+{
+    ld t1, ds, [scale, index, base], disp
+    mul1s reg, reg, t1
+};
+
+def macroop IMUL_R_P
+{
+    rdip t7
+    ld t1, ds, [scale, index, base], disp
+    mul1s reg, reg, t1
+};
+'''
 #let {{
 #    class MUL(Inst):
 #      "GenFault ${new UnimpInstFault}"