changeset 0632d2d1575c in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=0632d2d1575c
description:
        x86: implement some of the x87 instructions
        This patch implements ftan, fprem, fyl2x, fld* floating-point 
instructions.

diffstat:

 src/arch/x86/isa/decoder/x87.isa                                               
         |  35 ++++++---
 src/arch/x86/isa/insts/x87/arithmetic/partial_remainder.py                     
         |   9 ++-
 src/arch/x86/isa/insts/x87/control/save_and_restore_x87_control_word.py        
         |  12 +++-
 
src/arch/x86/isa/insts/x87/data_transfer_and_conversion/load_or_store_floating_point.py
 |   4 +
 src/arch/x86/isa/insts/x87/load_constants/load_0_1_or_pi.py                    
         |  21 +++++-
 src/arch/x86/isa/insts/x87/load_constants/load_logarithm.py                    
         |  27 ++++++-
 src/arch/x86/isa/insts/x87/transcendental_functions/logarithmic_functions.py   
         |   6 +-
 src/arch/x86/isa/insts/x87/transcendental_functions/trigonometric_functions.py 
         |   9 ++-
 src/arch/x86/isa/microops/fpop.isa                                             
         |  16 ++++
 src/arch/x86/isa/operands.isa                                                  
         |   1 +
 10 files changed, 115 insertions(+), 25 deletions(-)

diffs (truncated from 329 to 300 lines):

diff -r e507dc092ca3 -r 0632d2d1575c src/arch/x86/isa/decoder/x87.isa
--- a/src/arch/x86/isa/decoder/x87.isa  Thu Mar 07 05:55:03 2013 -0500
+++ b/src/arch/x86/isa/decoder/x87.isa  Mon Mar 11 13:15:46 2013 -0500
@@ -1,4 +1,5 @@
 // Copyright (c) 2007 The Hewlett-Packard Development Company
+// Copyright (c) 2012-13 Mark D. Hill and David A. Wood
 // All rights reserved.
 //
 // The license below extends only to copyright in the software and shall
@@ -34,11 +35,13 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //
 // Authors: Gabe Black
+//          Nilay Vaish
 
 format WarnUnimpl {
     0x1B: decode OPCODE_OP_BOTTOM3 {
         //0x0: esc0();
         0x0: decode MODRM_REG {
+            // ST(0) = ST(0) + 32-bit Mem
             0x0: fadd();
             0x1: fmul();
             0x2: fcom();
@@ -50,7 +53,11 @@
         }
         //0x1: esc1();
         0x1: decode MODRM_REG {
-            0x0: fld();
+            0x0: decode MODRM_MOD {
+                0x3: Inst::FLD(Eq);
+                // 32-bit load
+                default: Inst::FLD(Md);
+            }
             0x1: decode MODRM_MOD {
                 0x3: fxch();
                 default: Inst::UD2();
@@ -78,24 +85,24 @@
             }
             0x5: decode MODRM_MOD {
                 0x3: decode MODRM_RM {
-                    0x0: fld1();
-                    0x1: fldl2t();
-                    0x2: fldl2e();
-                    0x3: fldpi();
-                    0x4: fldlg2();
-                    0x5: fldln2();
-                    0x6: fldz();
+                    0x0: Inst::FLD1();
+                    0x1: Inst::FLDL2T();
+                    0x2: Inst::FLDL2E();
+                    0x3: Inst::FLDPI();
+                    0x4: Inst::FLDLG2();
+                    0x5: Inst::FLDLN2();
+                    0x6: Inst::FLDZ();
                 }
-                default: fldcw_Mw();
+                default: Inst::FLDCW(Mw);
             }
             0x6: decode MODRM_MOD {
                 0x3: decode MODRM_RM {
                     0x0: f2xm1();
-                    0x1: fyl2x();
-                    0x2: fptan();
+                    0x1: Inst::FYL2X();
+                    0x2: Inst::FPTAN();
                     0x3: fpatan();
                     0x4: fxtract();
-                    0x5: fprem1();
+                    0x5: Inst::FPREM1();
                     0x6: fdecstp();
                     0x7: fincstp();
                 }
@@ -103,7 +110,7 @@
             }
             0x7: decode MODRM_MOD {
                 0x3: decode MODRM_RM {
-                    0x0: fprem();
+                    0x0: Inst::FPREM();
                     0x1: fyl2xp1();
                     0x2: fsqrt();
                     0x3: Inst::FSINCOS();
@@ -181,6 +188,7 @@
             }
             0x5: decode MODRM_MOD {
                 0x3: fucomi();
+                // 80-bit load
                 default: fld();
             }
             0x6: decode MODRM_MOD {
@@ -225,6 +233,7 @@
         0x5: decode MODRM_REG {
             0x0: decode MODRM_MOD {
                 0x3: ffree();
+                // 64-bit load
                 default: Inst::FLD(Mq);
             }
             0x1: decode MODRM_MOD {
diff -r e507dc092ca3 -r 0632d2d1575c 
src/arch/x86/isa/insts/x87/arithmetic/partial_remainder.py
--- a/src/arch/x86/isa/insts/x87/arithmetic/partial_remainder.py        Thu Mar 
07 05:55:03 2013 -0500
+++ b/src/arch/x86/isa/insts/x87/arithmetic/partial_remainder.py        Mon Mar 
11 13:15:46 2013 -0500
@@ -36,6 +36,11 @@
 # Authors: Gabe Black
 
 microcode = '''
-# FPREM
-# FPREM1
+def macroop FPREM {
+    premfp st(0), st(1), st(0)
+};
+
+def macroop FPREM1 {
+    premfp st(0), st(1), st(0)
+};
 '''
diff -r e507dc092ca3 -r 0632d2d1575c 
src/arch/x86/isa/insts/x87/control/save_and_restore_x87_control_word.py
--- a/src/arch/x86/isa/insts/x87/control/save_and_restore_x87_control_word.py   
Thu Mar 07 05:55:03 2013 -0500
+++ b/src/arch/x86/isa/insts/x87/control/save_and_restore_x87_control_word.py   
Mon Mar 11 13:15:46 2013 -0500
@@ -36,7 +36,17 @@
 # Authors: Gabe Black
 
 microcode = '''
-# FLDCW
+
+def macroop FLDCW_M {
+    ld t1, seg, sib, disp, dataSize=2
+    wrval fcw, t1
+};
+
+def macroop FLDCW_P {
+    ld t1, seg, sib, disp, dataSize=2
+    wrval fcw, t1
+};
+
 # FSTCW
 
 def macroop FNSTCW_M {
diff -r e507dc092ca3 -r 0632d2d1575c 
src/arch/x86/isa/insts/x87/data_transfer_and_conversion/load_or_store_floating_point.py
--- 
a/src/arch/x86/isa/insts/x87/data_transfer_and_conversion/load_or_store_floating_point.py
   Thu Mar 07 05:55:03 2013 -0500
+++ 
b/src/arch/x86/isa/insts/x87/data_transfer_and_conversion/load_or_store_floating_point.py
   Mon Mar 11 13:15:46 2013 -0500
@@ -47,6 +47,10 @@
     movfp st(-1), ufp1, spm=-1
 };
 
+def macroop FLD_R {
+    movfp st(-1), sti, spm=-1
+};
+
 def macroop FST_R {
     movfp sti, st(0)
 };
diff -r e507dc092ca3 -r 0632d2d1575c 
src/arch/x86/isa/insts/x87/load_constants/load_0_1_or_pi.py
--- a/src/arch/x86/isa/insts/x87/load_constants/load_0_1_or_pi.py       Thu Mar 
07 05:55:03 2013 -0500
+++ b/src/arch/x86/isa/insts/x87/load_constants/load_0_1_or_pi.py       Mon Mar 
11 13:15:46 2013 -0500
@@ -1,4 +1,5 @@
 # Copyright (c) 2007 The Hewlett-Packard Development Company
+# Copyright (c) 2013 Mark D. Hill and David A. Wood
 # All rights reserved.
 #
 # The license below extends only to copyright in the software and shall
@@ -34,9 +35,23 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 # Authors: Gabe Black
+#          Nilay Vaish
 
 microcode = '''
-# FLDZ
-# FLD1
-# FLDPI
+
+def macroop FLDZ {
+    limm ufp1, "double(0)"
+    movfp st(-1), ufp1, spm=-1
+};
+
+def macroop FLD1 {
+    limm ufp1, "double(1)"
+    movfp st(-1), ufp1, spm=-1
+};
+
+def macroop FLDPI {
+    limm ufp1, "double(3.14159265359)"
+    movfp st(-1), ufp1, spm=-1
+};
+
 '''
diff -r e507dc092ca3 -r 0632d2d1575c 
src/arch/x86/isa/insts/x87/load_constants/load_logarithm.py
--- a/src/arch/x86/isa/insts/x87/load_constants/load_logarithm.py       Thu Mar 
07 05:55:03 2013 -0500
+++ b/src/arch/x86/isa/insts/x87/load_constants/load_logarithm.py       Mon Mar 
11 13:15:46 2013 -0500
@@ -1,4 +1,5 @@
 # Copyright (c) 2007 The Hewlett-Packard Development Company
+# Copyright (c) 2013 Mark D. Hill and David A. Wood
 # All rights reserved.
 #
 # The license below extends only to copyright in the software and shall
@@ -34,10 +35,28 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 # Authors: Gabe Black
+#          Nilay Vaish
 
 microcode = '''
-# FLDL2E
-# FLDL2T
-# FLDLG2
-# FLDLN2
+
+def macroop FLDL2E {
+    limm ufp1, "double(1.44269504089)"
+    movfp st(-1), ufp1, spm=-1
+};
+
+def macroop FLDL2T {
+    limm ufp1, "double(3.32192809489)"
+    movfp st(-1), ufp1, spm=-1
+};
+
+def macroop FLDLG2 {
+    limm ufp1, "double(0.30102999566)"
+    movfp st(-1), ufp1, spm=-1
+};
+
+def macroop FLDLN2 {
+    limm ufp1, "double(0.69314718056)"
+    movfp st(-1), ufp1, spm=-1
+};
+
 '''
diff -r e507dc092ca3 -r 0632d2d1575c 
src/arch/x86/isa/insts/x87/transcendental_functions/logarithmic_functions.py
--- 
a/src/arch/x86/isa/insts/x87/transcendental_functions/logarithmic_functions.py  
    Thu Mar 07 05:55:03 2013 -0500
+++ 
b/src/arch/x86/isa/insts/x87/transcendental_functions/logarithmic_functions.py  
    Mon Mar 11 13:15:46 2013 -0500
@@ -38,6 +38,10 @@
 microcode = '''
 # F2XM1
 # FSCALE
-# FYL2X
+
+def macroop FYL2X {
+    yl2xfp st(1), st(0), st(1), spm=1
+};
+
 # FYL2XP1
 '''
diff -r e507dc092ca3 -r 0632d2d1575c 
src/arch/x86/isa/insts/x87/transcendental_functions/trigonometric_functions.py
--- 
a/src/arch/x86/isa/insts/x87/transcendental_functions/trigonometric_functions.py
    Thu Mar 07 05:55:03 2013 -0500
+++ 
b/src/arch/x86/isa/insts/x87/transcendental_functions/trigonometric_functions.py
    Mon Mar 11 13:15:46 2013 -0500
@@ -1,4 +1,5 @@
 # Copyright (c) 2007 The Hewlett-Packard Development Company
+# Copyright (c) 2012-13 Mark D. Hill and David A. Wood
 # All rights reserved.
 #
 # The license below extends only to copyright in the software and shall
@@ -34,6 +35,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 # Authors: Gabe Black
+#          Nilay Vaish
 
 microcode = '''
 def macroop FSIN {
@@ -51,6 +53,11 @@
     movfp st(-1), ufp2, spm=-1
 };
 
-# FPTAN
+def macroop FPTAN {
+    tanfp st(0), st(0)
+    limm ufp1, "double(1)"
+    movfp st(-1), ufp1, spm=-1
+};
+
 # FPATAN
 '''
diff -r e507dc092ca3 -r 0632d2d1575c src/arch/x86/isa/microops/fpop.isa
--- a/src/arch/x86/isa/microops/fpop.isa        Thu Mar 07 05:55:03 2013 -0500
+++ b/src/arch/x86/isa/microops/fpop.isa        Mon Mar 11 13:15:46 2013 -0500
@@ -1,4 +1,5 @@
 // Copyright (c) 2007 The Hewlett-Packard Development Company
+// Copyright (c) 2012-2013 Mark D. Hill and David A. Wood
 // All rights reserved.
 //
 // The license below extends only to copyright in the software and shall
@@ -34,6 +35,7 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //
 // Authors: Gabe Black
+//          Nilay Vaish
 
 //////////////////////////////////////////////////////////////////////////
 //
@@ -258,6 +260,9 @@
     class Sinfp(FpUnaryOp):
         code = 'FpDestReg = sin(FpSrcReg1);'
 
+    class Tanfp(FpUnaryOp):
+        code = 'FpDestReg = tan(FpSrcReg1);'
+
 
     # Conversion microops
     class ConvOp(FpBinaryOp):
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to