ARM: Implement the usad8 and usada8 instructions.
This commit is contained in:
parent
c643b1c274
commit
8f566e5ee3
1 changed files with 36 additions and 0 deletions
|
@ -387,4 +387,40 @@ let {{
|
||||||
header_output += RegRegRegOpDeclare.subst(selIop)
|
header_output += RegRegRegOpDeclare.subst(selIop)
|
||||||
decoder_output += RegRegRegOpConstructor.subst(selIop)
|
decoder_output += RegRegRegOpConstructor.subst(selIop)
|
||||||
exec_output += PredOpExecute.subst(selIop)
|
exec_output += PredOpExecute.subst(selIop)
|
||||||
|
|
||||||
|
usad8Code = '''
|
||||||
|
uint32_t resTemp = 0;
|
||||||
|
for (unsigned i = 0; i < 4; i++) {
|
||||||
|
int low = i * 8;
|
||||||
|
int high = low + 7;
|
||||||
|
int32_t diff = bits(Op1, high, low) -
|
||||||
|
bits(Op2, high, low);
|
||||||
|
resTemp += ((diff < 0) ? -diff : diff);
|
||||||
|
}
|
||||||
|
Dest = resTemp;
|
||||||
|
'''
|
||||||
|
usad8Iop = InstObjParams("usad8", "Usad8", "RegRegRegOp",
|
||||||
|
{ "code": usad8Code,
|
||||||
|
"predicate_test": predicateTest }, [])
|
||||||
|
header_output += RegRegRegOpDeclare.subst(usad8Iop)
|
||||||
|
decoder_output += RegRegRegOpConstructor.subst(usad8Iop)
|
||||||
|
exec_output += PredOpExecute.subst(usad8Iop)
|
||||||
|
|
||||||
|
usada8Code = '''
|
||||||
|
uint32_t resTemp = 0;
|
||||||
|
for (unsigned i = 0; i < 4; i++) {
|
||||||
|
int low = i * 8;
|
||||||
|
int high = low + 7;
|
||||||
|
int32_t diff = bits(Op1, high, low) -
|
||||||
|
bits(Op2, high, low);
|
||||||
|
resTemp += ((diff < 0) ? -diff : diff);
|
||||||
|
}
|
||||||
|
Dest = Op3 + resTemp;
|
||||||
|
'''
|
||||||
|
usada8Iop = InstObjParams("usada8", "Usada8", "RegRegRegRegOp",
|
||||||
|
{ "code": usada8Code,
|
||||||
|
"predicate_test": predicateTest }, [])
|
||||||
|
header_output += RegRegRegRegOpDeclare.subst(usada8Iop)
|
||||||
|
decoder_output += RegRegRegRegOpConstructor.subst(usada8Iop)
|
||||||
|
exec_output += PredOpExecute.subst(usada8Iop)
|
||||||
}};
|
}};
|
||||||
|
|
Loading…
Reference in a new issue