A64: Implement SHA1M

This commit is contained in:
Lioncash
2018-04-15 21:38:55 -04:00
committed by MerryMage
parent 47bc97a71b
commit 181c3b0790
2 changed files with 12 additions and 1 deletions

View File

@@ -11,6 +11,11 @@ namespace {
IR::U32 SHAchoose(IREmitter& ir, IR::U32 x, IR::U32 y, IR::U32 z) {
return ir.Eor(ir.And(ir.Eor(y, z), x), z);
}
IR::U32 SHAmajority(IREmitter& ir, IR::U32 x, IR::U32 y, IR::U32 z) {
return ir.Or(ir.And(x, y), ir.And(ir.Or(x, y), z)) ;
}
IR::U32 SHAparity(IREmitter& ir, IR::U32 x, IR::U32 y, IR::U32 z) {
return ir.Eor(ir.Eor(y, z), x);
}
@@ -50,6 +55,12 @@ bool TranslatorVisitor::SHA1C(Vec Vm, Vec Vn, Vec Vd) {
return true;
}
bool TranslatorVisitor::SHA1M(Vec Vm, Vec Vn, Vec Vd) {
const IR::U128 result = SHA1HashUpdate(ir, Vm, Vn, Vd, SHAmajority);
ir.SetQ(Vd, result);
return true;
}
bool TranslatorVisitor::SHA1P(Vec Vm, Vec Vn, Vec Vd) {
const IR::U128 result = SHA1HashUpdate(ir, Vm, Vn, Vd, SHAparity);
ir.SetQ(Vd, result);