diff -r 55fc02b51f9a -r f3e7cefe878d src/arch/x86/isa/includes.isa --- a/src/arch/x86/isa/includes.isa Tue Jun 11 10:46:48 2013 +0200 +++ b/src/arch/x86/isa/includes.isa Tue Jun 11 10:50:30 2013 +0200 @@ -64,6 +64,7 @@ #include "arch/x86/isa_traits.hh" #include "arch/x86/registers.hh" #include "arch/x86/types.hh" +#include "arch/x86/utility.hh" #include "base/misc.hh" #include "cpu/static_inst.hh" #include "mem/packet.hh" diff -r 55fc02b51f9a -r f3e7cefe878d 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 Tue Jun 11 10:46:48 2013 +0200 +++ b/src/arch/x86/isa/insts/x87/load_constants/load_0_1_or_pi.py Tue Jun 11 10:50:30 2013 +0200 @@ -40,17 +40,17 @@ microcode = ''' def macroop FLDZ { - limm ufp1, "double(0)" + lfpimm ufp1, 0.0 movfp st(-1), ufp1, spm=-1 }; def macroop FLD1 { - limm ufp1, "double(1)" + lfpimm ufp1, 1.0 movfp st(-1), ufp1, spm=-1 }; def macroop FLDPI { - limm ufp1, "double(3.14159265359)" + lfpimm ufp1, 3.14159265359 movfp st(-1), ufp1, spm=-1 }; diff -r 55fc02b51f9a -r f3e7cefe878d src/arch/x86/isa/insts/x87/load_constants/load_logarithm.py --- a/src/arch/x86/isa/insts/x87/load_constants/load_logarithm.py Tue Jun 11 10:46:48 2013 +0200 +++ b/src/arch/x86/isa/insts/x87/load_constants/load_logarithm.py Tue Jun 11 10:50:30 2013 +0200 @@ -40,22 +40,22 @@ microcode = ''' def macroop FLDL2E { - limm ufp1, "double(1.44269504089)" + lfpimm ufp1, 1.44269504089 movfp st(-1), ufp1, spm=-1 }; def macroop FLDL2T { - limm ufp1, "double(3.32192809489)" + lfpimm ufp1, 3.32192809489 movfp st(-1), ufp1, spm=-1 }; def macroop FLDLG2 { - limm ufp1, "double(0.30102999566)" + lfpimm ufp1, 0.30102999566 movfp st(-1), ufp1, spm=-1 }; def macroop FLDLN2 { - limm ufp1, "double(0.69314718056)" + lfpimm ufp1, 0.69314718056 movfp st(-1), ufp1, spm=-1 }; diff -r 55fc02b51f9a -r f3e7cefe878d src/arch/x86/isa/microops/limmop.isa --- a/src/arch/x86/isa/microops/limmop.isa Tue Jun 11 10:46:48 2013 +0200 +++ b/src/arch/x86/isa/microops/limmop.isa Tue Jun 11 10:50:30 2013 +0200 @@ -140,8 +140,8 @@ self.dest = dest if isinstance(imm, (int, long)): imm = "ULL(%d)" % imm - if isinstance(imm, float): - imm = "reinterpret_cast((double)(%d))" + elif isinstance(imm, float): + imm = "getDoubleBits(%.16f)" % imm self.imm = imm self.dataSize = dataSize diff -r 55fc02b51f9a -r f3e7cefe878d src/arch/x86/utility.hh --- a/src/arch/x86/utility.hh Tue Jun 11 10:46:48 2013 +0200 +++ b/src/arch/x86/utility.hh Tue Jun 11 10:50:30 2013 +0200 @@ -140,6 +140,13 @@ /** Convert an x87 xtag word to normal tags format. */ uint16_t convX87XTagsToTags(uint8_t ftwx); + + /** + * Extract the bit string representing a double value. + */ + inline uint64_t getDoubleBits(double val) { + return *(uint64_t *)(&val); + } } #endif // __ARCH_X86_UTILITY_HH__