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