ARM: Eliminate the old style branch instructions.
authorGabe Black <gblack@eecs.umich.edu>
Wed, 2 Jun 2010 17:58:03 +0000 (12:58 -0500)
committerGabe Black <gblack@eecs.umich.edu>
Wed, 2 Jun 2010 17:58:03 +0000 (12:58 -0500)
src/arch/arm/insts/branch.cc
src/arch/arm/insts/branch.hh
src/arch/arm/isa/formats/branch.isa

index 5e08b069d8b979b871a918be32c3747d5b26d551..87a89cc4fddf5a88a4d681de418563dfa53ca8ad 100644 (file)
 
 namespace ArmISA
 {
-Addr
-Branch::branchTarget(Addr branchPC) const
-{
-    return branchPC + 8 + disp;
-}
-
-const std::string &
-PCDependentDisassembly::disassemble(Addr pc,
-                                    const SymbolTable *symtab) const
-{
-    if (!cachedDisassembly ||
-        pc != cachedPC || symtab != cachedSymtab)
-    {
-        if (cachedDisassembly)
-            delete cachedDisassembly;
-
-        cachedDisassembly =
-            new std::string(generateDisassembly(pc, symtab));
-        cachedPC = pc;
-        cachedSymtab = symtab;
-    }
-
-    return *cachedDisassembly;
-}
-
-std::string
-Branch::generateDisassembly(Addr pc, const SymbolTable *symtab) const
-{
-    std::stringstream ss;
-
-    printMnemonic(ss);
-    ss << "\t";
-
-    Addr target = pc + 8 + disp;
-    ccprintf(ss, "%#x", target);
-    printMemSymbol(ss, symtab, " <", target, ">");
-
-    return ss.str();
-}
-
-std::string
-BranchExchange::generateDisassembly(Addr pc, const SymbolTable *symtab) const
-{
-    std::stringstream ss;
-    printMnemonic(ss);
-    if (_numSrcRegs > 0) {
-        printReg(ss, _srcRegIdx[0]);
-    }
-    return ss.str();
-}
 }
index 185d34bab44bd997b8be9bc21f5a7c9cb96692dc..fbdd10d68b233ed242d51339f25a9b578ff05887 100644 (file)
 
 namespace ArmISA
 {
-/**
- * Base class for instructions whose disassembly is not purely a
- * function of the machine instruction (i.e., it depends on the
- * PC).  This class overrides the disassemble() method to check
- * the PC and symbol table values before re-using a cached
- * disassembly string.  This is necessary for branches and jumps,
- * where the disassembly string includes the target address (which
- * may depend on the PC and/or symbol table).
- */
-class PCDependentDisassembly : public PredOp
-{
-  protected:
-    /// Cached program counter from last disassembly
-    mutable Addr cachedPC;
-
-    /// Cached symbol table pointer from last disassembly
-    mutable const SymbolTable *cachedSymtab;
-
-    /// Constructor
-    PCDependentDisassembly(const char *mnem, ExtMachInst _machInst,
-                           OpClass __opClass)
-        : PredOp(mnem, _machInst, __opClass),
-          cachedPC(0), cachedSymtab(0)
-    {
-    }
-
-    const std::string &
-    disassemble(Addr pc, const SymbolTable *symtab) const;
-};
-
 // Branch to a target computed with an immediate
 class BranchImm : public PredOp
 {
@@ -160,50 +130,6 @@ class BranchImmReg : public PredOp
     {}
 };
 
-/**
- * Base class for branches (PC-relative control transfers),
- * conditional or unconditional.
- */
-class Branch : public PCDependentDisassembly
-{
-  protected:
-    /// target address (signed) Displacement .
-    int32_t disp;
-
-    /// Constructor.
-    Branch(const char *mnem, ExtMachInst _machInst, OpClass __opClass)
-        : PCDependentDisassembly(mnem, _machInst, __opClass),
-          disp(machInst.offset << 2)
-    {
-        //If Bit 26 is 1 then Sign Extend
-        if ( (disp & 0x02000000) > 0  ) {
-            disp |=  0xFC000000;
-        }
-    }
-
-    Addr branchTarget(Addr branchPC) const;
-
-    std::string
-    generateDisassembly(Addr pc, const SymbolTable *symtab) const;
-};
-
-/**
- * Base class for branch and exchange instructions on the ARM
- */
-class BranchExchange : public PredOp
-{
-  protected:
-    /// Constructor
-    BranchExchange(const char *mnem, ExtMachInst _machInst,
-                           OpClass __opClass)
-        : PredOp(mnem, _machInst, __opClass)
-    {
-    }
-
-    std::string
-    generateDisassembly(Addr pc, const SymbolTable *symtab) const;
-};
-
 }
 
 #endif //__ARCH_ARM_INSTS_BRANCH_HH__
index 62a6e40c246124bfbde7251a3ecab5d6fd645965..63bb11227fd75369b2bcc1dfd68910ed04926266 100644 (file)
@@ -84,79 +84,3 @@ def format ArmBlxReg() {{
                           (ConditionCode)(uint32_t)machInst.condCode);
     '''
 }};
-
-def format Branch(code,*opt_flags) {{
-
-    #Build Instruction Flags
-    #Use Link & Likely Flags to Add Link/Condition Code
-    inst_flags = ('IsDirectControl', )
-    linking = False
-    for x in opt_flags:
-        if x == 'Link':
-            linking = True
-            code += 'LR = NPC;\n'
-        else:
-            inst_flags += (x, )
-
-    #Take into account uncond. branch instruction
-    if 'cond == 1' in code:
-         inst_flags += ('IsUnCondControl', )
-    else:
-         inst_flags += ('IsCondControl', )
-
-    icode =  'if (testPredicate(CondCodes, condCode)) {\n'
-    icode += code
-    icode += '  NPC = NPC + 4 + disp;\n'
-    icode += '} else {\n'
-    icode += '  NPC = NPC;\n'
-    if linking:
-        icode += '  LR = LR;\n'
-    icode += '};\n'
-
-    code = icode
-
-    iop = InstObjParams(name, Name, 'Branch', code, inst_flags)
-    header_output = BasicDeclare.subst(iop)
-    decoder_output = BasicConstructor.subst(iop)
-    decode_block = BasicDecode.subst(iop)
-    exec_output = BasicExecute.subst(iop)
-}};
-
-def format BranchExchange(code,*opt_flags) {{
-    #Build Instruction Flags
-    #Use Link & Likely Flags to Add Link/Condition Code
-    inst_flags = ('IsIndirectControl', )
-    linking = False
-    for x in opt_flags:
-        if x == 'Link':
-            linking = True
-            code += 'LR = NPC;\n'
-        else:
-            inst_flags += (x, )
-
-    #Take into account uncond. branch instruction
-    if 'cond == 1' in code:
-         inst_flags += ('IsUnCondControl', )
-    else:
-         inst_flags += ('IsCondControl', )
-
-    #Condition code
-
-    icode =  'if (testPredicate(CondCodes, condCode)) {\n'
-    icode += code
-    icode += '  NPC = Rm & 0xfffffffe; // Masks off bottom bit\n'
-    icode += '} else {\n'
-    icode += '  NPC = NPC;\n'
-    if linking:
-        icode += '  LR = LR;\n'
-    icode += '};\n'
-
-    code = icode
-
-    iop = InstObjParams(name, Name, 'BranchExchange', code, inst_flags)
-    header_output = BasicDeclare.subst(iop)
-    decoder_output = BasicConstructor.subst(iop)
-    decode_block = BasicDecode.subst(iop)
-    exec_output = BasicExecute.subst(iop)
-}};
-