X86: Implement the fld, fst, and fstp instructions.
authorGabe Black <gblack@eecs.umich.edu>
Thu, 20 Sep 2007 01:28:34 +0000 (18:28 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Thu, 20 Sep 2007 01:28:34 +0000 (18:28 -0700)
--HG--
extra : convert_revision : 7dd274bdc3c34839c17d9012a745d7c95dfcfdd8

src/arch/x86/isa/decoder/x87.isa
src/arch/x86/isa/insts/x87/data_transfer_and_conversion/load_or_store_floating_point.py

index bab687acdca827866109f2085d860d1aedfa05fd..667a8a66ebc03f49cf0d2a8e7d21315744fc2370 100644 (file)
     0x5: decode MODRM_REG {
         0x0: decode MODRM_MOD {
             0x3: ffree();
-            default: fld();
+            default: Inst::FLD(Mq);
         }
         0x1: decode MODRM_MOD {
             0x3: Inst::UD2();
             default: fisttp();
         }
-        0x2: fst();
-        0x3: fstp();
+        0x2: Inst::FST(Mq);
+        0x3: Inst::FSTP(Mq);
         0x4: decode MODRM_MOD {
             0x3: fucom();
             default: frstor();
index 3507347fe8922d5a608b2de9f485a1767de84cc0..37574da34e4e457dda9b38540b565bec5df0b6b5 100644 (file)
 # Authors: Gabe Black
 
 microcode = '''
-# FLD
-# FST
-# FSTP
+def macroop FLD_M {
+    ldfp ufp1, seg, sib, disp
+    movfp st(1), ufp1, spm=-1
+};
+
+def macroop FLD_P {
+    rdip t7
+    ldfp ufp1, seg, riprel, disp
+    movfp st(1), ufp1, spm=-1
+};
+
+def macroop FST_M {
+    movfp st(0), ufp1
+    stfp ufp1, seg, sib, disp
+};
+
+def macroop FST_P {
+    movfp st(0), ufp1
+    rdip t7
+    stfp ufp1, seg, riprel, disp
+};
+
+def macroop FSTP_M {
+    movfp st(0), ufp1, spm=1
+    stfp ufp1, seg, sib, disp
+};
+
+def macroop FSTP_P {
+    movfp st(0), ufp1, spm=1
+    rdip t7
+    stfp ufp1, seg, riprel, disp
+};
 '''