X86: Use the new forced folding mechanism for the SAHF and LAHF instructions.
authorGabe Black <gblack@eecs.umich.edu>
Wed, 5 Aug 2009 10:04:17 +0000 (03:04 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Wed, 5 Aug 2009 10:04:17 +0000 (03:04 -0700)
src/arch/x86/isa/decoder/one_byte_opcodes.isa
src/arch/x86/isa/insts/general_purpose/flags/load_and_store.py

index 84d18441d09929f6bc4d8dc424f11340a9f37b6f..f365ed4b063618f842376b6ed2485afb22686395 100644 (file)
             //The 64 bit versions of both of these should be illegal only
             //if CPUID says it isn't supported. For now, we'll just assume
             //that it's supported.
-            0x6: decode MODE_SUBMODE {
-                0x0: SAHF_64();
-                default: SAHF();
-            }
-            0x7: decode MODE_SUBMODE {
-                0x0: LAHF_64();
-                default: LAHF();
-            }
+            0x6: SAHF();
+            0x7: LAHF();
         }
         0x14: decode OPCODE_OP_BOTTOM3 {
             0x0: MOV(rAb, Ob);
index 0915bf81940fb998c8c4cf80cb965c0e6461989a..01908ca7b4df16c9568704114b95580f37031a44 100644 (file)
 
 microcode = '''
 def macroop SAHF {
-    # This will fold to ah since this never executes in 64 bit mode.
-    ruflags rsp, dataSize=1
-};
-
-# This is allows the instruction to write to ah in 64 bit mode.
-def macroop SAHF_64 {
-    ruflags t1
-    slli t1, t1, 8
-    mov t1, t1, rax, dataSize=1
-    mov rax, rax, t1, dataSize=2
+    ruflags ah, dataSize=1
 };
 
 def macroop LAHF {
-    # This will fold to ah since this never executes in 64 bit mode.
-    wruflags rsp, t0, dataSize=1
-};
-
-# This is allows the instruction to read from ah in 64 bit mode.
-def macroop LAHF_64 {
-    srli t1, rax, 8, dataSize=2
-    wruflags t1, t0, dataSize=1
+    wruflags ah, t0, dataSize=1
 };
 '''