branch.isa (3056:f613791cfec0) | branch.isa (3273:5aa5cc05fff9) |
---|---|
1// Copyright (c) 2006 The Regents of The University of Michigan 2// All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions are 6// met: redistributions of source code must retain the above copyright 7// notice, this list of conditions and the following disclaimer; 8// redistributions in binary form must reproduce the above copyright --- 66 unchanged lines hidden (view full) --- 75 class BranchNBits : public BranchDisp 76 { 77 protected: 78 // Constructor 79 BranchNBits(const char *mnem, MachInst _machInst, 80 OpClass __opClass) : 81 BranchDisp(mnem, _machInst, __opClass) 82 { | 1// Copyright (c) 2006 The Regents of The University of Michigan 2// All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions are 6// met: redistributions of source code must retain the above copyright 7// notice, this list of conditions and the following disclaimer; 8// redistributions in binary form must reproduce the above copyright --- 66 unchanged lines hidden (view full) --- 75 class BranchNBits : public BranchDisp 76 { 77 protected: 78 // Constructor 79 BranchNBits(const char *mnem, MachInst _machInst, 80 OpClass __opClass) : 81 BranchDisp(mnem, _machInst, __opClass) 82 { |
83 disp = sign_ext(_machInst << 2, bits + 2); | 83 disp = sext<bits + 2>((_machInst & mask(bits)) << 2); |
84 } 85 }; 86 87 /** 88 * Base class for 16bit split displacements. 89 */ 90 class BranchSplit : public BranchDisp 91 { 92 protected: 93 // Constructor 94 BranchSplit(const char *mnem, MachInst _machInst, 95 OpClass __opClass) : 96 BranchDisp(mnem, _machInst, __opClass) 97 { | 84 } 85 }; 86 87 /** 88 * Base class for 16bit split displacements. 89 */ 90 class BranchSplit : public BranchDisp 91 { 92 protected: 93 // Constructor 94 BranchSplit(const char *mnem, MachInst _machInst, 95 OpClass __opClass) : 96 BranchDisp(mnem, _machInst, __opClass) 97 { |
98 disp = sign_ext((D16HI << 16) | (D16LO << 2), 18); | 98 disp = sext<18>((D16HI << 16) | (D16LO << 2)); |
99 } 100 }; 101 102 /** 103 * Base class for branches that use an immediate and a register to 104 * compute their displacements. 105 */ 106 class BranchImm13 : public Branch 107 { 108 protected: 109 // Constructor 110 BranchImm13(const char *mnem, MachInst _machInst, OpClass __opClass) : | 99 } 100 }; 101 102 /** 103 * Base class for branches that use an immediate and a register to 104 * compute their displacements. 105 */ 106 class BranchImm13 : public Branch 107 { 108 protected: 109 // Constructor 110 BranchImm13(const char *mnem, MachInst _machInst, OpClass __opClass) : |
111 Branch(mnem, _machInst, __opClass), imm(sign_ext(SIMM13, 13)) | 111 Branch(mnem, _machInst, __opClass), imm(sext<13>(SIMM13)) |
112 { 113 } 114 115 std::string generateDisassembly(Addr pc, 116 const SymbolTable *symtab) const; 117 118 int32_t imm; 119 }; --- 153 unchanged lines hidden --- | 112 { 113 } 114 115 std::string generateDisassembly(Addr pc, 116 const SymbolTable *symtab) const; 117 118 int32_t imm; 119 }; --- 153 unchanged lines hidden --- |