1*293c7cd5SEric Biggers/* SPDX-License-Identifier: GPL-2.0 */ 2*293c7cd5SEric Biggers#include <linux/linkage.h> 3*293c7cd5SEric Biggers#include <asm/opcodes.h> 4*293c7cd5SEric Biggers#include <asm/visasm.h> 5*293c7cd5SEric Biggers 6*293c7cd5SEric Biggers#define ENCRYPT_TWO_ROUNDS(KEY_BASE, I0, I1, T0, T1) \ 7*293c7cd5SEric Biggers AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \ 8*293c7cd5SEric Biggers AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \ 9*293c7cd5SEric Biggers AES_EROUND01(KEY_BASE + 4, T0, T1, I0) \ 10*293c7cd5SEric Biggers AES_EROUND23(KEY_BASE + 6, T0, T1, I1) 11*293c7cd5SEric Biggers 12*293c7cd5SEric Biggers#define ENCRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 13*293c7cd5SEric Biggers AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \ 14*293c7cd5SEric Biggers AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \ 15*293c7cd5SEric Biggers AES_EROUND01(KEY_BASE + 0, I2, I3, T2) \ 16*293c7cd5SEric Biggers AES_EROUND23(KEY_BASE + 2, I2, I3, T3) \ 17*293c7cd5SEric Biggers AES_EROUND01(KEY_BASE + 4, T0, T1, I0) \ 18*293c7cd5SEric Biggers AES_EROUND23(KEY_BASE + 6, T0, T1, I1) \ 19*293c7cd5SEric Biggers AES_EROUND01(KEY_BASE + 4, T2, T3, I2) \ 20*293c7cd5SEric Biggers AES_EROUND23(KEY_BASE + 6, T2, T3, I3) 21*293c7cd5SEric Biggers 22*293c7cd5SEric Biggers#define ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE, I0, I1, T0, T1) \ 23*293c7cd5SEric Biggers AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \ 24*293c7cd5SEric Biggers AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \ 25*293c7cd5SEric Biggers AES_EROUND01_L(KEY_BASE + 4, T0, T1, I0) \ 26*293c7cd5SEric Biggers AES_EROUND23_L(KEY_BASE + 6, T0, T1, I1) 27*293c7cd5SEric Biggers 28*293c7cd5SEric Biggers#define ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 29*293c7cd5SEric Biggers AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \ 30*293c7cd5SEric Biggers AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \ 31*293c7cd5SEric Biggers AES_EROUND01(KEY_BASE + 0, I2, I3, T2) \ 32*293c7cd5SEric Biggers AES_EROUND23(KEY_BASE + 2, I2, I3, T3) \ 33*293c7cd5SEric Biggers AES_EROUND01_L(KEY_BASE + 4, T0, T1, I0) \ 34*293c7cd5SEric Biggers AES_EROUND23_L(KEY_BASE + 6, T0, T1, I1) \ 35*293c7cd5SEric Biggers AES_EROUND01_L(KEY_BASE + 4, T2, T3, I2) \ 36*293c7cd5SEric Biggers AES_EROUND23_L(KEY_BASE + 6, T2, T3, I3) 37*293c7cd5SEric Biggers 38*293c7cd5SEric Biggers /* 10 rounds */ 39*293c7cd5SEric Biggers#define ENCRYPT_128(KEY_BASE, I0, I1, T0, T1) \ 40*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ 41*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ 42*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ 43*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ 44*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 32, I0, I1, T0, T1) 45*293c7cd5SEric Biggers 46*293c7cd5SEric Biggers#define ENCRYPT_128_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 47*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \ 48*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \ 49*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \ 50*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \ 51*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) 52*293c7cd5SEric Biggers 53*293c7cd5SEric Biggers /* 12 rounds */ 54*293c7cd5SEric Biggers#define ENCRYPT_192(KEY_BASE, I0, I1, T0, T1) \ 55*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ 56*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ 57*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ 58*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ 59*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ 60*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 40, I0, I1, T0, T1) 61*293c7cd5SEric Biggers 62*293c7cd5SEric Biggers#define ENCRYPT_192_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 63*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \ 64*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \ 65*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \ 66*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \ 67*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) \ 68*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 40, I0, I1, I2, I3, T0, T1, T2, T3) 69*293c7cd5SEric Biggers 70*293c7cd5SEric Biggers /* 14 rounds */ 71*293c7cd5SEric Biggers#define ENCRYPT_256(KEY_BASE, I0, I1, T0, T1) \ 72*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ 73*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ 74*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ 75*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ 76*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ 77*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(KEY_BASE + 40, I0, I1, T0, T1) \ 78*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 48, I0, I1, T0, T1) 79*293c7cd5SEric Biggers 80*293c7cd5SEric Biggers#define ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, TMP_BASE) \ 81*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, \ 82*293c7cd5SEric Biggers TMP_BASE + 0, TMP_BASE + 2, TMP_BASE + 4, TMP_BASE + 6) 83*293c7cd5SEric Biggers 84*293c7cd5SEric Biggers#define ENCRYPT_256_2(KEY_BASE, I0, I1, I2, I3) \ 85*293c7cd5SEric Biggers ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, KEY_BASE + 48) \ 86*293c7cd5SEric Biggers ldd [%o0 + 0xd0], %f56; \ 87*293c7cd5SEric Biggers ldd [%o0 + 0xd8], %f58; \ 88*293c7cd5SEric Biggers ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, KEY_BASE + 0) \ 89*293c7cd5SEric Biggers ldd [%o0 + 0xe0], %f60; \ 90*293c7cd5SEric Biggers ldd [%o0 + 0xe8], %f62; \ 91*293c7cd5SEric Biggers ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, KEY_BASE + 0) \ 92*293c7cd5SEric Biggers ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, KEY_BASE + 0) \ 93*293c7cd5SEric Biggers ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, KEY_BASE + 0) \ 94*293c7cd5SEric Biggers ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 40, I0, I1, I2, I3, KEY_BASE + 0) \ 95*293c7cd5SEric Biggers AES_EROUND01(KEY_BASE + 48, I0, I1, KEY_BASE + 0) \ 96*293c7cd5SEric Biggers AES_EROUND23(KEY_BASE + 50, I0, I1, KEY_BASE + 2) \ 97*293c7cd5SEric Biggers AES_EROUND01(KEY_BASE + 48, I2, I3, KEY_BASE + 4) \ 98*293c7cd5SEric Biggers AES_EROUND23(KEY_BASE + 50, I2, I3, KEY_BASE + 6) \ 99*293c7cd5SEric Biggers AES_EROUND01_L(KEY_BASE + 52, KEY_BASE + 0, KEY_BASE + 2, I0) \ 100*293c7cd5SEric Biggers AES_EROUND23_L(KEY_BASE + 54, KEY_BASE + 0, KEY_BASE + 2, I1) \ 101*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f8; \ 102*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f10; \ 103*293c7cd5SEric Biggers AES_EROUND01_L(KEY_BASE + 52, KEY_BASE + 4, KEY_BASE + 6, I2) \ 104*293c7cd5SEric Biggers AES_EROUND23_L(KEY_BASE + 54, KEY_BASE + 4, KEY_BASE + 6, I3) \ 105*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f12; \ 106*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f14; 107*293c7cd5SEric Biggers 108*293c7cd5SEric Biggers#define DECRYPT_TWO_ROUNDS(KEY_BASE, I0, I1, T0, T1) \ 109*293c7cd5SEric Biggers AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \ 110*293c7cd5SEric Biggers AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \ 111*293c7cd5SEric Biggers AES_DROUND23(KEY_BASE + 4, T0, T1, I1) \ 112*293c7cd5SEric Biggers AES_DROUND01(KEY_BASE + 6, T0, T1, I0) 113*293c7cd5SEric Biggers 114*293c7cd5SEric Biggers#define DECRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 115*293c7cd5SEric Biggers AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \ 116*293c7cd5SEric Biggers AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \ 117*293c7cd5SEric Biggers AES_DROUND23(KEY_BASE + 0, I2, I3, T3) \ 118*293c7cd5SEric Biggers AES_DROUND01(KEY_BASE + 2, I2, I3, T2) \ 119*293c7cd5SEric Biggers AES_DROUND23(KEY_BASE + 4, T0, T1, I1) \ 120*293c7cd5SEric Biggers AES_DROUND01(KEY_BASE + 6, T0, T1, I0) \ 121*293c7cd5SEric Biggers AES_DROUND23(KEY_BASE + 4, T2, T3, I3) \ 122*293c7cd5SEric Biggers AES_DROUND01(KEY_BASE + 6, T2, T3, I2) 123*293c7cd5SEric Biggers 124*293c7cd5SEric Biggers#define DECRYPT_TWO_ROUNDS_LAST(KEY_BASE, I0, I1, T0, T1) \ 125*293c7cd5SEric Biggers AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \ 126*293c7cd5SEric Biggers AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \ 127*293c7cd5SEric Biggers AES_DROUND23_L(KEY_BASE + 4, T0, T1, I1) \ 128*293c7cd5SEric Biggers AES_DROUND01_L(KEY_BASE + 6, T0, T1, I0) 129*293c7cd5SEric Biggers 130*293c7cd5SEric Biggers#define DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 131*293c7cd5SEric Biggers AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \ 132*293c7cd5SEric Biggers AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \ 133*293c7cd5SEric Biggers AES_DROUND23(KEY_BASE + 0, I2, I3, T3) \ 134*293c7cd5SEric Biggers AES_DROUND01(KEY_BASE + 2, I2, I3, T2) \ 135*293c7cd5SEric Biggers AES_DROUND23_L(KEY_BASE + 4, T0, T1, I1) \ 136*293c7cd5SEric Biggers AES_DROUND01_L(KEY_BASE + 6, T0, T1, I0) \ 137*293c7cd5SEric Biggers AES_DROUND23_L(KEY_BASE + 4, T2, T3, I3) \ 138*293c7cd5SEric Biggers AES_DROUND01_L(KEY_BASE + 6, T2, T3, I2) 139*293c7cd5SEric Biggers 140*293c7cd5SEric Biggers /* 10 rounds */ 141*293c7cd5SEric Biggers#define DECRYPT_128(KEY_BASE, I0, I1, T0, T1) \ 142*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ 143*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ 144*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ 145*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ 146*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 32, I0, I1, T0, T1) 147*293c7cd5SEric Biggers 148*293c7cd5SEric Biggers#define DECRYPT_128_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 149*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \ 150*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \ 151*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \ 152*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \ 153*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) 154*293c7cd5SEric Biggers 155*293c7cd5SEric Biggers /* 12 rounds */ 156*293c7cd5SEric Biggers#define DECRYPT_192(KEY_BASE, I0, I1, T0, T1) \ 157*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ 158*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ 159*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ 160*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ 161*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ 162*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 40, I0, I1, T0, T1) 163*293c7cd5SEric Biggers 164*293c7cd5SEric Biggers#define DECRYPT_192_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 165*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \ 166*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \ 167*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \ 168*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \ 169*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) \ 170*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 40, I0, I1, I2, I3, T0, T1, T2, T3) 171*293c7cd5SEric Biggers 172*293c7cd5SEric Biggers /* 14 rounds */ 173*293c7cd5SEric Biggers#define DECRYPT_256(KEY_BASE, I0, I1, T0, T1) \ 174*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ 175*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ 176*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ 177*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ 178*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ 179*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(KEY_BASE + 40, I0, I1, T0, T1) \ 180*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 48, I0, I1, T0, T1) 181*293c7cd5SEric Biggers 182*293c7cd5SEric Biggers#define DECRYPT_256_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, TMP_BASE) \ 183*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, \ 184*293c7cd5SEric Biggers TMP_BASE + 0, TMP_BASE + 2, TMP_BASE + 4, TMP_BASE + 6) 185*293c7cd5SEric Biggers 186*293c7cd5SEric Biggers#define DECRYPT_256_2(KEY_BASE, I0, I1, I2, I3) \ 187*293c7cd5SEric Biggers DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, KEY_BASE + 48) \ 188*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f56; \ 189*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f58; \ 190*293c7cd5SEric Biggers DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, KEY_BASE + 0) \ 191*293c7cd5SEric Biggers ldd [%o0 + 0x08], %f60; \ 192*293c7cd5SEric Biggers ldd [%o0 + 0x00], %f62; \ 193*293c7cd5SEric Biggers DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, KEY_BASE + 0) \ 194*293c7cd5SEric Biggers DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, KEY_BASE + 0) \ 195*293c7cd5SEric Biggers DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, KEY_BASE + 0) \ 196*293c7cd5SEric Biggers DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 40, I0, I1, I2, I3, KEY_BASE + 0) \ 197*293c7cd5SEric Biggers AES_DROUND23(KEY_BASE + 48, I0, I1, KEY_BASE + 2) \ 198*293c7cd5SEric Biggers AES_DROUND01(KEY_BASE + 50, I0, I1, KEY_BASE + 0) \ 199*293c7cd5SEric Biggers AES_DROUND23(KEY_BASE + 48, I2, I3, KEY_BASE + 6) \ 200*293c7cd5SEric Biggers AES_DROUND01(KEY_BASE + 50, I2, I3, KEY_BASE + 4) \ 201*293c7cd5SEric Biggers AES_DROUND23_L(KEY_BASE + 52, KEY_BASE + 0, KEY_BASE + 2, I1) \ 202*293c7cd5SEric Biggers AES_DROUND01_L(KEY_BASE + 54, KEY_BASE + 0, KEY_BASE + 2, I0) \ 203*293c7cd5SEric Biggers ldd [%o0 + 0xd8], %f8; \ 204*293c7cd5SEric Biggers ldd [%o0 + 0xd0], %f10; \ 205*293c7cd5SEric Biggers AES_DROUND23_L(KEY_BASE + 52, KEY_BASE + 4, KEY_BASE + 6, I3) \ 206*293c7cd5SEric Biggers AES_DROUND01_L(KEY_BASE + 54, KEY_BASE + 4, KEY_BASE + 6, I2) \ 207*293c7cd5SEric Biggers ldd [%o0 + 0xc8], %f12; \ 208*293c7cd5SEric Biggers ldd [%o0 + 0xc0], %f14; 209*293c7cd5SEric Biggers 210*293c7cd5SEric Biggers .align 32 211*293c7cd5SEric BiggersENTRY(aes_sparc64_key_expand) 212*293c7cd5SEric Biggers /* %o0=input_key, %o1=output_key, %o2=key_len */ 213*293c7cd5SEric Biggers VISEntry 214*293c7cd5SEric Biggers ld [%o0 + 0x00], %f0 215*293c7cd5SEric Biggers ld [%o0 + 0x04], %f1 216*293c7cd5SEric Biggers ld [%o0 + 0x08], %f2 217*293c7cd5SEric Biggers ld [%o0 + 0x0c], %f3 218*293c7cd5SEric Biggers 219*293c7cd5SEric Biggers std %f0, [%o1 + 0x00] 220*293c7cd5SEric Biggers std %f2, [%o1 + 0x08] 221*293c7cd5SEric Biggers add %o1, 0x10, %o1 222*293c7cd5SEric Biggers 223*293c7cd5SEric Biggers cmp %o2, 24 224*293c7cd5SEric Biggers bl 2f 225*293c7cd5SEric Biggers nop 226*293c7cd5SEric Biggers 227*293c7cd5SEric Biggers be 1f 228*293c7cd5SEric Biggers nop 229*293c7cd5SEric Biggers 230*293c7cd5SEric Biggers /* 256-bit key expansion */ 231*293c7cd5SEric Biggers ld [%o0 + 0x10], %f4 232*293c7cd5SEric Biggers ld [%o0 + 0x14], %f5 233*293c7cd5SEric Biggers ld [%o0 + 0x18], %f6 234*293c7cd5SEric Biggers ld [%o0 + 0x1c], %f7 235*293c7cd5SEric Biggers 236*293c7cd5SEric Biggers std %f4, [%o1 + 0x00] 237*293c7cd5SEric Biggers std %f6, [%o1 + 0x08] 238*293c7cd5SEric Biggers add %o1, 0x10, %o1 239*293c7cd5SEric Biggers 240*293c7cd5SEric Biggers AES_KEXPAND1(0, 6, 0x0, 8) 241*293c7cd5SEric Biggers AES_KEXPAND2(2, 8, 10) 242*293c7cd5SEric Biggers AES_KEXPAND0(4, 10, 12) 243*293c7cd5SEric Biggers AES_KEXPAND2(6, 12, 14) 244*293c7cd5SEric Biggers AES_KEXPAND1(8, 14, 0x1, 16) 245*293c7cd5SEric Biggers AES_KEXPAND2(10, 16, 18) 246*293c7cd5SEric Biggers AES_KEXPAND0(12, 18, 20) 247*293c7cd5SEric Biggers AES_KEXPAND2(14, 20, 22) 248*293c7cd5SEric Biggers AES_KEXPAND1(16, 22, 0x2, 24) 249*293c7cd5SEric Biggers AES_KEXPAND2(18, 24, 26) 250*293c7cd5SEric Biggers AES_KEXPAND0(20, 26, 28) 251*293c7cd5SEric Biggers AES_KEXPAND2(22, 28, 30) 252*293c7cd5SEric Biggers AES_KEXPAND1(24, 30, 0x3, 32) 253*293c7cd5SEric Biggers AES_KEXPAND2(26, 32, 34) 254*293c7cd5SEric Biggers AES_KEXPAND0(28, 34, 36) 255*293c7cd5SEric Biggers AES_KEXPAND2(30, 36, 38) 256*293c7cd5SEric Biggers AES_KEXPAND1(32, 38, 0x4, 40) 257*293c7cd5SEric Biggers AES_KEXPAND2(34, 40, 42) 258*293c7cd5SEric Biggers AES_KEXPAND0(36, 42, 44) 259*293c7cd5SEric Biggers AES_KEXPAND2(38, 44, 46) 260*293c7cd5SEric Biggers AES_KEXPAND1(40, 46, 0x5, 48) 261*293c7cd5SEric Biggers AES_KEXPAND2(42, 48, 50) 262*293c7cd5SEric Biggers AES_KEXPAND0(44, 50, 52) 263*293c7cd5SEric Biggers AES_KEXPAND2(46, 52, 54) 264*293c7cd5SEric Biggers AES_KEXPAND1(48, 54, 0x6, 56) 265*293c7cd5SEric Biggers AES_KEXPAND2(50, 56, 58) 266*293c7cd5SEric Biggers 267*293c7cd5SEric Biggers std %f8, [%o1 + 0x00] 268*293c7cd5SEric Biggers std %f10, [%o1 + 0x08] 269*293c7cd5SEric Biggers std %f12, [%o1 + 0x10] 270*293c7cd5SEric Biggers std %f14, [%o1 + 0x18] 271*293c7cd5SEric Biggers std %f16, [%o1 + 0x20] 272*293c7cd5SEric Biggers std %f18, [%o1 + 0x28] 273*293c7cd5SEric Biggers std %f20, [%o1 + 0x30] 274*293c7cd5SEric Biggers std %f22, [%o1 + 0x38] 275*293c7cd5SEric Biggers std %f24, [%o1 + 0x40] 276*293c7cd5SEric Biggers std %f26, [%o1 + 0x48] 277*293c7cd5SEric Biggers std %f28, [%o1 + 0x50] 278*293c7cd5SEric Biggers std %f30, [%o1 + 0x58] 279*293c7cd5SEric Biggers std %f32, [%o1 + 0x60] 280*293c7cd5SEric Biggers std %f34, [%o1 + 0x68] 281*293c7cd5SEric Biggers std %f36, [%o1 + 0x70] 282*293c7cd5SEric Biggers std %f38, [%o1 + 0x78] 283*293c7cd5SEric Biggers std %f40, [%o1 + 0x80] 284*293c7cd5SEric Biggers std %f42, [%o1 + 0x88] 285*293c7cd5SEric Biggers std %f44, [%o1 + 0x90] 286*293c7cd5SEric Biggers std %f46, [%o1 + 0x98] 287*293c7cd5SEric Biggers std %f48, [%o1 + 0xa0] 288*293c7cd5SEric Biggers std %f50, [%o1 + 0xa8] 289*293c7cd5SEric Biggers std %f52, [%o1 + 0xb0] 290*293c7cd5SEric Biggers std %f54, [%o1 + 0xb8] 291*293c7cd5SEric Biggers std %f56, [%o1 + 0xc0] 292*293c7cd5SEric Biggers ba,pt %xcc, 80f 293*293c7cd5SEric Biggers std %f58, [%o1 + 0xc8] 294*293c7cd5SEric Biggers 295*293c7cd5SEric Biggers1: 296*293c7cd5SEric Biggers /* 192-bit key expansion */ 297*293c7cd5SEric Biggers ld [%o0 + 0x10], %f4 298*293c7cd5SEric Biggers ld [%o0 + 0x14], %f5 299*293c7cd5SEric Biggers 300*293c7cd5SEric Biggers std %f4, [%o1 + 0x00] 301*293c7cd5SEric Biggers add %o1, 0x08, %o1 302*293c7cd5SEric Biggers 303*293c7cd5SEric Biggers AES_KEXPAND1(0, 4, 0x0, 6) 304*293c7cd5SEric Biggers AES_KEXPAND2(2, 6, 8) 305*293c7cd5SEric Biggers AES_KEXPAND2(4, 8, 10) 306*293c7cd5SEric Biggers AES_KEXPAND1(6, 10, 0x1, 12) 307*293c7cd5SEric Biggers AES_KEXPAND2(8, 12, 14) 308*293c7cd5SEric Biggers AES_KEXPAND2(10, 14, 16) 309*293c7cd5SEric Biggers AES_KEXPAND1(12, 16, 0x2, 18) 310*293c7cd5SEric Biggers AES_KEXPAND2(14, 18, 20) 311*293c7cd5SEric Biggers AES_KEXPAND2(16, 20, 22) 312*293c7cd5SEric Biggers AES_KEXPAND1(18, 22, 0x3, 24) 313*293c7cd5SEric Biggers AES_KEXPAND2(20, 24, 26) 314*293c7cd5SEric Biggers AES_KEXPAND2(22, 26, 28) 315*293c7cd5SEric Biggers AES_KEXPAND1(24, 28, 0x4, 30) 316*293c7cd5SEric Biggers AES_KEXPAND2(26, 30, 32) 317*293c7cd5SEric Biggers AES_KEXPAND2(28, 32, 34) 318*293c7cd5SEric Biggers AES_KEXPAND1(30, 34, 0x5, 36) 319*293c7cd5SEric Biggers AES_KEXPAND2(32, 36, 38) 320*293c7cd5SEric Biggers AES_KEXPAND2(34, 38, 40) 321*293c7cd5SEric Biggers AES_KEXPAND1(36, 40, 0x6, 42) 322*293c7cd5SEric Biggers AES_KEXPAND2(38, 42, 44) 323*293c7cd5SEric Biggers AES_KEXPAND2(40, 44, 46) 324*293c7cd5SEric Biggers AES_KEXPAND1(42, 46, 0x7, 48) 325*293c7cd5SEric Biggers AES_KEXPAND2(44, 48, 50) 326*293c7cd5SEric Biggers 327*293c7cd5SEric Biggers std %f6, [%o1 + 0x00] 328*293c7cd5SEric Biggers std %f8, [%o1 + 0x08] 329*293c7cd5SEric Biggers std %f10, [%o1 + 0x10] 330*293c7cd5SEric Biggers std %f12, [%o1 + 0x18] 331*293c7cd5SEric Biggers std %f14, [%o1 + 0x20] 332*293c7cd5SEric Biggers std %f16, [%o1 + 0x28] 333*293c7cd5SEric Biggers std %f18, [%o1 + 0x30] 334*293c7cd5SEric Biggers std %f20, [%o1 + 0x38] 335*293c7cd5SEric Biggers std %f22, [%o1 + 0x40] 336*293c7cd5SEric Biggers std %f24, [%o1 + 0x48] 337*293c7cd5SEric Biggers std %f26, [%o1 + 0x50] 338*293c7cd5SEric Biggers std %f28, [%o1 + 0x58] 339*293c7cd5SEric Biggers std %f30, [%o1 + 0x60] 340*293c7cd5SEric Biggers std %f32, [%o1 + 0x68] 341*293c7cd5SEric Biggers std %f34, [%o1 + 0x70] 342*293c7cd5SEric Biggers std %f36, [%o1 + 0x78] 343*293c7cd5SEric Biggers std %f38, [%o1 + 0x80] 344*293c7cd5SEric Biggers std %f40, [%o1 + 0x88] 345*293c7cd5SEric Biggers std %f42, [%o1 + 0x90] 346*293c7cd5SEric Biggers std %f44, [%o1 + 0x98] 347*293c7cd5SEric Biggers std %f46, [%o1 + 0xa0] 348*293c7cd5SEric Biggers std %f48, [%o1 + 0xa8] 349*293c7cd5SEric Biggers ba,pt %xcc, 80f 350*293c7cd5SEric Biggers std %f50, [%o1 + 0xb0] 351*293c7cd5SEric Biggers 352*293c7cd5SEric Biggers2: 353*293c7cd5SEric Biggers /* 128-bit key expansion */ 354*293c7cd5SEric Biggers AES_KEXPAND1(0, 2, 0x0, 4) 355*293c7cd5SEric Biggers AES_KEXPAND2(2, 4, 6) 356*293c7cd5SEric Biggers AES_KEXPAND1(4, 6, 0x1, 8) 357*293c7cd5SEric Biggers AES_KEXPAND2(6, 8, 10) 358*293c7cd5SEric Biggers AES_KEXPAND1(8, 10, 0x2, 12) 359*293c7cd5SEric Biggers AES_KEXPAND2(10, 12, 14) 360*293c7cd5SEric Biggers AES_KEXPAND1(12, 14, 0x3, 16) 361*293c7cd5SEric Biggers AES_KEXPAND2(14, 16, 18) 362*293c7cd5SEric Biggers AES_KEXPAND1(16, 18, 0x4, 20) 363*293c7cd5SEric Biggers AES_KEXPAND2(18, 20, 22) 364*293c7cd5SEric Biggers AES_KEXPAND1(20, 22, 0x5, 24) 365*293c7cd5SEric Biggers AES_KEXPAND2(22, 24, 26) 366*293c7cd5SEric Biggers AES_KEXPAND1(24, 26, 0x6, 28) 367*293c7cd5SEric Biggers AES_KEXPAND2(26, 28, 30) 368*293c7cd5SEric Biggers AES_KEXPAND1(28, 30, 0x7, 32) 369*293c7cd5SEric Biggers AES_KEXPAND2(30, 32, 34) 370*293c7cd5SEric Biggers AES_KEXPAND1(32, 34, 0x8, 36) 371*293c7cd5SEric Biggers AES_KEXPAND2(34, 36, 38) 372*293c7cd5SEric Biggers AES_KEXPAND1(36, 38, 0x9, 40) 373*293c7cd5SEric Biggers AES_KEXPAND2(38, 40, 42) 374*293c7cd5SEric Biggers 375*293c7cd5SEric Biggers std %f4, [%o1 + 0x00] 376*293c7cd5SEric Biggers std %f6, [%o1 + 0x08] 377*293c7cd5SEric Biggers std %f8, [%o1 + 0x10] 378*293c7cd5SEric Biggers std %f10, [%o1 + 0x18] 379*293c7cd5SEric Biggers std %f12, [%o1 + 0x20] 380*293c7cd5SEric Biggers std %f14, [%o1 + 0x28] 381*293c7cd5SEric Biggers std %f16, [%o1 + 0x30] 382*293c7cd5SEric Biggers std %f18, [%o1 + 0x38] 383*293c7cd5SEric Biggers std %f20, [%o1 + 0x40] 384*293c7cd5SEric Biggers std %f22, [%o1 + 0x48] 385*293c7cd5SEric Biggers std %f24, [%o1 + 0x50] 386*293c7cd5SEric Biggers std %f26, [%o1 + 0x58] 387*293c7cd5SEric Biggers std %f28, [%o1 + 0x60] 388*293c7cd5SEric Biggers std %f30, [%o1 + 0x68] 389*293c7cd5SEric Biggers std %f32, [%o1 + 0x70] 390*293c7cd5SEric Biggers std %f34, [%o1 + 0x78] 391*293c7cd5SEric Biggers std %f36, [%o1 + 0x80] 392*293c7cd5SEric Biggers std %f38, [%o1 + 0x88] 393*293c7cd5SEric Biggers std %f40, [%o1 + 0x90] 394*293c7cd5SEric Biggers std %f42, [%o1 + 0x98] 395*293c7cd5SEric Biggers80: 396*293c7cd5SEric Biggers retl 397*293c7cd5SEric Biggers VISExit 398*293c7cd5SEric BiggersENDPROC(aes_sparc64_key_expand) 399*293c7cd5SEric Biggers 400*293c7cd5SEric Biggers .align 32 401*293c7cd5SEric BiggersENTRY(aes_sparc64_encrypt_128) 402*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output */ 403*293c7cd5SEric Biggers VISEntry 404*293c7cd5SEric Biggers ld [%o1 + 0x00], %f4 405*293c7cd5SEric Biggers ld [%o1 + 0x04], %f5 406*293c7cd5SEric Biggers ld [%o1 + 0x08], %f6 407*293c7cd5SEric Biggers ld [%o1 + 0x0c], %f7 408*293c7cd5SEric Biggers ldd [%o0 + 0x00], %f8 409*293c7cd5SEric Biggers ldd [%o0 + 0x08], %f10 410*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f12 411*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f14 412*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f16 413*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f18 414*293c7cd5SEric Biggers ldd [%o0 + 0x30], %f20 415*293c7cd5SEric Biggers ldd [%o0 + 0x38], %f22 416*293c7cd5SEric Biggers ldd [%o0 + 0x40], %f24 417*293c7cd5SEric Biggers ldd [%o0 + 0x48], %f26 418*293c7cd5SEric Biggers ldd [%o0 + 0x50], %f28 419*293c7cd5SEric Biggers ldd [%o0 + 0x58], %f30 420*293c7cd5SEric Biggers ldd [%o0 + 0x60], %f32 421*293c7cd5SEric Biggers ldd [%o0 + 0x68], %f34 422*293c7cd5SEric Biggers ldd [%o0 + 0x70], %f36 423*293c7cd5SEric Biggers ldd [%o0 + 0x78], %f38 424*293c7cd5SEric Biggers ldd [%o0 + 0x80], %f40 425*293c7cd5SEric Biggers ldd [%o0 + 0x88], %f42 426*293c7cd5SEric Biggers ldd [%o0 + 0x90], %f44 427*293c7cd5SEric Biggers ldd [%o0 + 0x98], %f46 428*293c7cd5SEric Biggers ldd [%o0 + 0xa0], %f48 429*293c7cd5SEric Biggers ldd [%o0 + 0xa8], %f50 430*293c7cd5SEric Biggers fxor %f8, %f4, %f4 431*293c7cd5SEric Biggers fxor %f10, %f6, %f6 432*293c7cd5SEric Biggers ENCRYPT_128(12, 4, 6, 0, 2) 433*293c7cd5SEric Biggers st %f4, [%o2 + 0x00] 434*293c7cd5SEric Biggers st %f5, [%o2 + 0x04] 435*293c7cd5SEric Biggers st %f6, [%o2 + 0x08] 436*293c7cd5SEric Biggers st %f7, [%o2 + 0x0c] 437*293c7cd5SEric Biggers retl 438*293c7cd5SEric Biggers VISExit 439*293c7cd5SEric BiggersENDPROC(aes_sparc64_encrypt_128) 440*293c7cd5SEric Biggers 441*293c7cd5SEric Biggers .align 32 442*293c7cd5SEric BiggersENTRY(aes_sparc64_encrypt_192) 443*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output */ 444*293c7cd5SEric Biggers VISEntry 445*293c7cd5SEric Biggers ld [%o1 + 0x00], %f4 446*293c7cd5SEric Biggers ld [%o1 + 0x04], %f5 447*293c7cd5SEric Biggers ld [%o1 + 0x08], %f6 448*293c7cd5SEric Biggers ld [%o1 + 0x0c], %f7 449*293c7cd5SEric Biggers 450*293c7cd5SEric Biggers ldd [%o0 + 0x00], %f8 451*293c7cd5SEric Biggers ldd [%o0 + 0x08], %f10 452*293c7cd5SEric Biggers 453*293c7cd5SEric Biggers fxor %f8, %f4, %f4 454*293c7cd5SEric Biggers fxor %f10, %f6, %f6 455*293c7cd5SEric Biggers 456*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f8 457*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f10 458*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f12 459*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f14 460*293c7cd5SEric Biggers add %o0, 0x20, %o0 461*293c7cd5SEric Biggers 462*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2) 463*293c7cd5SEric Biggers 464*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f12 465*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f14 466*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f16 467*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f18 468*293c7cd5SEric Biggers ldd [%o0 + 0x30], %f20 469*293c7cd5SEric Biggers ldd [%o0 + 0x38], %f22 470*293c7cd5SEric Biggers ldd [%o0 + 0x40], %f24 471*293c7cd5SEric Biggers ldd [%o0 + 0x48], %f26 472*293c7cd5SEric Biggers ldd [%o0 + 0x50], %f28 473*293c7cd5SEric Biggers ldd [%o0 + 0x58], %f30 474*293c7cd5SEric Biggers ldd [%o0 + 0x60], %f32 475*293c7cd5SEric Biggers ldd [%o0 + 0x68], %f34 476*293c7cd5SEric Biggers ldd [%o0 + 0x70], %f36 477*293c7cd5SEric Biggers ldd [%o0 + 0x78], %f38 478*293c7cd5SEric Biggers ldd [%o0 + 0x80], %f40 479*293c7cd5SEric Biggers ldd [%o0 + 0x88], %f42 480*293c7cd5SEric Biggers ldd [%o0 + 0x90], %f44 481*293c7cd5SEric Biggers ldd [%o0 + 0x98], %f46 482*293c7cd5SEric Biggers ldd [%o0 + 0xa0], %f48 483*293c7cd5SEric Biggers ldd [%o0 + 0xa8], %f50 484*293c7cd5SEric Biggers 485*293c7cd5SEric Biggers 486*293c7cd5SEric Biggers ENCRYPT_128(12, 4, 6, 0, 2) 487*293c7cd5SEric Biggers 488*293c7cd5SEric Biggers st %f4, [%o2 + 0x00] 489*293c7cd5SEric Biggers st %f5, [%o2 + 0x04] 490*293c7cd5SEric Biggers st %f6, [%o2 + 0x08] 491*293c7cd5SEric Biggers st %f7, [%o2 + 0x0c] 492*293c7cd5SEric Biggers 493*293c7cd5SEric Biggers retl 494*293c7cd5SEric Biggers VISExit 495*293c7cd5SEric BiggersENDPROC(aes_sparc64_encrypt_192) 496*293c7cd5SEric Biggers 497*293c7cd5SEric Biggers .align 32 498*293c7cd5SEric BiggersENTRY(aes_sparc64_encrypt_256) 499*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output */ 500*293c7cd5SEric Biggers VISEntry 501*293c7cd5SEric Biggers ld [%o1 + 0x00], %f4 502*293c7cd5SEric Biggers ld [%o1 + 0x04], %f5 503*293c7cd5SEric Biggers ld [%o1 + 0x08], %f6 504*293c7cd5SEric Biggers ld [%o1 + 0x0c], %f7 505*293c7cd5SEric Biggers 506*293c7cd5SEric Biggers ldd [%o0 + 0x00], %f8 507*293c7cd5SEric Biggers ldd [%o0 + 0x08], %f10 508*293c7cd5SEric Biggers 509*293c7cd5SEric Biggers fxor %f8, %f4, %f4 510*293c7cd5SEric Biggers fxor %f10, %f6, %f6 511*293c7cd5SEric Biggers 512*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f8 513*293c7cd5SEric Biggers 514*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f10 515*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f12 516*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f14 517*293c7cd5SEric Biggers add %o0, 0x20, %o0 518*293c7cd5SEric Biggers 519*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2) 520*293c7cd5SEric Biggers 521*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f8 522*293c7cd5SEric Biggers 523*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f10 524*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f12 525*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f14 526*293c7cd5SEric Biggers add %o0, 0x20, %o0 527*293c7cd5SEric Biggers 528*293c7cd5SEric Biggers ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2) 529*293c7cd5SEric Biggers 530*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f12 531*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f14 532*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f16 533*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f18 534*293c7cd5SEric Biggers ldd [%o0 + 0x30], %f20 535*293c7cd5SEric Biggers ldd [%o0 + 0x38], %f22 536*293c7cd5SEric Biggers ldd [%o0 + 0x40], %f24 537*293c7cd5SEric Biggers ldd [%o0 + 0x48], %f26 538*293c7cd5SEric Biggers ldd [%o0 + 0x50], %f28 539*293c7cd5SEric Biggers ldd [%o0 + 0x58], %f30 540*293c7cd5SEric Biggers ldd [%o0 + 0x60], %f32 541*293c7cd5SEric Biggers ldd [%o0 + 0x68], %f34 542*293c7cd5SEric Biggers ldd [%o0 + 0x70], %f36 543*293c7cd5SEric Biggers ldd [%o0 + 0x78], %f38 544*293c7cd5SEric Biggers ldd [%o0 + 0x80], %f40 545*293c7cd5SEric Biggers ldd [%o0 + 0x88], %f42 546*293c7cd5SEric Biggers ldd [%o0 + 0x90], %f44 547*293c7cd5SEric Biggers ldd [%o0 + 0x98], %f46 548*293c7cd5SEric Biggers ldd [%o0 + 0xa0], %f48 549*293c7cd5SEric Biggers ldd [%o0 + 0xa8], %f50 550*293c7cd5SEric Biggers 551*293c7cd5SEric Biggers ENCRYPT_128(12, 4, 6, 0, 2) 552*293c7cd5SEric Biggers 553*293c7cd5SEric Biggers st %f4, [%o2 + 0x00] 554*293c7cd5SEric Biggers st %f5, [%o2 + 0x04] 555*293c7cd5SEric Biggers st %f6, [%o2 + 0x08] 556*293c7cd5SEric Biggers st %f7, [%o2 + 0x0c] 557*293c7cd5SEric Biggers 558*293c7cd5SEric Biggers retl 559*293c7cd5SEric Biggers VISExit 560*293c7cd5SEric BiggersENDPROC(aes_sparc64_encrypt_256) 561*293c7cd5SEric Biggers 562*293c7cd5SEric Biggers .align 32 563*293c7cd5SEric BiggersENTRY(aes_sparc64_decrypt_128) 564*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output */ 565*293c7cd5SEric Biggers VISEntry 566*293c7cd5SEric Biggers ld [%o1 + 0x00], %f4 567*293c7cd5SEric Biggers ld [%o1 + 0x04], %f5 568*293c7cd5SEric Biggers ld [%o1 + 0x08], %f6 569*293c7cd5SEric Biggers ld [%o1 + 0x0c], %f7 570*293c7cd5SEric Biggers ldd [%o0 + 0xa0], %f8 571*293c7cd5SEric Biggers ldd [%o0 + 0xa8], %f10 572*293c7cd5SEric Biggers ldd [%o0 + 0x98], %f12 573*293c7cd5SEric Biggers ldd [%o0 + 0x90], %f14 574*293c7cd5SEric Biggers ldd [%o0 + 0x88], %f16 575*293c7cd5SEric Biggers ldd [%o0 + 0x80], %f18 576*293c7cd5SEric Biggers ldd [%o0 + 0x78], %f20 577*293c7cd5SEric Biggers ldd [%o0 + 0x70], %f22 578*293c7cd5SEric Biggers ldd [%o0 + 0x68], %f24 579*293c7cd5SEric Biggers ldd [%o0 + 0x60], %f26 580*293c7cd5SEric Biggers ldd [%o0 + 0x58], %f28 581*293c7cd5SEric Biggers ldd [%o0 + 0x50], %f30 582*293c7cd5SEric Biggers ldd [%o0 + 0x48], %f32 583*293c7cd5SEric Biggers ldd [%o0 + 0x40], %f34 584*293c7cd5SEric Biggers ldd [%o0 + 0x38], %f36 585*293c7cd5SEric Biggers ldd [%o0 + 0x30], %f38 586*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f40 587*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f42 588*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f44 589*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f46 590*293c7cd5SEric Biggers ldd [%o0 + 0x08], %f48 591*293c7cd5SEric Biggers ldd [%o0 + 0x00], %f50 592*293c7cd5SEric Biggers fxor %f8, %f4, %f4 593*293c7cd5SEric Biggers fxor %f10, %f6, %f6 594*293c7cd5SEric Biggers DECRYPT_128(12, 4, 6, 0, 2) 595*293c7cd5SEric Biggers st %f4, [%o2 + 0x00] 596*293c7cd5SEric Biggers st %f5, [%o2 + 0x04] 597*293c7cd5SEric Biggers st %f6, [%o2 + 0x08] 598*293c7cd5SEric Biggers st %f7, [%o2 + 0x0c] 599*293c7cd5SEric Biggers retl 600*293c7cd5SEric Biggers VISExit 601*293c7cd5SEric BiggersENDPROC(aes_sparc64_decrypt_128) 602*293c7cd5SEric Biggers 603*293c7cd5SEric Biggers .align 32 604*293c7cd5SEric BiggersENTRY(aes_sparc64_decrypt_192) 605*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output */ 606*293c7cd5SEric Biggers VISEntry 607*293c7cd5SEric Biggers ld [%o1 + 0x00], %f4 608*293c7cd5SEric Biggers ld [%o1 + 0x04], %f5 609*293c7cd5SEric Biggers ld [%o1 + 0x08], %f6 610*293c7cd5SEric Biggers ld [%o1 + 0x0c], %f7 611*293c7cd5SEric Biggers ldd [%o0 + 0xc0], %f8 612*293c7cd5SEric Biggers ldd [%o0 + 0xc8], %f10 613*293c7cd5SEric Biggers ldd [%o0 + 0xb8], %f12 614*293c7cd5SEric Biggers ldd [%o0 + 0xb0], %f14 615*293c7cd5SEric Biggers ldd [%o0 + 0xa8], %f16 616*293c7cd5SEric Biggers ldd [%o0 + 0xa0], %f18 617*293c7cd5SEric Biggers fxor %f8, %f4, %f4 618*293c7cd5SEric Biggers fxor %f10, %f6, %f6 619*293c7cd5SEric Biggers ldd [%o0 + 0x98], %f20 620*293c7cd5SEric Biggers ldd [%o0 + 0x90], %f22 621*293c7cd5SEric Biggers ldd [%o0 + 0x88], %f24 622*293c7cd5SEric Biggers ldd [%o0 + 0x80], %f26 623*293c7cd5SEric Biggers DECRYPT_TWO_ROUNDS(12, 4, 6, 0, 2) 624*293c7cd5SEric Biggers ldd [%o0 + 0x78], %f28 625*293c7cd5SEric Biggers ldd [%o0 + 0x70], %f30 626*293c7cd5SEric Biggers ldd [%o0 + 0x68], %f32 627*293c7cd5SEric Biggers ldd [%o0 + 0x60], %f34 628*293c7cd5SEric Biggers ldd [%o0 + 0x58], %f36 629*293c7cd5SEric Biggers ldd [%o0 + 0x50], %f38 630*293c7cd5SEric Biggers ldd [%o0 + 0x48], %f40 631*293c7cd5SEric Biggers ldd [%o0 + 0x40], %f42 632*293c7cd5SEric Biggers ldd [%o0 + 0x38], %f44 633*293c7cd5SEric Biggers ldd [%o0 + 0x30], %f46 634*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f48 635*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f50 636*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f52 637*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f54 638*293c7cd5SEric Biggers ldd [%o0 + 0x08], %f56 639*293c7cd5SEric Biggers ldd [%o0 + 0x00], %f58 640*293c7cd5SEric Biggers DECRYPT_128(20, 4, 6, 0, 2) 641*293c7cd5SEric Biggers st %f4, [%o2 + 0x00] 642*293c7cd5SEric Biggers st %f5, [%o2 + 0x04] 643*293c7cd5SEric Biggers st %f6, [%o2 + 0x08] 644*293c7cd5SEric Biggers st %f7, [%o2 + 0x0c] 645*293c7cd5SEric Biggers retl 646*293c7cd5SEric Biggers VISExit 647*293c7cd5SEric BiggersENDPROC(aes_sparc64_decrypt_192) 648*293c7cd5SEric Biggers 649*293c7cd5SEric Biggers .align 32 650*293c7cd5SEric BiggersENTRY(aes_sparc64_decrypt_256) 651*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output */ 652*293c7cd5SEric Biggers VISEntry 653*293c7cd5SEric Biggers ld [%o1 + 0x00], %f4 654*293c7cd5SEric Biggers ld [%o1 + 0x04], %f5 655*293c7cd5SEric Biggers ld [%o1 + 0x08], %f6 656*293c7cd5SEric Biggers ld [%o1 + 0x0c], %f7 657*293c7cd5SEric Biggers ldd [%o0 + 0xe0], %f8 658*293c7cd5SEric Biggers ldd [%o0 + 0xe8], %f10 659*293c7cd5SEric Biggers ldd [%o0 + 0xd8], %f12 660*293c7cd5SEric Biggers ldd [%o0 + 0xd0], %f14 661*293c7cd5SEric Biggers ldd [%o0 + 0xc8], %f16 662*293c7cd5SEric Biggers fxor %f8, %f4, %f4 663*293c7cd5SEric Biggers ldd [%o0 + 0xc0], %f18 664*293c7cd5SEric Biggers fxor %f10, %f6, %f6 665*293c7cd5SEric Biggers ldd [%o0 + 0xb8], %f20 666*293c7cd5SEric Biggers AES_DROUND23(12, 4, 6, 2) 667*293c7cd5SEric Biggers ldd [%o0 + 0xb0], %f22 668*293c7cd5SEric Biggers AES_DROUND01(14, 4, 6, 0) 669*293c7cd5SEric Biggers ldd [%o0 + 0xa8], %f24 670*293c7cd5SEric Biggers AES_DROUND23(16, 0, 2, 6) 671*293c7cd5SEric Biggers ldd [%o0 + 0xa0], %f26 672*293c7cd5SEric Biggers AES_DROUND01(18, 0, 2, 4) 673*293c7cd5SEric Biggers ldd [%o0 + 0x98], %f12 674*293c7cd5SEric Biggers AES_DROUND23(20, 4, 6, 2) 675*293c7cd5SEric Biggers ldd [%o0 + 0x90], %f14 676*293c7cd5SEric Biggers AES_DROUND01(22, 4, 6, 0) 677*293c7cd5SEric Biggers ldd [%o0 + 0x88], %f16 678*293c7cd5SEric Biggers AES_DROUND23(24, 0, 2, 6) 679*293c7cd5SEric Biggers ldd [%o0 + 0x80], %f18 680*293c7cd5SEric Biggers AES_DROUND01(26, 0, 2, 4) 681*293c7cd5SEric Biggers ldd [%o0 + 0x78], %f20 682*293c7cd5SEric Biggers AES_DROUND23(12, 4, 6, 2) 683*293c7cd5SEric Biggers ldd [%o0 + 0x70], %f22 684*293c7cd5SEric Biggers AES_DROUND01(14, 4, 6, 0) 685*293c7cd5SEric Biggers ldd [%o0 + 0x68], %f24 686*293c7cd5SEric Biggers AES_DROUND23(16, 0, 2, 6) 687*293c7cd5SEric Biggers ldd [%o0 + 0x60], %f26 688*293c7cd5SEric Biggers AES_DROUND01(18, 0, 2, 4) 689*293c7cd5SEric Biggers ldd [%o0 + 0x58], %f28 690*293c7cd5SEric Biggers AES_DROUND23(20, 4, 6, 2) 691*293c7cd5SEric Biggers ldd [%o0 + 0x50], %f30 692*293c7cd5SEric Biggers AES_DROUND01(22, 4, 6, 0) 693*293c7cd5SEric Biggers ldd [%o0 + 0x48], %f32 694*293c7cd5SEric Biggers AES_DROUND23(24, 0, 2, 6) 695*293c7cd5SEric Biggers ldd [%o0 + 0x40], %f34 696*293c7cd5SEric Biggers AES_DROUND01(26, 0, 2, 4) 697*293c7cd5SEric Biggers ldd [%o0 + 0x38], %f36 698*293c7cd5SEric Biggers AES_DROUND23(28, 4, 6, 2) 699*293c7cd5SEric Biggers ldd [%o0 + 0x30], %f38 700*293c7cd5SEric Biggers AES_DROUND01(30, 4, 6, 0) 701*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f40 702*293c7cd5SEric Biggers AES_DROUND23(32, 0, 2, 6) 703*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f42 704*293c7cd5SEric Biggers AES_DROUND01(34, 0, 2, 4) 705*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f44 706*293c7cd5SEric Biggers AES_DROUND23(36, 4, 6, 2) 707*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f46 708*293c7cd5SEric Biggers AES_DROUND01(38, 4, 6, 0) 709*293c7cd5SEric Biggers ldd [%o0 + 0x08], %f48 710*293c7cd5SEric Biggers AES_DROUND23(40, 0, 2, 6) 711*293c7cd5SEric Biggers ldd [%o0 + 0x00], %f50 712*293c7cd5SEric Biggers AES_DROUND01(42, 0, 2, 4) 713*293c7cd5SEric Biggers AES_DROUND23(44, 4, 6, 2) 714*293c7cd5SEric Biggers AES_DROUND01(46, 4, 6, 0) 715*293c7cd5SEric Biggers AES_DROUND23_L(48, 0, 2, 6) 716*293c7cd5SEric Biggers AES_DROUND01_L(50, 0, 2, 4) 717*293c7cd5SEric Biggers st %f4, [%o2 + 0x00] 718*293c7cd5SEric Biggers st %f5, [%o2 + 0x04] 719*293c7cd5SEric Biggers st %f6, [%o2 + 0x08] 720*293c7cd5SEric Biggers st %f7, [%o2 + 0x0c] 721*293c7cd5SEric Biggers retl 722*293c7cd5SEric Biggers VISExit 723*293c7cd5SEric BiggersENDPROC(aes_sparc64_decrypt_256) 724*293c7cd5SEric Biggers 725*293c7cd5SEric Biggers .align 32 726*293c7cd5SEric BiggersENTRY(aes_sparc64_load_encrypt_keys_128) 727*293c7cd5SEric Biggers /* %o0=key */ 728*293c7cd5SEric Biggers VISEntry 729*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f8 730*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f10 731*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f12 732*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f14 733*293c7cd5SEric Biggers ldd [%o0 + 0x30], %f16 734*293c7cd5SEric Biggers ldd [%o0 + 0x38], %f18 735*293c7cd5SEric Biggers ldd [%o0 + 0x40], %f20 736*293c7cd5SEric Biggers ldd [%o0 + 0x48], %f22 737*293c7cd5SEric Biggers ldd [%o0 + 0x50], %f24 738*293c7cd5SEric Biggers ldd [%o0 + 0x58], %f26 739*293c7cd5SEric Biggers ldd [%o0 + 0x60], %f28 740*293c7cd5SEric Biggers ldd [%o0 + 0x68], %f30 741*293c7cd5SEric Biggers ldd [%o0 + 0x70], %f32 742*293c7cd5SEric Biggers ldd [%o0 + 0x78], %f34 743*293c7cd5SEric Biggers ldd [%o0 + 0x80], %f36 744*293c7cd5SEric Biggers ldd [%o0 + 0x88], %f38 745*293c7cd5SEric Biggers ldd [%o0 + 0x90], %f40 746*293c7cd5SEric Biggers ldd [%o0 + 0x98], %f42 747*293c7cd5SEric Biggers ldd [%o0 + 0xa0], %f44 748*293c7cd5SEric Biggers retl 749*293c7cd5SEric Biggers ldd [%o0 + 0xa8], %f46 750*293c7cd5SEric BiggersENDPROC(aes_sparc64_load_encrypt_keys_128) 751*293c7cd5SEric Biggers 752*293c7cd5SEric Biggers .align 32 753*293c7cd5SEric BiggersENTRY(aes_sparc64_load_encrypt_keys_192) 754*293c7cd5SEric Biggers /* %o0=key */ 755*293c7cd5SEric Biggers VISEntry 756*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f8 757*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f10 758*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f12 759*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f14 760*293c7cd5SEric Biggers ldd [%o0 + 0x30], %f16 761*293c7cd5SEric Biggers ldd [%o0 + 0x38], %f18 762*293c7cd5SEric Biggers ldd [%o0 + 0x40], %f20 763*293c7cd5SEric Biggers ldd [%o0 + 0x48], %f22 764*293c7cd5SEric Biggers ldd [%o0 + 0x50], %f24 765*293c7cd5SEric Biggers ldd [%o0 + 0x58], %f26 766*293c7cd5SEric Biggers ldd [%o0 + 0x60], %f28 767*293c7cd5SEric Biggers ldd [%o0 + 0x68], %f30 768*293c7cd5SEric Biggers ldd [%o0 + 0x70], %f32 769*293c7cd5SEric Biggers ldd [%o0 + 0x78], %f34 770*293c7cd5SEric Biggers ldd [%o0 + 0x80], %f36 771*293c7cd5SEric Biggers ldd [%o0 + 0x88], %f38 772*293c7cd5SEric Biggers ldd [%o0 + 0x90], %f40 773*293c7cd5SEric Biggers ldd [%o0 + 0x98], %f42 774*293c7cd5SEric Biggers ldd [%o0 + 0xa0], %f44 775*293c7cd5SEric Biggers ldd [%o0 + 0xa8], %f46 776*293c7cd5SEric Biggers ldd [%o0 + 0xb0], %f48 777*293c7cd5SEric Biggers ldd [%o0 + 0xb8], %f50 778*293c7cd5SEric Biggers ldd [%o0 + 0xc0], %f52 779*293c7cd5SEric Biggers retl 780*293c7cd5SEric Biggers ldd [%o0 + 0xc8], %f54 781*293c7cd5SEric BiggersENDPROC(aes_sparc64_load_encrypt_keys_192) 782*293c7cd5SEric Biggers 783*293c7cd5SEric Biggers .align 32 784*293c7cd5SEric BiggersENTRY(aes_sparc64_load_encrypt_keys_256) 785*293c7cd5SEric Biggers /* %o0=key */ 786*293c7cd5SEric Biggers VISEntry 787*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f8 788*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f10 789*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f12 790*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f14 791*293c7cd5SEric Biggers ldd [%o0 + 0x30], %f16 792*293c7cd5SEric Biggers ldd [%o0 + 0x38], %f18 793*293c7cd5SEric Biggers ldd [%o0 + 0x40], %f20 794*293c7cd5SEric Biggers ldd [%o0 + 0x48], %f22 795*293c7cd5SEric Biggers ldd [%o0 + 0x50], %f24 796*293c7cd5SEric Biggers ldd [%o0 + 0x58], %f26 797*293c7cd5SEric Biggers ldd [%o0 + 0x60], %f28 798*293c7cd5SEric Biggers ldd [%o0 + 0x68], %f30 799*293c7cd5SEric Biggers ldd [%o0 + 0x70], %f32 800*293c7cd5SEric Biggers ldd [%o0 + 0x78], %f34 801*293c7cd5SEric Biggers ldd [%o0 + 0x80], %f36 802*293c7cd5SEric Biggers ldd [%o0 + 0x88], %f38 803*293c7cd5SEric Biggers ldd [%o0 + 0x90], %f40 804*293c7cd5SEric Biggers ldd [%o0 + 0x98], %f42 805*293c7cd5SEric Biggers ldd [%o0 + 0xa0], %f44 806*293c7cd5SEric Biggers ldd [%o0 + 0xa8], %f46 807*293c7cd5SEric Biggers ldd [%o0 + 0xb0], %f48 808*293c7cd5SEric Biggers ldd [%o0 + 0xb8], %f50 809*293c7cd5SEric Biggers ldd [%o0 + 0xc0], %f52 810*293c7cd5SEric Biggers ldd [%o0 + 0xc8], %f54 811*293c7cd5SEric Biggers ldd [%o0 + 0xd0], %f56 812*293c7cd5SEric Biggers ldd [%o0 + 0xd8], %f58 813*293c7cd5SEric Biggers ldd [%o0 + 0xe0], %f60 814*293c7cd5SEric Biggers retl 815*293c7cd5SEric Biggers ldd [%o0 + 0xe8], %f62 816*293c7cd5SEric BiggersENDPROC(aes_sparc64_load_encrypt_keys_256) 817*293c7cd5SEric Biggers 818*293c7cd5SEric Biggers .align 32 819*293c7cd5SEric BiggersENTRY(aes_sparc64_load_decrypt_keys_128) 820*293c7cd5SEric Biggers /* %o0=key */ 821*293c7cd5SEric Biggers VISEntry 822*293c7cd5SEric Biggers ldd [%o0 + 0x98], %f8 823*293c7cd5SEric Biggers ldd [%o0 + 0x90], %f10 824*293c7cd5SEric Biggers ldd [%o0 + 0x88], %f12 825*293c7cd5SEric Biggers ldd [%o0 + 0x80], %f14 826*293c7cd5SEric Biggers ldd [%o0 + 0x78], %f16 827*293c7cd5SEric Biggers ldd [%o0 + 0x70], %f18 828*293c7cd5SEric Biggers ldd [%o0 + 0x68], %f20 829*293c7cd5SEric Biggers ldd [%o0 + 0x60], %f22 830*293c7cd5SEric Biggers ldd [%o0 + 0x58], %f24 831*293c7cd5SEric Biggers ldd [%o0 + 0x50], %f26 832*293c7cd5SEric Biggers ldd [%o0 + 0x48], %f28 833*293c7cd5SEric Biggers ldd [%o0 + 0x40], %f30 834*293c7cd5SEric Biggers ldd [%o0 + 0x38], %f32 835*293c7cd5SEric Biggers ldd [%o0 + 0x30], %f34 836*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f36 837*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f38 838*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f40 839*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f42 840*293c7cd5SEric Biggers ldd [%o0 + 0x08], %f44 841*293c7cd5SEric Biggers retl 842*293c7cd5SEric Biggers ldd [%o0 + 0x00], %f46 843*293c7cd5SEric BiggersENDPROC(aes_sparc64_load_decrypt_keys_128) 844*293c7cd5SEric Biggers 845*293c7cd5SEric Biggers .align 32 846*293c7cd5SEric BiggersENTRY(aes_sparc64_load_decrypt_keys_192) 847*293c7cd5SEric Biggers /* %o0=key */ 848*293c7cd5SEric Biggers VISEntry 849*293c7cd5SEric Biggers ldd [%o0 + 0xb8], %f8 850*293c7cd5SEric Biggers ldd [%o0 + 0xb0], %f10 851*293c7cd5SEric Biggers ldd [%o0 + 0xa8], %f12 852*293c7cd5SEric Biggers ldd [%o0 + 0xa0], %f14 853*293c7cd5SEric Biggers ldd [%o0 + 0x98], %f16 854*293c7cd5SEric Biggers ldd [%o0 + 0x90], %f18 855*293c7cd5SEric Biggers ldd [%o0 + 0x88], %f20 856*293c7cd5SEric Biggers ldd [%o0 + 0x80], %f22 857*293c7cd5SEric Biggers ldd [%o0 + 0x78], %f24 858*293c7cd5SEric Biggers ldd [%o0 + 0x70], %f26 859*293c7cd5SEric Biggers ldd [%o0 + 0x68], %f28 860*293c7cd5SEric Biggers ldd [%o0 + 0x60], %f30 861*293c7cd5SEric Biggers ldd [%o0 + 0x58], %f32 862*293c7cd5SEric Biggers ldd [%o0 + 0x50], %f34 863*293c7cd5SEric Biggers ldd [%o0 + 0x48], %f36 864*293c7cd5SEric Biggers ldd [%o0 + 0x40], %f38 865*293c7cd5SEric Biggers ldd [%o0 + 0x38], %f40 866*293c7cd5SEric Biggers ldd [%o0 + 0x30], %f42 867*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f44 868*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f46 869*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f48 870*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f50 871*293c7cd5SEric Biggers ldd [%o0 + 0x08], %f52 872*293c7cd5SEric Biggers retl 873*293c7cd5SEric Biggers ldd [%o0 + 0x00], %f54 874*293c7cd5SEric BiggersENDPROC(aes_sparc64_load_decrypt_keys_192) 875*293c7cd5SEric Biggers 876*293c7cd5SEric Biggers .align 32 877*293c7cd5SEric BiggersENTRY(aes_sparc64_load_decrypt_keys_256) 878*293c7cd5SEric Biggers /* %o0=key */ 879*293c7cd5SEric Biggers VISEntry 880*293c7cd5SEric Biggers ldd [%o0 + 0xd8], %f8 881*293c7cd5SEric Biggers ldd [%o0 + 0xd0], %f10 882*293c7cd5SEric Biggers ldd [%o0 + 0xc8], %f12 883*293c7cd5SEric Biggers ldd [%o0 + 0xc0], %f14 884*293c7cd5SEric Biggers ldd [%o0 + 0xb8], %f16 885*293c7cd5SEric Biggers ldd [%o0 + 0xb0], %f18 886*293c7cd5SEric Biggers ldd [%o0 + 0xa8], %f20 887*293c7cd5SEric Biggers ldd [%o0 + 0xa0], %f22 888*293c7cd5SEric Biggers ldd [%o0 + 0x98], %f24 889*293c7cd5SEric Biggers ldd [%o0 + 0x90], %f26 890*293c7cd5SEric Biggers ldd [%o0 + 0x88], %f28 891*293c7cd5SEric Biggers ldd [%o0 + 0x80], %f30 892*293c7cd5SEric Biggers ldd [%o0 + 0x78], %f32 893*293c7cd5SEric Biggers ldd [%o0 + 0x70], %f34 894*293c7cd5SEric Biggers ldd [%o0 + 0x68], %f36 895*293c7cd5SEric Biggers ldd [%o0 + 0x60], %f38 896*293c7cd5SEric Biggers ldd [%o0 + 0x58], %f40 897*293c7cd5SEric Biggers ldd [%o0 + 0x50], %f42 898*293c7cd5SEric Biggers ldd [%o0 + 0x48], %f44 899*293c7cd5SEric Biggers ldd [%o0 + 0x40], %f46 900*293c7cd5SEric Biggers ldd [%o0 + 0x38], %f48 901*293c7cd5SEric Biggers ldd [%o0 + 0x30], %f50 902*293c7cd5SEric Biggers ldd [%o0 + 0x28], %f52 903*293c7cd5SEric Biggers ldd [%o0 + 0x20], %f54 904*293c7cd5SEric Biggers ldd [%o0 + 0x18], %f56 905*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f58 906*293c7cd5SEric Biggers ldd [%o0 + 0x08], %f60 907*293c7cd5SEric Biggers retl 908*293c7cd5SEric Biggers ldd [%o0 + 0x00], %f62 909*293c7cd5SEric BiggersENDPROC(aes_sparc64_load_decrypt_keys_256) 910*293c7cd5SEric Biggers 911*293c7cd5SEric Biggers .align 32 912*293c7cd5SEric BiggersENTRY(aes_sparc64_ecb_encrypt_128) 913*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output, %o3=len */ 914*293c7cd5SEric Biggers ldx [%o0 + 0x00], %g1 915*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 916*293c7cd5SEric Biggers be 10f 917*293c7cd5SEric Biggers ldx [%o0 + 0x08], %g2 918*293c7cd5SEric Biggers1: ldx [%o1 + 0x00], %g3 919*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 920*293c7cd5SEric Biggers ldx [%o1 + 0x10], %o4 921*293c7cd5SEric Biggers ldx [%o1 + 0x18], %o5 922*293c7cd5SEric Biggers xor %g1, %g3, %g3 923*293c7cd5SEric Biggers xor %g2, %g7, %g7 924*293c7cd5SEric Biggers MOVXTOD_G3_F4 925*293c7cd5SEric Biggers MOVXTOD_G7_F6 926*293c7cd5SEric Biggers xor %g1, %o4, %g3 927*293c7cd5SEric Biggers xor %g2, %o5, %g7 928*293c7cd5SEric Biggers MOVXTOD_G3_F60 929*293c7cd5SEric Biggers MOVXTOD_G7_F62 930*293c7cd5SEric Biggers ENCRYPT_128_2(8, 4, 6, 60, 62, 0, 2, 56, 58) 931*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 932*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 933*293c7cd5SEric Biggers std %f60, [%o2 + 0x10] 934*293c7cd5SEric Biggers std %f62, [%o2 + 0x18] 935*293c7cd5SEric Biggers sub %o3, 0x20, %o3 936*293c7cd5SEric Biggers add %o1, 0x20, %o1 937*293c7cd5SEric Biggers brgz %o3, 1b 938*293c7cd5SEric Biggers add %o2, 0x20, %o2 939*293c7cd5SEric Biggers brlz,pt %o3, 11f 940*293c7cd5SEric Biggers nop 941*293c7cd5SEric Biggers10: ldx [%o1 + 0x00], %g3 942*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 943*293c7cd5SEric Biggers xor %g1, %g3, %g3 944*293c7cd5SEric Biggers xor %g2, %g7, %g7 945*293c7cd5SEric Biggers MOVXTOD_G3_F4 946*293c7cd5SEric Biggers MOVXTOD_G7_F6 947*293c7cd5SEric Biggers ENCRYPT_128(8, 4, 6, 0, 2) 948*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 949*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 950*293c7cd5SEric Biggers11: retl 951*293c7cd5SEric Biggers nop 952*293c7cd5SEric BiggersENDPROC(aes_sparc64_ecb_encrypt_128) 953*293c7cd5SEric Biggers 954*293c7cd5SEric Biggers .align 32 955*293c7cd5SEric BiggersENTRY(aes_sparc64_ecb_encrypt_192) 956*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output, %o3=len */ 957*293c7cd5SEric Biggers ldx [%o0 + 0x00], %g1 958*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 959*293c7cd5SEric Biggers be 10f 960*293c7cd5SEric Biggers ldx [%o0 + 0x08], %g2 961*293c7cd5SEric Biggers1: ldx [%o1 + 0x00], %g3 962*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 963*293c7cd5SEric Biggers ldx [%o1 + 0x10], %o4 964*293c7cd5SEric Biggers ldx [%o1 + 0x18], %o5 965*293c7cd5SEric Biggers xor %g1, %g3, %g3 966*293c7cd5SEric Biggers xor %g2, %g7, %g7 967*293c7cd5SEric Biggers MOVXTOD_G3_F4 968*293c7cd5SEric Biggers MOVXTOD_G7_F6 969*293c7cd5SEric Biggers xor %g1, %o4, %g3 970*293c7cd5SEric Biggers xor %g2, %o5, %g7 971*293c7cd5SEric Biggers MOVXTOD_G3_F60 972*293c7cd5SEric Biggers MOVXTOD_G7_F62 973*293c7cd5SEric Biggers ENCRYPT_192_2(8, 4, 6, 60, 62, 0, 2, 56, 58) 974*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 975*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 976*293c7cd5SEric Biggers std %f60, [%o2 + 0x10] 977*293c7cd5SEric Biggers std %f62, [%o2 + 0x18] 978*293c7cd5SEric Biggers sub %o3, 0x20, %o3 979*293c7cd5SEric Biggers add %o1, 0x20, %o1 980*293c7cd5SEric Biggers brgz %o3, 1b 981*293c7cd5SEric Biggers add %o2, 0x20, %o2 982*293c7cd5SEric Biggers brlz,pt %o3, 11f 983*293c7cd5SEric Biggers nop 984*293c7cd5SEric Biggers10: ldx [%o1 + 0x00], %g3 985*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 986*293c7cd5SEric Biggers xor %g1, %g3, %g3 987*293c7cd5SEric Biggers xor %g2, %g7, %g7 988*293c7cd5SEric Biggers MOVXTOD_G3_F4 989*293c7cd5SEric Biggers MOVXTOD_G7_F6 990*293c7cd5SEric Biggers ENCRYPT_192(8, 4, 6, 0, 2) 991*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 992*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 993*293c7cd5SEric Biggers11: retl 994*293c7cd5SEric Biggers nop 995*293c7cd5SEric BiggersENDPROC(aes_sparc64_ecb_encrypt_192) 996*293c7cd5SEric Biggers 997*293c7cd5SEric Biggers .align 32 998*293c7cd5SEric BiggersENTRY(aes_sparc64_ecb_encrypt_256) 999*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output, %o3=len */ 1000*293c7cd5SEric Biggers ldx [%o0 + 0x00], %g1 1001*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 1002*293c7cd5SEric Biggers be 10f 1003*293c7cd5SEric Biggers ldx [%o0 + 0x08], %g2 1004*293c7cd5SEric Biggers1: ldx [%o1 + 0x00], %g3 1005*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 1006*293c7cd5SEric Biggers ldx [%o1 + 0x10], %o4 1007*293c7cd5SEric Biggers ldx [%o1 + 0x18], %o5 1008*293c7cd5SEric Biggers xor %g1, %g3, %g3 1009*293c7cd5SEric Biggers xor %g2, %g7, %g7 1010*293c7cd5SEric Biggers MOVXTOD_G3_F4 1011*293c7cd5SEric Biggers MOVXTOD_G7_F6 1012*293c7cd5SEric Biggers xor %g1, %o4, %g3 1013*293c7cd5SEric Biggers xor %g2, %o5, %g7 1014*293c7cd5SEric Biggers MOVXTOD_G3_F0 1015*293c7cd5SEric Biggers MOVXTOD_G7_F2 1016*293c7cd5SEric Biggers ENCRYPT_256_2(8, 4, 6, 0, 2) 1017*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1018*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1019*293c7cd5SEric Biggers std %f0, [%o2 + 0x10] 1020*293c7cd5SEric Biggers std %f2, [%o2 + 0x18] 1021*293c7cd5SEric Biggers sub %o3, 0x20, %o3 1022*293c7cd5SEric Biggers add %o1, 0x20, %o1 1023*293c7cd5SEric Biggers brgz %o3, 1b 1024*293c7cd5SEric Biggers add %o2, 0x20, %o2 1025*293c7cd5SEric Biggers brlz,pt %o3, 11f 1026*293c7cd5SEric Biggers nop 1027*293c7cd5SEric Biggers10: ldd [%o0 + 0xd0], %f56 1028*293c7cd5SEric Biggers ldd [%o0 + 0xd8], %f58 1029*293c7cd5SEric Biggers ldd [%o0 + 0xe0], %f60 1030*293c7cd5SEric Biggers ldd [%o0 + 0xe8], %f62 1031*293c7cd5SEric Biggers ldx [%o1 + 0x00], %g3 1032*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 1033*293c7cd5SEric Biggers xor %g1, %g3, %g3 1034*293c7cd5SEric Biggers xor %g2, %g7, %g7 1035*293c7cd5SEric Biggers MOVXTOD_G3_F4 1036*293c7cd5SEric Biggers MOVXTOD_G7_F6 1037*293c7cd5SEric Biggers ENCRYPT_256(8, 4, 6, 0, 2) 1038*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1039*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1040*293c7cd5SEric Biggers11: retl 1041*293c7cd5SEric Biggers nop 1042*293c7cd5SEric BiggersENDPROC(aes_sparc64_ecb_encrypt_256) 1043*293c7cd5SEric Biggers 1044*293c7cd5SEric Biggers .align 32 1045*293c7cd5SEric BiggersENTRY(aes_sparc64_ecb_decrypt_128) 1046*293c7cd5SEric Biggers /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */ 1047*293c7cd5SEric Biggers ldx [%o0 - 0x10], %g1 1048*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 1049*293c7cd5SEric Biggers be 10f 1050*293c7cd5SEric Biggers ldx [%o0 - 0x08], %g2 1051*293c7cd5SEric Biggers1: ldx [%o1 + 0x00], %g3 1052*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 1053*293c7cd5SEric Biggers ldx [%o1 + 0x10], %o4 1054*293c7cd5SEric Biggers ldx [%o1 + 0x18], %o5 1055*293c7cd5SEric Biggers xor %g1, %g3, %g3 1056*293c7cd5SEric Biggers xor %g2, %g7, %g7 1057*293c7cd5SEric Biggers MOVXTOD_G3_F4 1058*293c7cd5SEric Biggers MOVXTOD_G7_F6 1059*293c7cd5SEric Biggers xor %g1, %o4, %g3 1060*293c7cd5SEric Biggers xor %g2, %o5, %g7 1061*293c7cd5SEric Biggers MOVXTOD_G3_F60 1062*293c7cd5SEric Biggers MOVXTOD_G7_F62 1063*293c7cd5SEric Biggers DECRYPT_128_2(8, 4, 6, 60, 62, 0, 2, 56, 58) 1064*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1065*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1066*293c7cd5SEric Biggers std %f60, [%o2 + 0x10] 1067*293c7cd5SEric Biggers std %f62, [%o2 + 0x18] 1068*293c7cd5SEric Biggers sub %o3, 0x20, %o3 1069*293c7cd5SEric Biggers add %o1, 0x20, %o1 1070*293c7cd5SEric Biggers brgz,pt %o3, 1b 1071*293c7cd5SEric Biggers add %o2, 0x20, %o2 1072*293c7cd5SEric Biggers brlz,pt %o3, 11f 1073*293c7cd5SEric Biggers nop 1074*293c7cd5SEric Biggers10: ldx [%o1 + 0x00], %g3 1075*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 1076*293c7cd5SEric Biggers xor %g1, %g3, %g3 1077*293c7cd5SEric Biggers xor %g2, %g7, %g7 1078*293c7cd5SEric Biggers MOVXTOD_G3_F4 1079*293c7cd5SEric Biggers MOVXTOD_G7_F6 1080*293c7cd5SEric Biggers DECRYPT_128(8, 4, 6, 0, 2) 1081*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1082*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1083*293c7cd5SEric Biggers11: retl 1084*293c7cd5SEric Biggers nop 1085*293c7cd5SEric BiggersENDPROC(aes_sparc64_ecb_decrypt_128) 1086*293c7cd5SEric Biggers 1087*293c7cd5SEric Biggers .align 32 1088*293c7cd5SEric BiggersENTRY(aes_sparc64_ecb_decrypt_192) 1089*293c7cd5SEric Biggers /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */ 1090*293c7cd5SEric Biggers ldx [%o0 - 0x10], %g1 1091*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 1092*293c7cd5SEric Biggers be 10f 1093*293c7cd5SEric Biggers ldx [%o0 - 0x08], %g2 1094*293c7cd5SEric Biggers1: ldx [%o1 + 0x00], %g3 1095*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 1096*293c7cd5SEric Biggers ldx [%o1 + 0x10], %o4 1097*293c7cd5SEric Biggers ldx [%o1 + 0x18], %o5 1098*293c7cd5SEric Biggers xor %g1, %g3, %g3 1099*293c7cd5SEric Biggers xor %g2, %g7, %g7 1100*293c7cd5SEric Biggers MOVXTOD_G3_F4 1101*293c7cd5SEric Biggers MOVXTOD_G7_F6 1102*293c7cd5SEric Biggers xor %g1, %o4, %g3 1103*293c7cd5SEric Biggers xor %g2, %o5, %g7 1104*293c7cd5SEric Biggers MOVXTOD_G3_F60 1105*293c7cd5SEric Biggers MOVXTOD_G7_F62 1106*293c7cd5SEric Biggers DECRYPT_192_2(8, 4, 6, 60, 62, 0, 2, 56, 58) 1107*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1108*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1109*293c7cd5SEric Biggers std %f60, [%o2 + 0x10] 1110*293c7cd5SEric Biggers std %f62, [%o2 + 0x18] 1111*293c7cd5SEric Biggers sub %o3, 0x20, %o3 1112*293c7cd5SEric Biggers add %o1, 0x20, %o1 1113*293c7cd5SEric Biggers brgz,pt %o3, 1b 1114*293c7cd5SEric Biggers add %o2, 0x20, %o2 1115*293c7cd5SEric Biggers brlz,pt %o3, 11f 1116*293c7cd5SEric Biggers nop 1117*293c7cd5SEric Biggers10: ldx [%o1 + 0x00], %g3 1118*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 1119*293c7cd5SEric Biggers xor %g1, %g3, %g3 1120*293c7cd5SEric Biggers xor %g2, %g7, %g7 1121*293c7cd5SEric Biggers MOVXTOD_G3_F4 1122*293c7cd5SEric Biggers MOVXTOD_G7_F6 1123*293c7cd5SEric Biggers DECRYPT_192(8, 4, 6, 0, 2) 1124*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1125*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1126*293c7cd5SEric Biggers11: retl 1127*293c7cd5SEric Biggers nop 1128*293c7cd5SEric BiggersENDPROC(aes_sparc64_ecb_decrypt_192) 1129*293c7cd5SEric Biggers 1130*293c7cd5SEric Biggers .align 32 1131*293c7cd5SEric BiggersENTRY(aes_sparc64_ecb_decrypt_256) 1132*293c7cd5SEric Biggers /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */ 1133*293c7cd5SEric Biggers ldx [%o0 - 0x10], %g1 1134*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 1135*293c7cd5SEric Biggers ldx [%o0 - 0x08], %g2 1136*293c7cd5SEric Biggers be 10f 1137*293c7cd5SEric Biggers sub %o0, 0xf0, %o0 1138*293c7cd5SEric Biggers1: ldx [%o1 + 0x00], %g3 1139*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 1140*293c7cd5SEric Biggers ldx [%o1 + 0x10], %o4 1141*293c7cd5SEric Biggers ldx [%o1 + 0x18], %o5 1142*293c7cd5SEric Biggers xor %g1, %g3, %g3 1143*293c7cd5SEric Biggers xor %g2, %g7, %g7 1144*293c7cd5SEric Biggers MOVXTOD_G3_F4 1145*293c7cd5SEric Biggers MOVXTOD_G7_F6 1146*293c7cd5SEric Biggers xor %g1, %o4, %g3 1147*293c7cd5SEric Biggers xor %g2, %o5, %g7 1148*293c7cd5SEric Biggers MOVXTOD_G3_F0 1149*293c7cd5SEric Biggers MOVXTOD_G7_F2 1150*293c7cd5SEric Biggers DECRYPT_256_2(8, 4, 6, 0, 2) 1151*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1152*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1153*293c7cd5SEric Biggers std %f0, [%o2 + 0x10] 1154*293c7cd5SEric Biggers std %f2, [%o2 + 0x18] 1155*293c7cd5SEric Biggers sub %o3, 0x20, %o3 1156*293c7cd5SEric Biggers add %o1, 0x20, %o1 1157*293c7cd5SEric Biggers brgz,pt %o3, 1b 1158*293c7cd5SEric Biggers add %o2, 0x20, %o2 1159*293c7cd5SEric Biggers brlz,pt %o3, 11f 1160*293c7cd5SEric Biggers nop 1161*293c7cd5SEric Biggers10: ldd [%o0 + 0x18], %f56 1162*293c7cd5SEric Biggers ldd [%o0 + 0x10], %f58 1163*293c7cd5SEric Biggers ldd [%o0 + 0x08], %f60 1164*293c7cd5SEric Biggers ldd [%o0 + 0x00], %f62 1165*293c7cd5SEric Biggers ldx [%o1 + 0x00], %g3 1166*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 1167*293c7cd5SEric Biggers xor %g1, %g3, %g3 1168*293c7cd5SEric Biggers xor %g2, %g7, %g7 1169*293c7cd5SEric Biggers MOVXTOD_G3_F4 1170*293c7cd5SEric Biggers MOVXTOD_G7_F6 1171*293c7cd5SEric Biggers DECRYPT_256(8, 4, 6, 0, 2) 1172*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1173*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1174*293c7cd5SEric Biggers11: retl 1175*293c7cd5SEric Biggers nop 1176*293c7cd5SEric BiggersENDPROC(aes_sparc64_ecb_decrypt_256) 1177*293c7cd5SEric Biggers 1178*293c7cd5SEric Biggers .align 32 1179*293c7cd5SEric BiggersENTRY(aes_sparc64_cbc_encrypt_128) 1180*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ 1181*293c7cd5SEric Biggers ldd [%o4 + 0x00], %f4 1182*293c7cd5SEric Biggers ldd [%o4 + 0x08], %f6 1183*293c7cd5SEric Biggers ldx [%o0 + 0x00], %g1 1184*293c7cd5SEric Biggers ldx [%o0 + 0x08], %g2 1185*293c7cd5SEric Biggers1: ldx [%o1 + 0x00], %g3 1186*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 1187*293c7cd5SEric Biggers add %o1, 0x10, %o1 1188*293c7cd5SEric Biggers xor %g1, %g3, %g3 1189*293c7cd5SEric Biggers xor %g2, %g7, %g7 1190*293c7cd5SEric Biggers MOVXTOD_G3_F0 1191*293c7cd5SEric Biggers MOVXTOD_G7_F2 1192*293c7cd5SEric Biggers fxor %f4, %f0, %f4 1193*293c7cd5SEric Biggers fxor %f6, %f2, %f6 1194*293c7cd5SEric Biggers ENCRYPT_128(8, 4, 6, 0, 2) 1195*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1196*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1197*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 1198*293c7cd5SEric Biggers bne,pt %xcc, 1b 1199*293c7cd5SEric Biggers add %o2, 0x10, %o2 1200*293c7cd5SEric Biggers std %f4, [%o4 + 0x00] 1201*293c7cd5SEric Biggers std %f6, [%o4 + 0x08] 1202*293c7cd5SEric Biggers retl 1203*293c7cd5SEric Biggers nop 1204*293c7cd5SEric BiggersENDPROC(aes_sparc64_cbc_encrypt_128) 1205*293c7cd5SEric Biggers 1206*293c7cd5SEric Biggers .align 32 1207*293c7cd5SEric BiggersENTRY(aes_sparc64_cbc_encrypt_192) 1208*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ 1209*293c7cd5SEric Biggers ldd [%o4 + 0x00], %f4 1210*293c7cd5SEric Biggers ldd [%o4 + 0x08], %f6 1211*293c7cd5SEric Biggers ldx [%o0 + 0x00], %g1 1212*293c7cd5SEric Biggers ldx [%o0 + 0x08], %g2 1213*293c7cd5SEric Biggers1: ldx [%o1 + 0x00], %g3 1214*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 1215*293c7cd5SEric Biggers add %o1, 0x10, %o1 1216*293c7cd5SEric Biggers xor %g1, %g3, %g3 1217*293c7cd5SEric Biggers xor %g2, %g7, %g7 1218*293c7cd5SEric Biggers MOVXTOD_G3_F0 1219*293c7cd5SEric Biggers MOVXTOD_G7_F2 1220*293c7cd5SEric Biggers fxor %f4, %f0, %f4 1221*293c7cd5SEric Biggers fxor %f6, %f2, %f6 1222*293c7cd5SEric Biggers ENCRYPT_192(8, 4, 6, 0, 2) 1223*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1224*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1225*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 1226*293c7cd5SEric Biggers bne,pt %xcc, 1b 1227*293c7cd5SEric Biggers add %o2, 0x10, %o2 1228*293c7cd5SEric Biggers std %f4, [%o4 + 0x00] 1229*293c7cd5SEric Biggers std %f6, [%o4 + 0x08] 1230*293c7cd5SEric Biggers retl 1231*293c7cd5SEric Biggers nop 1232*293c7cd5SEric BiggersENDPROC(aes_sparc64_cbc_encrypt_192) 1233*293c7cd5SEric Biggers 1234*293c7cd5SEric Biggers .align 32 1235*293c7cd5SEric BiggersENTRY(aes_sparc64_cbc_encrypt_256) 1236*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ 1237*293c7cd5SEric Biggers ldd [%o4 + 0x00], %f4 1238*293c7cd5SEric Biggers ldd [%o4 + 0x08], %f6 1239*293c7cd5SEric Biggers ldx [%o0 + 0x00], %g1 1240*293c7cd5SEric Biggers ldx [%o0 + 0x08], %g2 1241*293c7cd5SEric Biggers1: ldx [%o1 + 0x00], %g3 1242*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 1243*293c7cd5SEric Biggers add %o1, 0x10, %o1 1244*293c7cd5SEric Biggers xor %g1, %g3, %g3 1245*293c7cd5SEric Biggers xor %g2, %g7, %g7 1246*293c7cd5SEric Biggers MOVXTOD_G3_F0 1247*293c7cd5SEric Biggers MOVXTOD_G7_F2 1248*293c7cd5SEric Biggers fxor %f4, %f0, %f4 1249*293c7cd5SEric Biggers fxor %f6, %f2, %f6 1250*293c7cd5SEric Biggers ENCRYPT_256(8, 4, 6, 0, 2) 1251*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1252*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1253*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 1254*293c7cd5SEric Biggers bne,pt %xcc, 1b 1255*293c7cd5SEric Biggers add %o2, 0x10, %o2 1256*293c7cd5SEric Biggers std %f4, [%o4 + 0x00] 1257*293c7cd5SEric Biggers std %f6, [%o4 + 0x08] 1258*293c7cd5SEric Biggers retl 1259*293c7cd5SEric Biggers nop 1260*293c7cd5SEric BiggersENDPROC(aes_sparc64_cbc_encrypt_256) 1261*293c7cd5SEric Biggers 1262*293c7cd5SEric Biggers .align 32 1263*293c7cd5SEric BiggersENTRY(aes_sparc64_cbc_decrypt_128) 1264*293c7cd5SEric Biggers /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */ 1265*293c7cd5SEric Biggers ldx [%o0 - 0x10], %g1 1266*293c7cd5SEric Biggers ldx [%o0 - 0x08], %g2 1267*293c7cd5SEric Biggers ldx [%o4 + 0x00], %o0 1268*293c7cd5SEric Biggers ldx [%o4 + 0x08], %o5 1269*293c7cd5SEric Biggers1: ldx [%o1 + 0x00], %g3 1270*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 1271*293c7cd5SEric Biggers add %o1, 0x10, %o1 1272*293c7cd5SEric Biggers xor %g1, %g3, %g3 1273*293c7cd5SEric Biggers xor %g2, %g7, %g7 1274*293c7cd5SEric Biggers MOVXTOD_G3_F4 1275*293c7cd5SEric Biggers MOVXTOD_G7_F6 1276*293c7cd5SEric Biggers DECRYPT_128(8, 4, 6, 0, 2) 1277*293c7cd5SEric Biggers MOVXTOD_O0_F0 1278*293c7cd5SEric Biggers MOVXTOD_O5_F2 1279*293c7cd5SEric Biggers xor %g1, %g3, %o0 1280*293c7cd5SEric Biggers xor %g2, %g7, %o5 1281*293c7cd5SEric Biggers fxor %f4, %f0, %f4 1282*293c7cd5SEric Biggers fxor %f6, %f2, %f6 1283*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1284*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1285*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 1286*293c7cd5SEric Biggers bne,pt %xcc, 1b 1287*293c7cd5SEric Biggers add %o2, 0x10, %o2 1288*293c7cd5SEric Biggers stx %o0, [%o4 + 0x00] 1289*293c7cd5SEric Biggers stx %o5, [%o4 + 0x08] 1290*293c7cd5SEric Biggers retl 1291*293c7cd5SEric Biggers nop 1292*293c7cd5SEric BiggersENDPROC(aes_sparc64_cbc_decrypt_128) 1293*293c7cd5SEric Biggers 1294*293c7cd5SEric Biggers .align 32 1295*293c7cd5SEric BiggersENTRY(aes_sparc64_cbc_decrypt_192) 1296*293c7cd5SEric Biggers /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */ 1297*293c7cd5SEric Biggers ldx [%o0 - 0x10], %g1 1298*293c7cd5SEric Biggers ldx [%o0 - 0x08], %g2 1299*293c7cd5SEric Biggers ldx [%o4 + 0x00], %o0 1300*293c7cd5SEric Biggers ldx [%o4 + 0x08], %o5 1301*293c7cd5SEric Biggers1: ldx [%o1 + 0x00], %g3 1302*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 1303*293c7cd5SEric Biggers add %o1, 0x10, %o1 1304*293c7cd5SEric Biggers xor %g1, %g3, %g3 1305*293c7cd5SEric Biggers xor %g2, %g7, %g7 1306*293c7cd5SEric Biggers MOVXTOD_G3_F4 1307*293c7cd5SEric Biggers MOVXTOD_G7_F6 1308*293c7cd5SEric Biggers DECRYPT_192(8, 4, 6, 0, 2) 1309*293c7cd5SEric Biggers MOVXTOD_O0_F0 1310*293c7cd5SEric Biggers MOVXTOD_O5_F2 1311*293c7cd5SEric Biggers xor %g1, %g3, %o0 1312*293c7cd5SEric Biggers xor %g2, %g7, %o5 1313*293c7cd5SEric Biggers fxor %f4, %f0, %f4 1314*293c7cd5SEric Biggers fxor %f6, %f2, %f6 1315*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1316*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1317*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 1318*293c7cd5SEric Biggers bne,pt %xcc, 1b 1319*293c7cd5SEric Biggers add %o2, 0x10, %o2 1320*293c7cd5SEric Biggers stx %o0, [%o4 + 0x00] 1321*293c7cd5SEric Biggers stx %o5, [%o4 + 0x08] 1322*293c7cd5SEric Biggers retl 1323*293c7cd5SEric Biggers nop 1324*293c7cd5SEric BiggersENDPROC(aes_sparc64_cbc_decrypt_192) 1325*293c7cd5SEric Biggers 1326*293c7cd5SEric Biggers .align 32 1327*293c7cd5SEric BiggersENTRY(aes_sparc64_cbc_decrypt_256) 1328*293c7cd5SEric Biggers /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */ 1329*293c7cd5SEric Biggers ldx [%o0 - 0x10], %g1 1330*293c7cd5SEric Biggers ldx [%o0 - 0x08], %g2 1331*293c7cd5SEric Biggers ldx [%o4 + 0x00], %o0 1332*293c7cd5SEric Biggers ldx [%o4 + 0x08], %o5 1333*293c7cd5SEric Biggers1: ldx [%o1 + 0x00], %g3 1334*293c7cd5SEric Biggers ldx [%o1 + 0x08], %g7 1335*293c7cd5SEric Biggers add %o1, 0x10, %o1 1336*293c7cd5SEric Biggers xor %g1, %g3, %g3 1337*293c7cd5SEric Biggers xor %g2, %g7, %g7 1338*293c7cd5SEric Biggers MOVXTOD_G3_F4 1339*293c7cd5SEric Biggers MOVXTOD_G7_F6 1340*293c7cd5SEric Biggers DECRYPT_256(8, 4, 6, 0, 2) 1341*293c7cd5SEric Biggers MOVXTOD_O0_F0 1342*293c7cd5SEric Biggers MOVXTOD_O5_F2 1343*293c7cd5SEric Biggers xor %g1, %g3, %o0 1344*293c7cd5SEric Biggers xor %g2, %g7, %o5 1345*293c7cd5SEric Biggers fxor %f4, %f0, %f4 1346*293c7cd5SEric Biggers fxor %f6, %f2, %f6 1347*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1348*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1349*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 1350*293c7cd5SEric Biggers bne,pt %xcc, 1b 1351*293c7cd5SEric Biggers add %o2, 0x10, %o2 1352*293c7cd5SEric Biggers stx %o0, [%o4 + 0x00] 1353*293c7cd5SEric Biggers stx %o5, [%o4 + 0x08] 1354*293c7cd5SEric Biggers retl 1355*293c7cd5SEric Biggers nop 1356*293c7cd5SEric BiggersENDPROC(aes_sparc64_cbc_decrypt_256) 1357*293c7cd5SEric Biggers 1358*293c7cd5SEric Biggers .align 32 1359*293c7cd5SEric BiggersENTRY(aes_sparc64_ctr_crypt_128) 1360*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ 1361*293c7cd5SEric Biggers ldx [%o4 + 0x00], %g3 1362*293c7cd5SEric Biggers ldx [%o4 + 0x08], %g7 1363*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 1364*293c7cd5SEric Biggers ldx [%o0 + 0x00], %g1 1365*293c7cd5SEric Biggers be 10f 1366*293c7cd5SEric Biggers ldx [%o0 + 0x08], %g2 1367*293c7cd5SEric Biggers1: xor %g1, %g3, %o5 1368*293c7cd5SEric Biggers MOVXTOD_O5_F0 1369*293c7cd5SEric Biggers xor %g2, %g7, %o5 1370*293c7cd5SEric Biggers MOVXTOD_O5_F2 1371*293c7cd5SEric Biggers add %g7, 1, %g7 1372*293c7cd5SEric Biggers add %g3, 1, %o5 1373*293c7cd5SEric Biggers movrz %g7, %o5, %g3 1374*293c7cd5SEric Biggers xor %g1, %g3, %o5 1375*293c7cd5SEric Biggers MOVXTOD_O5_F4 1376*293c7cd5SEric Biggers xor %g2, %g7, %o5 1377*293c7cd5SEric Biggers MOVXTOD_O5_F6 1378*293c7cd5SEric Biggers add %g7, 1, %g7 1379*293c7cd5SEric Biggers add %g3, 1, %o5 1380*293c7cd5SEric Biggers movrz %g7, %o5, %g3 1381*293c7cd5SEric Biggers ENCRYPT_128_2(8, 0, 2, 4, 6, 56, 58, 60, 62) 1382*293c7cd5SEric Biggers ldd [%o1 + 0x00], %f56 1383*293c7cd5SEric Biggers ldd [%o1 + 0x08], %f58 1384*293c7cd5SEric Biggers ldd [%o1 + 0x10], %f60 1385*293c7cd5SEric Biggers ldd [%o1 + 0x18], %f62 1386*293c7cd5SEric Biggers fxor %f56, %f0, %f56 1387*293c7cd5SEric Biggers fxor %f58, %f2, %f58 1388*293c7cd5SEric Biggers fxor %f60, %f4, %f60 1389*293c7cd5SEric Biggers fxor %f62, %f6, %f62 1390*293c7cd5SEric Biggers std %f56, [%o2 + 0x00] 1391*293c7cd5SEric Biggers std %f58, [%o2 + 0x08] 1392*293c7cd5SEric Biggers std %f60, [%o2 + 0x10] 1393*293c7cd5SEric Biggers std %f62, [%o2 + 0x18] 1394*293c7cd5SEric Biggers subcc %o3, 0x20, %o3 1395*293c7cd5SEric Biggers add %o1, 0x20, %o1 1396*293c7cd5SEric Biggers brgz %o3, 1b 1397*293c7cd5SEric Biggers add %o2, 0x20, %o2 1398*293c7cd5SEric Biggers brlz,pt %o3, 11f 1399*293c7cd5SEric Biggers nop 1400*293c7cd5SEric Biggers10: xor %g1, %g3, %o5 1401*293c7cd5SEric Biggers MOVXTOD_O5_F0 1402*293c7cd5SEric Biggers xor %g2, %g7, %o5 1403*293c7cd5SEric Biggers MOVXTOD_O5_F2 1404*293c7cd5SEric Biggers add %g7, 1, %g7 1405*293c7cd5SEric Biggers add %g3, 1, %o5 1406*293c7cd5SEric Biggers movrz %g7, %o5, %g3 1407*293c7cd5SEric Biggers ENCRYPT_128(8, 0, 2, 4, 6) 1408*293c7cd5SEric Biggers ldd [%o1 + 0x00], %f4 1409*293c7cd5SEric Biggers ldd [%o1 + 0x08], %f6 1410*293c7cd5SEric Biggers fxor %f4, %f0, %f4 1411*293c7cd5SEric Biggers fxor %f6, %f2, %f6 1412*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1413*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1414*293c7cd5SEric Biggers11: stx %g3, [%o4 + 0x00] 1415*293c7cd5SEric Biggers retl 1416*293c7cd5SEric Biggers stx %g7, [%o4 + 0x08] 1417*293c7cd5SEric BiggersENDPROC(aes_sparc64_ctr_crypt_128) 1418*293c7cd5SEric Biggers 1419*293c7cd5SEric Biggers .align 32 1420*293c7cd5SEric BiggersENTRY(aes_sparc64_ctr_crypt_192) 1421*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ 1422*293c7cd5SEric Biggers ldx [%o4 + 0x00], %g3 1423*293c7cd5SEric Biggers ldx [%o4 + 0x08], %g7 1424*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 1425*293c7cd5SEric Biggers ldx [%o0 + 0x00], %g1 1426*293c7cd5SEric Biggers be 10f 1427*293c7cd5SEric Biggers ldx [%o0 + 0x08], %g2 1428*293c7cd5SEric Biggers1: xor %g1, %g3, %o5 1429*293c7cd5SEric Biggers MOVXTOD_O5_F0 1430*293c7cd5SEric Biggers xor %g2, %g7, %o5 1431*293c7cd5SEric Biggers MOVXTOD_O5_F2 1432*293c7cd5SEric Biggers add %g7, 1, %g7 1433*293c7cd5SEric Biggers add %g3, 1, %o5 1434*293c7cd5SEric Biggers movrz %g7, %o5, %g3 1435*293c7cd5SEric Biggers xor %g1, %g3, %o5 1436*293c7cd5SEric Biggers MOVXTOD_O5_F4 1437*293c7cd5SEric Biggers xor %g2, %g7, %o5 1438*293c7cd5SEric Biggers MOVXTOD_O5_F6 1439*293c7cd5SEric Biggers add %g7, 1, %g7 1440*293c7cd5SEric Biggers add %g3, 1, %o5 1441*293c7cd5SEric Biggers movrz %g7, %o5, %g3 1442*293c7cd5SEric Biggers ENCRYPT_192_2(8, 0, 2, 4, 6, 56, 58, 60, 62) 1443*293c7cd5SEric Biggers ldd [%o1 + 0x00], %f56 1444*293c7cd5SEric Biggers ldd [%o1 + 0x08], %f58 1445*293c7cd5SEric Biggers ldd [%o1 + 0x10], %f60 1446*293c7cd5SEric Biggers ldd [%o1 + 0x18], %f62 1447*293c7cd5SEric Biggers fxor %f56, %f0, %f56 1448*293c7cd5SEric Biggers fxor %f58, %f2, %f58 1449*293c7cd5SEric Biggers fxor %f60, %f4, %f60 1450*293c7cd5SEric Biggers fxor %f62, %f6, %f62 1451*293c7cd5SEric Biggers std %f56, [%o2 + 0x00] 1452*293c7cd5SEric Biggers std %f58, [%o2 + 0x08] 1453*293c7cd5SEric Biggers std %f60, [%o2 + 0x10] 1454*293c7cd5SEric Biggers std %f62, [%o2 + 0x18] 1455*293c7cd5SEric Biggers subcc %o3, 0x20, %o3 1456*293c7cd5SEric Biggers add %o1, 0x20, %o1 1457*293c7cd5SEric Biggers brgz %o3, 1b 1458*293c7cd5SEric Biggers add %o2, 0x20, %o2 1459*293c7cd5SEric Biggers brlz,pt %o3, 11f 1460*293c7cd5SEric Biggers nop 1461*293c7cd5SEric Biggers10: xor %g1, %g3, %o5 1462*293c7cd5SEric Biggers MOVXTOD_O5_F0 1463*293c7cd5SEric Biggers xor %g2, %g7, %o5 1464*293c7cd5SEric Biggers MOVXTOD_O5_F2 1465*293c7cd5SEric Biggers add %g7, 1, %g7 1466*293c7cd5SEric Biggers add %g3, 1, %o5 1467*293c7cd5SEric Biggers movrz %g7, %o5, %g3 1468*293c7cd5SEric Biggers ENCRYPT_192(8, 0, 2, 4, 6) 1469*293c7cd5SEric Biggers ldd [%o1 + 0x00], %f4 1470*293c7cd5SEric Biggers ldd [%o1 + 0x08], %f6 1471*293c7cd5SEric Biggers fxor %f4, %f0, %f4 1472*293c7cd5SEric Biggers fxor %f6, %f2, %f6 1473*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1474*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1475*293c7cd5SEric Biggers11: stx %g3, [%o4 + 0x00] 1476*293c7cd5SEric Biggers retl 1477*293c7cd5SEric Biggers stx %g7, [%o4 + 0x08] 1478*293c7cd5SEric BiggersENDPROC(aes_sparc64_ctr_crypt_192) 1479*293c7cd5SEric Biggers 1480*293c7cd5SEric Biggers .align 32 1481*293c7cd5SEric BiggersENTRY(aes_sparc64_ctr_crypt_256) 1482*293c7cd5SEric Biggers /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ 1483*293c7cd5SEric Biggers ldx [%o4 + 0x00], %g3 1484*293c7cd5SEric Biggers ldx [%o4 + 0x08], %g7 1485*293c7cd5SEric Biggers subcc %o3, 0x10, %o3 1486*293c7cd5SEric Biggers ldx [%o0 + 0x00], %g1 1487*293c7cd5SEric Biggers be 10f 1488*293c7cd5SEric Biggers ldx [%o0 + 0x08], %g2 1489*293c7cd5SEric Biggers1: xor %g1, %g3, %o5 1490*293c7cd5SEric Biggers MOVXTOD_O5_F0 1491*293c7cd5SEric Biggers xor %g2, %g7, %o5 1492*293c7cd5SEric Biggers MOVXTOD_O5_F2 1493*293c7cd5SEric Biggers add %g7, 1, %g7 1494*293c7cd5SEric Biggers add %g3, 1, %o5 1495*293c7cd5SEric Biggers movrz %g7, %o5, %g3 1496*293c7cd5SEric Biggers xor %g1, %g3, %o5 1497*293c7cd5SEric Biggers MOVXTOD_O5_F4 1498*293c7cd5SEric Biggers xor %g2, %g7, %o5 1499*293c7cd5SEric Biggers MOVXTOD_O5_F6 1500*293c7cd5SEric Biggers add %g7, 1, %g7 1501*293c7cd5SEric Biggers add %g3, 1, %o5 1502*293c7cd5SEric Biggers movrz %g7, %o5, %g3 1503*293c7cd5SEric Biggers ENCRYPT_256_2(8, 0, 2, 4, 6) 1504*293c7cd5SEric Biggers ldd [%o1 + 0x00], %f56 1505*293c7cd5SEric Biggers ldd [%o1 + 0x08], %f58 1506*293c7cd5SEric Biggers ldd [%o1 + 0x10], %f60 1507*293c7cd5SEric Biggers ldd [%o1 + 0x18], %f62 1508*293c7cd5SEric Biggers fxor %f56, %f0, %f56 1509*293c7cd5SEric Biggers fxor %f58, %f2, %f58 1510*293c7cd5SEric Biggers fxor %f60, %f4, %f60 1511*293c7cd5SEric Biggers fxor %f62, %f6, %f62 1512*293c7cd5SEric Biggers std %f56, [%o2 + 0x00] 1513*293c7cd5SEric Biggers std %f58, [%o2 + 0x08] 1514*293c7cd5SEric Biggers std %f60, [%o2 + 0x10] 1515*293c7cd5SEric Biggers std %f62, [%o2 + 0x18] 1516*293c7cd5SEric Biggers subcc %o3, 0x20, %o3 1517*293c7cd5SEric Biggers add %o1, 0x20, %o1 1518*293c7cd5SEric Biggers brgz %o3, 1b 1519*293c7cd5SEric Biggers add %o2, 0x20, %o2 1520*293c7cd5SEric Biggers brlz,pt %o3, 11f 1521*293c7cd5SEric Biggers nop 1522*293c7cd5SEric Biggers10: ldd [%o0 + 0xd0], %f56 1523*293c7cd5SEric Biggers ldd [%o0 + 0xd8], %f58 1524*293c7cd5SEric Biggers ldd [%o0 + 0xe0], %f60 1525*293c7cd5SEric Biggers ldd [%o0 + 0xe8], %f62 1526*293c7cd5SEric Biggers xor %g1, %g3, %o5 1527*293c7cd5SEric Biggers MOVXTOD_O5_F0 1528*293c7cd5SEric Biggers xor %g2, %g7, %o5 1529*293c7cd5SEric Biggers MOVXTOD_O5_F2 1530*293c7cd5SEric Biggers add %g7, 1, %g7 1531*293c7cd5SEric Biggers add %g3, 1, %o5 1532*293c7cd5SEric Biggers movrz %g7, %o5, %g3 1533*293c7cd5SEric Biggers ENCRYPT_256(8, 0, 2, 4, 6) 1534*293c7cd5SEric Biggers ldd [%o1 + 0x00], %f4 1535*293c7cd5SEric Biggers ldd [%o1 + 0x08], %f6 1536*293c7cd5SEric Biggers fxor %f4, %f0, %f4 1537*293c7cd5SEric Biggers fxor %f6, %f2, %f6 1538*293c7cd5SEric Biggers std %f4, [%o2 + 0x00] 1539*293c7cd5SEric Biggers std %f6, [%o2 + 0x08] 1540*293c7cd5SEric Biggers11: stx %g3, [%o4 + 0x00] 1541*293c7cd5SEric Biggers retl 1542*293c7cd5SEric Biggers stx %g7, [%o4 + 0x08] 1543*293c7cd5SEric BiggersENDPROC(aes_sparc64_ctr_crypt_256) 1544