summaryrefslogtreecommitdiff
path: root/arch/mips/isa_traits.cc
diff options
context:
space:
mode:
authorKorey Sewell <ksewell@umich.edu>2006-05-07 13:26:15 -0400
committerKorey Sewell <ksewell@umich.edu>2006-05-07 13:26:15 -0400
commita7565418d297043bf28fa8d9e1efaabb5c4faf07 (patch)
treef5a7df1cbbf9ef423deb786e7240c2a03a7fa4aa /arch/mips/isa_traits.cc
parent34a5732bd3c6a146a62757a50d59b7960c41fc5f (diff)
downloadgem5-a7565418d297043bf28fa8d9e1efaabb5c4faf07.tar.xz
Basic MIPS floating point test works now ... I had to realize that when using the double FP reg the
register with the higher # contains the most significant bytes... arch/mips/isa/decoder.isa: divide instruction fixes arch/mips/isa_traits.cc: use double as argument to cvt & round function. clean up cout statements in function. arch/mips/isa_traits.hh: In MIPS the higher # reg of a doubles pair is ALSO the most significant reg. Once I switched this the basic MIPS FP test I had worked. --HG-- extra : convert_revision : 45c80df229e6174d0b52fc7cfb530642b1f1fc35
Diffstat (limited to 'arch/mips/isa_traits.cc')
-rw-r--r--arch/mips/isa_traits.cc18
1 files changed, 4 insertions, 14 deletions
diff --git a/arch/mips/isa_traits.cc b/arch/mips/isa_traits.cc
index 20c13fd36..282bb4a41 100644
--- a/arch/mips/isa_traits.cc
+++ b/arch/mips/isa_traits.cc
@@ -95,29 +95,19 @@ MipsISA::convert_and_round(uint64_t fp_val, ConvertType cvt_type, int rnd_mode)
uint64_t
-MipsISA::convert_and_round(float fp_val, ConvertType cvt_type, int rnd_mode)
+MipsISA::convert_and_round(double fp_val, ConvertType cvt_type, int rnd_mode)
{
- void * ptr = &fp_val;
- uint32_t fp_bits = * (uint32_t *) ptr;
-
- cout << "Converting " << fp_val << " (" << hex << fp_bits << ") " << endl;
-
- uint64_t ret_val = 0;
-
switch (cvt_type)
{
case SINGLE_TO_DOUBLE:
double double_val = fp_val;
- void *double_ptr = &double_val;
- uint64_t dp_bits = *(uint64_t *) double_ptr ;
- cout << "To " << double_val << " (" << hex << dp_bits << ") " << endl;
- double_ptr = &dp_bits;
- cout << "Testing: " << *(double *) double_ptr << endl;
+ void *double_ptr = &double_val;
+ uint64_t dp_bits = *(uint64_t *) double_ptr ;
return dp_bits;
default:
panic("Invalid Floating Point Conversion Type (%d) being used.\n",cvt_type);
- return ret_val;
+ return 0;
}
}