x86: Fix loading of floating point constants
authorAndreas Sandberg <andreas@sandberg.pp.se>
Tue, 18 Jun 2013 14:30:06 +0000 (16:30 +0200)
committerAndreas Sandberg <andreas@sandberg.pp.se>
Tue, 18 Jun 2013 14:30:06 +0000 (16:30 +0200)
commita8e8c4f433fb3cce354950ba72136b84abb78015
treec1b93c2399e0474da011b9aaaa324d4bd14b919e
parentc9c02efb99c0a982c116c7d1d8ed9a984c174198
x86: Fix loading of floating point constants

This changeset actually fixes two issues:

 * The lfpimm instruction didn't work correctly when applied to a
   floating point constant (it did work for integers containing the
   bit string representation of a constant) since it used
   reinterpret_cast to convert a double to a uint64_t. This caused a
   compilation error, at least, in gcc 4.6.3.

 * The instructions loading floating point constants in the x87
   processor didn't work correctly since they just stored a truncated
   integer instead of a double in the floating point register. This
   changeset fixes the old microcode by using lfpimm instruction
   instead of the limm instructions.
src/arch/x86/isa/includes.isa
src/arch/x86/isa/insts/x87/load_constants/load_0_1_or_pi.py
src/arch/x86/isa/insts/x87/load_constants/load_logarithm.py
src/arch/x86/isa/microops/limmop.isa
src/arch/x86/utility.hh