target/ppc: Use aesdec_ISB_ISR_AK_IMC
This implements the VNCIPHER instruction. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
ce9f5b371d
commit
af4cb94555
@ -2947,22 +2947,11 @@ void helper_vcipherlast(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
|
||||
|
||||
void helper_vncipher(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
|
||||
{
|
||||
/* This differs from what is written in ISA V2.07. The RTL is */
|
||||
/* incorrect and will be fixed in V2.07B. */
|
||||
int i;
|
||||
ppc_avr_t tmp;
|
||||
AESState *ad = (AESState *)r;
|
||||
AESState *st = (AESState *)a;
|
||||
AESState *rk = (AESState *)b;
|
||||
|
||||
VECTOR_FOR_INORDER_I(i, u8) {
|
||||
tmp.VsrB(i) = b->VsrB(i) ^ AES_isbox[a->VsrB(AES_ishifts[i])];
|
||||
}
|
||||
|
||||
VECTOR_FOR_INORDER_I(i, u32) {
|
||||
r->VsrW(i) =
|
||||
AES_imc[tmp.VsrB(4 * i + 0)][0] ^
|
||||
AES_imc[tmp.VsrB(4 * i + 1)][1] ^
|
||||
AES_imc[tmp.VsrB(4 * i + 2)][2] ^
|
||||
AES_imc[tmp.VsrB(4 * i + 3)][3];
|
||||
}
|
||||
aesdec_ISB_ISR_AK_IMC(ad, st, rk, true);
|
||||
}
|
||||
|
||||
void helper_vncipherlast(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
|
||||
|
Loading…
Reference in New Issue
Block a user