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