A64: Implement EOR3 and BCAX
This commit is contained in:
parent
bc4bde1fbd
commit
7a66224d9a
3 changed files with 36 additions and 2 deletions
|
@ -97,6 +97,7 @@ add_library(dynarmic
|
||||||
frontend/A64/translate/impl/move_wide.cpp
|
frontend/A64/translate/impl/move_wide.cpp
|
||||||
frontend/A64/translate/impl/simd_aes.cpp
|
frontend/A64/translate/impl/simd_aes.cpp
|
||||||
frontend/A64/translate/impl/simd_copy.cpp
|
frontend/A64/translate/impl/simd_copy.cpp
|
||||||
|
frontend/A64/translate/impl/simd_crypto_four_register.cpp
|
||||||
frontend/A64/translate/impl/simd_modified_immediate.cpp
|
frontend/A64/translate/impl/simd_modified_immediate.cpp
|
||||||
frontend/A64/translate/impl/simd_permute.cpp
|
frontend/A64/translate/impl/simd_permute.cpp
|
||||||
frontend/A64/translate/impl/simd_scalar_pairwise.cpp
|
frontend/A64/translate/impl/simd_scalar_pairwise.cpp
|
||||||
|
|
|
@ -865,8 +865,8 @@ INST(USHLL, "USHLL, USHLL2", "0Q101
|
||||||
//INST(SM4EKEY, "SM4EKEY", "11001110011mmmmm110010nnnnnddddd")
|
//INST(SM4EKEY, "SM4EKEY", "11001110011mmmmm110010nnnnnddddd")
|
||||||
|
|
||||||
// Data Processing - FP and SIMD - Cryptographic four register
|
// Data Processing - FP and SIMD - Cryptographic four register
|
||||||
//INST(EOR3, "EOR3", "11001110000mmmmm0aaaaannnnnddddd")
|
INST(EOR3, "EOR3", "11001110000mmmmm0aaaaannnnnddddd")
|
||||||
//INST(BCAX, "BCAX", "11001110001mmmmm0aaaaannnnnddddd")
|
INST(BCAX, "BCAX", "11001110001mmmmm0aaaaannnnnddddd")
|
||||||
//INST(SM3SS1, "SM3SS1", "11001110010mmmmm0aaaaannnnnddddd")
|
//INST(SM3SS1, "SM3SS1", "11001110010mmmmm0aaaaannnnnddddd")
|
||||||
|
|
||||||
// Data Processing - FP and SIMD - SHA512 two register
|
// Data Processing - FP and SIMD - SHA512 two register
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
/* This file is part of the dynarmic project.
|
||||||
|
* Copyright (c) 2018 MerryMage
|
||||||
|
* This software may be used and distributed according to the terms of the GNU
|
||||||
|
* General Public License version 2 or any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "frontend/A64/translate/impl/impl.h"
|
||||||
|
|
||||||
|
namespace Dynarmic::A64 {
|
||||||
|
|
||||||
|
bool TranslatorVisitor::EOR3(Vec Vm, Vec Va, Vec Vn, Vec Vd) {
|
||||||
|
const IR::U128 a = ir.GetQ(Va);
|
||||||
|
const IR::U128 m = ir.GetQ(Vm);
|
||||||
|
const IR::U128 n = ir.GetQ(Vn);
|
||||||
|
|
||||||
|
const IR::U128 result = ir.VectorEor(ir.VectorEor(n, m), a);
|
||||||
|
|
||||||
|
ir.SetQ(Vd, result);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TranslatorVisitor::BCAX(Vec Vm, Vec Va, Vec Vn, Vec Vd) {
|
||||||
|
const IR::U128 a = ir.GetQ(Va);
|
||||||
|
const IR::U128 m = ir.GetQ(Vm);
|
||||||
|
const IR::U128 n = ir.GetQ(Vn);
|
||||||
|
|
||||||
|
const IR::U128 result = ir.VectorEor(n, ir.VectorAnd(m, ir.VectorNot(a)));
|
||||||
|
|
||||||
|
ir.SetQ(Vd, result);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Dynarmic::A64
|
Loading…
Reference in a new issue