X86: Implement the LOOP instructions.
authorGabe Black <gblack@eecs.umich.edu>
Fri, 19 Oct 2007 05:38:17 +0000 (22:38 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Fri, 19 Oct 2007 05:38:17 +0000 (22:38 -0700)
--HG--
extra : convert_revision : 3ccd0565c83b6d9c9b63f9f7ac2b67839a2c714f

src/arch/x86/isa/decoder/one_byte_opcodes.isa
src/arch/x86/isa/insts/general_purpose/control_transfer/loop.py

index b1fdce0a7a7a7f190cb38ffeecbfdb0827aaba9f..6e7fdea35617547bcc31e579af6ea716c4537376 100644 (file)
         }
         ##include "x87.isa"
         0x1C: decode OPCODE_OP_BOTTOM3 {
-            0x0: loopne_Jb();
-            0x1: loope_Jb();
-            0x2: loop_Jb();
+            0x0: Inst::LOOPNE(Jb);
+            0x1: Inst::LOOPE(Jb);
+            0x2: Inst::LOOP(Jb);
             0x3: Inst::JRCX(Jb);
             0x4: in_Al_Ib();
             0x5: in_eAX_Ib();
index d742f217f808cf54ce5a72e1abba27190f77d454..c5674db7fbfc7bf518dd6d5f4724ce9259818df8 100644 (file)
 #
 # Authors: Gabe Black
 
-microcode = ""
-#let {{
-#    class LOOPcc(Inst):
-#      "GenFault ${new UnimpInstFault}"
-#}};
+microcode = '''
+def macroop LOOP_I {
+    rdip t1
+    subi rcx, rcx, 1, flags=(EZF,), dataSize=asz
+    wripi t1, imm, flags=(nCEZF,)
+};
+
+def macroop LOOPNE_I {
+    rdip t1
+    subi rcx, rcx, 1, flags=(EZF,), dataSize=asz
+    wripi t1, imm, flags=(CSTRnZnEZF,)
+};
+
+def macroop LOOPE_I {
+    rdip t1
+    subi rcx, rcx, 1, flags=(EZF,), dataSize=asz
+    wripi t1, imm, flags=(CSTRZnEZF,)
+};
+'''