ARM: Implement the rbit instruction.
This commit is contained in:
@@ -154,6 +154,26 @@ let {{
|
||||
decoder_output += RevOpConstructor.subst(revshIop)
|
||||
exec_output += PredOpExecute.subst(revshIop)
|
||||
|
||||
rbitCode = '''
|
||||
uint8_t *opBytes = (uint8_t *)&Op1;
|
||||
uint32_t resTemp;
|
||||
uint8_t *destBytes = (uint8_t *)&resTemp;
|
||||
// This reverses the bytes and bits of the input, or so says the
|
||||
// internet.
|
||||
for (int i = 0; i < 4; i++) {
|
||||
uint32_t temp = opBytes[i];
|
||||
temp = (temp * 0x0802 & 0x22110) | (temp * 0x8020 & 0x88440);
|
||||
destBytes[3 - i] = (temp * 0x10101) >> 16;
|
||||
}
|
||||
Dest = resTemp;
|
||||
'''
|
||||
rbitIop = InstObjParams("rbit", "Rbit", "RevOp",
|
||||
{ "code": rbitCode,
|
||||
"predicate_test": predicateTest }, [])
|
||||
header_output += RevOpDeclare.subst(rbitIop)
|
||||
decoder_output += RevOpConstructor.subst(rbitIop)
|
||||
exec_output += PredOpExecute.subst(rbitIop)
|
||||
|
||||
ssatCode = '''
|
||||
int32_t operand = shift_rm_imm(Op1, shiftAmt, shiftType, 0);
|
||||
int32_t res;
|
||||
|
||||
Reference in New Issue
Block a user