ARM: Get rid of some of the old FP implementation.
authorGabe Black <gblack@eecs.umich.edu>
Wed, 2 Jun 2010 17:58:16 +0000 (12:58 -0500)
committerGabe Black <gblack@eecs.umich.edu>
Wed, 2 Jun 2010 17:58:16 +0000 (12:58 -0500)
src/arch/arm/isa/decoder/arm.isa
src/arch/arm/isa/formats/fp.isa

index 1e0d61b3f6d0de932deee1b95ac8634df08fea76..49f70e5e412f3e2ece39c92bb5615ebd7fc81638 100644 (file)
@@ -148,32 +148,6 @@ format DataOp {
                 0xa, 0xb: VfpData::vfpData();
             } // CPNUM
             1: decode CPNUM { // 27-24=1110,4 ==1
-                1: decode OPCODE_15_12 {
-                    format FloatOp {
-                        0xf: decode OPCODE_23_21 {
-                            format FloatCmp {
-                                0x4: cmf({{ Fn.df }}, {{ Fm.df }});
-                                0x5: cnf({{ Fn.df }}, {{ -Fm.df }});
-                                0x6: cmfe({{ Fn.df }}, {{ Fm.df}});
-                                0x7: cnfe({{ Fn.df }}, {{ -Fm.df}});
-                            }
-                        }
-                        default: decode OPCODE_23_20 {
-                            0x0: decode OPCODE_7 {
-                                0: flts({{ Fn.sf = (float) Rd.sw; }});
-                                1: fltd({{ Fn.df = (double) Rd.sw; }});
-                            }
-                            0x1: decode OPCODE_7 {
-                                0: fixs({{ Rd = (uint32_t) Fm.sf; }});
-                                1: fixd({{ Rd = (uint32_t) Fm.df; }});
-                            }
-                            0x2: wfs({{ Fpsr = Rd; }});
-                            0x3: rfs({{ Rd = Fpsr; }});
-                            0x4: FailUnimpl::wfc();
-                            0x5: FailUnimpl::rfc();
-                        }
-                    } // format FloatOp
-                }
                 0xa, 0xb: ShortFpTransfer::shortFpTransfer();
                 0xf: McrMrc15::mcrMrc15();
             } // CPNUM  (OP4 == 1)
index 03e574648ba040fdad804f2731e0014e4fde0a8b..55668e5f6e2f262b13ff0d9344aacc4b2683afe3 100644 (file)
 // Floating Point operate instructions
 //
 
-def template FPAExecute {{
-        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
-        {
-                Fault fault = NoFault;
-
-                %(fp_enable_check)s;
-
-                %(op_decl)s;
-                %(op_rd)s;
-
-                if (%(predicate_test)s) {
-                    %(code)s;
-                    if (fault == NoFault) {
-                        %(op_wb)s;
-                    }
-                }
-
-                return fault;
-        }
-}};
-
-def template FloatDoubleDecode {{
-    {
-        ArmStaticInst *i = NULL;
-        switch (OPCODE_19 << 1 | OPCODE_7)
-        {
-            case 0:
-                i = (ArmStaticInst *)new %(class_name)sS(machInst);
-                break;
-            case 1:
-                i = (ArmStaticInst *)new %(class_name)sD(machInst);
-                break;
-            case 2:
-            case 3:
-            default:
-                panic("Cannot decode float/double nature of the instruction");
-        }
-        return i;
-    }
-}};
-
-// Primary format for float point operate instructions:
-def format FloatOp(code, *flags) {{
-        orig_code = code
-
-        cblk = code
-        iop = InstObjParams(name, Name, 'PredOp',
-                            {"code": cblk,
-                             "predicate_test": predicateTest},
-                            flags)
-        header_output = BasicDeclare.subst(iop)
-        decoder_output = BasicConstructor.subst(iop)
-        exec_output = FPAExecute.subst(iop)
-
-        sng_cblk = code
-        sng_iop = InstObjParams(name, Name+'S', 'PredOp',
-                                {"code": sng_cblk,
-                                 "predicate_test": predicateTest},
-                                flags)
-        header_output += BasicDeclare.subst(sng_iop)
-        decoder_output += BasicConstructor.subst(sng_iop)
-        exec_output += FPAExecute.subst(sng_iop)
-
-        dbl_code = re.sub(r'\.sf', '.df', orig_code)
-
-        dbl_cblk = dbl_code
-        dbl_iop = InstObjParams(name, Name+'D', 'PredOp',
-                                {"code": dbl_cblk,
-                                 "predicate_test": predicateTest},
-                                flags)
-        header_output += BasicDeclare.subst(dbl_iop)
-        decoder_output += BasicConstructor.subst(dbl_iop)
-        exec_output += FPAExecute.subst(dbl_iop)
-
-        decode_block = FloatDoubleDecode.subst(iop)
-}};
-
-let {{
-        calcFPCcCode = '''
-        uint16_t _in, _iz, _ic, _iv;
-
-        _in = %(fReg1)s < %(fReg2)s;
-        _iz = %(fReg1)s == %(fReg2)s;
-        _ic = %(fReg1)s >= %(fReg2)s;
-        _iv = (isnan(%(fReg1)s) || isnan(%(fReg2)s)) & 1;
-
-        CondCodes = _in << 31 | _iz << 30 | _ic << 29 | _iv << 28 |
-            (CondCodes & 0x0FFFFFFF);
-        '''
-}};
-
-def format FloatCmp(fReg1, fReg2, *flags) {{
-        code = calcFPCcCode % vars()
-        iop = InstObjParams(name, Name, 'PredOp',
-                            {"code": code,
-                             "predicate_test": predicateTest},
-                             flags)
-        header_output = BasicDeclare.subst(iop)
-        decoder_output = BasicConstructor.subst(iop)
-        decode_block = BasicDecode.subst(iop)
-        exec_output = FPAExecute.subst(iop)
-}};
-
 let {{
     header_output = '''
     StaticInstPtr