X86: Implement the XLAT instruction.
authorGabe Black <gblack@eecs.umich.edu>
Fri, 19 Oct 2007 05:41:18 +0000 (22:41 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Fri, 19 Oct 2007 05:41:18 +0000 (22:41 -0700)
--HG--
extra : convert_revision : 22d7d9e79e722293b4dc1e66d8610301dc04c5fa

src/arch/x86/isa/decoder/one_byte_opcodes.isa
src/arch/x86/isa/insts/general_purpose/data_conversion/translate.py

index 23ba243fbd426f334d11d066d7f1ad23715ada67..483e750b26e6683b7ad6f88a6f0d31ed7d38837f 100644 (file)
                 0x0: UD2();
                 default: WarnUnimpl::salc();
             }
-            0x7: WarnUnimpl::xlat();
+            0x7: XLAT();
         }
         ##include "x87.isa"
         0x1C: decode OPCODE_OP_BOTTOM3 {
index bb286b976a40f5978067ee4d2757afb886fc9d54..c2ccb9d19716dc16b1c20009dc95f2047a3773a9 100644 (file)
 #
 # Authors: Gabe Black
 
-microcode = ""
-#let {{
-#    class XLAT(Inst):
-#      "GenFault ${new UnimpInstFault}"
-#}};
+microcode = '''
+def macroop XLAT {
+    zext t1, rax, 8
+    # Here, t1 can be used directly. The value of al is supposed to be treated
+    # as unsigned. Since we zero extended it from 8 bits above and the address
+    # size has to be at least 16 bits, t1 will not be sign extended.
+    ld rax, seg, [1, rbx, t1], dataSize=1
+};
+'''