fp.isa (2686:f0d591379ac3) | fp.isa (2687:9721a59675b8) |
---|---|
1// -*- mode:c++ -*- 2 3//////////////////////////////////////////////////////////////////// 4// 5// Floating Point operate instructions 6// 7 8output header {{ --- 81 unchanged lines hidden (view full) --- 90 return true; 91 } 92 } 93 return false; 94 } 95 96 template <class T> 97 bool | 1// -*- mode:c++ -*- 2 3//////////////////////////////////////////////////////////////////// 4// 5// Floating Point operate instructions 6// 7 8output header {{ --- 81 unchanged lines hidden (view full) --- 90 return true; 91 } 92 } 93 return false; 94 } 95 96 template <class T> 97 bool |
98 fpInvalidOp(FPOp *inst, %(CPU_exec_context)s *xc, const T dest_val, | 98 fpInvalidOp(FPOp *inst, %(CPU_exec_context)s *cpu, const T dest_val, |
99 Trace::InstRecord *traceData) 100 { 101 uint64_t mips_nan = 0; 102 T src_op = dest_val; 103 int size = sizeof(src_op) * 8; 104 105 if (isNan(&src_op, size)) { 106 switch (size) 107 { 108 case 32: mips_nan = MIPS32_QNAN; break; 109 case 64: mips_nan = MIPS64_QNAN; break; 110 default: panic("Unsupported Floating Point Size (%d)", size); 111 } 112 113 //Set value to QNAN | 99 Trace::InstRecord *traceData) 100 { 101 uint64_t mips_nan = 0; 102 T src_op = dest_val; 103 int size = sizeof(src_op) * 8; 104 105 if (isNan(&src_op, size)) { 106 switch (size) 107 { 108 case 32: mips_nan = MIPS32_QNAN; break; 109 case 64: mips_nan = MIPS64_QNAN; break; 110 default: panic("Unsupported Floating Point Size (%d)", size); 111 } 112 113 //Set value to QNAN |
114 xc->setFloatRegBits(inst, 0, mips_nan, size); | 114 cpu->setFloatRegBits(inst, 0, mips_nan, size); |
115 116 //Read FCSR from FloatRegFile | 115 116 //Read FCSR from FloatRegFile |
117 uint32_t fcsr_bits = xc->cpuXC->readFloatRegBits(FCSR); | 117 uint32_t fcsr_bits = cpu->tc->readFloatRegBits(FCSR); |
118 119 //Write FCSR from FloatRegFile | 118 119 //Write FCSR from FloatRegFile |
120 xc->cpuXC->setFloatRegBits(FCSR, genInvalidVector(fcsr_bits)); | 120 cpu->tc->setFloatRegBits(FCSR, genInvalidVector(fcsr_bits)); |
121 122 if (traceData) { traceData->setData(mips_nan); } 123 return true; 124 } 125 126 return false; 127 } 128 129 void | 121 122 if (traceData) { traceData->setData(mips_nan); } 123 return true; 124 } 125 126 return false; 127 } 128 129 void |
130 fpResetCauseBits(%(CPU_exec_context)s *xc) | 130 fpResetCauseBits(%(CPU_exec_context)s *cpu) |
131 { 132 //Read FCSR from FloatRegFile | 131 { 132 //Read FCSR from FloatRegFile |
133 uint32_t fcsr = xc->cpuXC->readFloatRegBits(FCSR); | 133 uint32_t fcsr = cpu->tc->readFloatRegBits(FCSR); |
134 135 fcsr = bits(fcsr, 31, 18) << 18 | bits(fcsr, 11, 0); 136 137 //Write FCSR from FloatRegFile | 134 135 fcsr = bits(fcsr, 31, 18) << 18 | bits(fcsr, 11, 0); 136 137 //Write FCSR from FloatRegFile |
138 xc->cpuXC->setFloatRegBits(FCSR, fcsr); | 138 cpu->tc->setFloatRegBits(FCSR, fcsr); |
139 } 140}}; 141 142def template FloatingPointExecute {{ 143 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const 144 { 145 Fault fault = NoFault; 146 --- 195 unchanged lines hidden --- | 139 } 140}}; 141 142def template FloatingPointExecute {{ 143 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const 144 { 145 Fault fault = NoFault; 146 --- 195 unchanged lines hidden --- |