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