1 /* This file is part of the dynarmic project.
2 * Copyright (c) 2018 MerryMage
3 * SPDX-License-Identifier: 0BSD
4 */
5
6 #include "frontend/A64/translate/impl/impl.h"
7
8 namespace Dynarmic::A64 {
9
AESD(Vec Vn,Vec Vd)10 bool TranslatorVisitor::AESD(Vec Vn, Vec Vd) {
11 const IR::U128 operand1 = ir.GetQ(Vd);
12 const IR::U128 operand2 = ir.GetQ(Vn);
13
14 const IR::U128 result = ir.AESDecryptSingleRound(ir.VectorEor(operand1, operand2));
15
16 ir.SetQ(Vd, result);
17 return true;
18 }
19
AESE(Vec Vn,Vec Vd)20 bool TranslatorVisitor::AESE(Vec Vn, Vec Vd) {
21 const IR::U128 operand1 = ir.GetQ(Vd);
22 const IR::U128 operand2 = ir.GetQ(Vn);
23
24 const IR::U128 result = ir.AESEncryptSingleRound(ir.VectorEor(operand1, operand2));
25
26 ir.SetQ(Vd, result);
27 return true;
28 }
29
AESIMC(Vec Vn,Vec Vd)30 bool TranslatorVisitor::AESIMC(Vec Vn, Vec Vd) {
31 const IR::U128 operand = ir.GetQ(Vn);
32 const IR::U128 result = ir.AESInverseMixColumns(operand);
33
34 ir.SetQ(Vd, result);
35 return true;
36 }
37
AESMC(Vec Vn,Vec Vd)38 bool TranslatorVisitor::AESMC(Vec Vn, Vec Vd) {
39 const IR::U128 operand = ir.GetQ(Vn);
40 const IR::U128 result = ir.AESMixColumns(operand);
41
42 ir.SetQ(Vd, result);
43 return true;
44 }
45
46 } // namespace Dynarmic::A64
47