ARM: Fix branch prediction issue with CB(N)Z instruction
This commit is contained in:
parent
927bba9d60
commit
9a9a4a0780
1 changed files with 3 additions and 8 deletions
|
@ -212,6 +212,8 @@ class %(class_name)s : public %(base_class)s
|
|||
};
|
||||
}};
|
||||
|
||||
// Only used by CBNZ, CBZ which is conditional based on
|
||||
// a register value even though the instruction is always unconditional.
|
||||
def template BranchImmRegConstructor {{
|
||||
inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
|
||||
int32_t _imm,
|
||||
|
@ -219,14 +221,7 @@ def template BranchImmRegConstructor {{
|
|||
: %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _imm, _op1)
|
||||
{
|
||||
%(constructor)s;
|
||||
if (!(condCode == COND_AL || condCode == COND_UC)) {
|
||||
for (int x = 0; x < _numDestRegs; x++) {
|
||||
_srcRegIdx[_numSrcRegs++] = _destRegIdx[x];
|
||||
}
|
||||
flags[IsCondControl] = true;
|
||||
} else {
|
||||
flags[IsUncondControl] = true;
|
||||
}
|
||||
flags[IsCondControl] = true;
|
||||
}
|
||||
}};
|
||||
|
||||
|
|
Loading…
Reference in a new issue