162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#include <linux/linkage.h> 362306a36Sopenharmony_ci#include <asm/visasm.h> 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include "opcodes.h" 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#define ENCRYPT_TWO_ROUNDS(KEY_BASE, I0, I1, T0, T1) \ 862306a36Sopenharmony_ci AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \ 962306a36Sopenharmony_ci AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \ 1062306a36Sopenharmony_ci AES_EROUND01(KEY_BASE + 4, T0, T1, I0) \ 1162306a36Sopenharmony_ci AES_EROUND23(KEY_BASE + 6, T0, T1, I1) 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#define ENCRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 1462306a36Sopenharmony_ci AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \ 1562306a36Sopenharmony_ci AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \ 1662306a36Sopenharmony_ci AES_EROUND01(KEY_BASE + 0, I2, I3, T2) \ 1762306a36Sopenharmony_ci AES_EROUND23(KEY_BASE + 2, I2, I3, T3) \ 1862306a36Sopenharmony_ci AES_EROUND01(KEY_BASE + 4, T0, T1, I0) \ 1962306a36Sopenharmony_ci AES_EROUND23(KEY_BASE + 6, T0, T1, I1) \ 2062306a36Sopenharmony_ci AES_EROUND01(KEY_BASE + 4, T2, T3, I2) \ 2162306a36Sopenharmony_ci AES_EROUND23(KEY_BASE + 6, T2, T3, I3) 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE, I0, I1, T0, T1) \ 2462306a36Sopenharmony_ci AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \ 2562306a36Sopenharmony_ci AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \ 2662306a36Sopenharmony_ci AES_EROUND01_L(KEY_BASE + 4, T0, T1, I0) \ 2762306a36Sopenharmony_ci AES_EROUND23_L(KEY_BASE + 6, T0, T1, I1) 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#define ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 3062306a36Sopenharmony_ci AES_EROUND01(KEY_BASE + 0, I0, I1, T0) \ 3162306a36Sopenharmony_ci AES_EROUND23(KEY_BASE + 2, I0, I1, T1) \ 3262306a36Sopenharmony_ci AES_EROUND01(KEY_BASE + 0, I2, I3, T2) \ 3362306a36Sopenharmony_ci AES_EROUND23(KEY_BASE + 2, I2, I3, T3) \ 3462306a36Sopenharmony_ci AES_EROUND01_L(KEY_BASE + 4, T0, T1, I0) \ 3562306a36Sopenharmony_ci AES_EROUND23_L(KEY_BASE + 6, T0, T1, I1) \ 3662306a36Sopenharmony_ci AES_EROUND01_L(KEY_BASE + 4, T2, T3, I2) \ 3762306a36Sopenharmony_ci AES_EROUND23_L(KEY_BASE + 6, T2, T3, I3) 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci /* 10 rounds */ 4062306a36Sopenharmony_ci#define ENCRYPT_128(KEY_BASE, I0, I1, T0, T1) \ 4162306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ 4262306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ 4362306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ 4462306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ 4562306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 32, I0, I1, T0, T1) 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#define ENCRYPT_128_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 4862306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \ 4962306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \ 5062306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \ 5162306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \ 5262306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci /* 12 rounds */ 5562306a36Sopenharmony_ci#define ENCRYPT_192(KEY_BASE, I0, I1, T0, T1) \ 5662306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ 5762306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ 5862306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ 5962306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ 6062306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ 6162306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 40, I0, I1, T0, T1) 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci#define ENCRYPT_192_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 6462306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \ 6562306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \ 6662306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \ 6762306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \ 6862306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) \ 6962306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 40, I0, I1, I2, I3, T0, T1, T2, T3) 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci /* 14 rounds */ 7262306a36Sopenharmony_ci#define ENCRYPT_256(KEY_BASE, I0, I1, T0, T1) \ 7362306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ 7462306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ 7562306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ 7662306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ 7762306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ 7862306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(KEY_BASE + 40, I0, I1, T0, T1) \ 7962306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_LAST(KEY_BASE + 48, I0, I1, T0, T1) 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci#define ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, TMP_BASE) \ 8262306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, \ 8362306a36Sopenharmony_ci TMP_BASE + 0, TMP_BASE + 2, TMP_BASE + 4, TMP_BASE + 6) 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci#define ENCRYPT_256_2(KEY_BASE, I0, I1, I2, I3) \ 8662306a36Sopenharmony_ci ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, KEY_BASE + 48) \ 8762306a36Sopenharmony_ci ldd [%o0 + 0xd0], %f56; \ 8862306a36Sopenharmony_ci ldd [%o0 + 0xd8], %f58; \ 8962306a36Sopenharmony_ci ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, KEY_BASE + 0) \ 9062306a36Sopenharmony_ci ldd [%o0 + 0xe0], %f60; \ 9162306a36Sopenharmony_ci ldd [%o0 + 0xe8], %f62; \ 9262306a36Sopenharmony_ci ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, KEY_BASE + 0) \ 9362306a36Sopenharmony_ci ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, KEY_BASE + 0) \ 9462306a36Sopenharmony_ci ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, KEY_BASE + 0) \ 9562306a36Sopenharmony_ci ENCRYPT_256_TWO_ROUNDS_2(KEY_BASE + 40, I0, I1, I2, I3, KEY_BASE + 0) \ 9662306a36Sopenharmony_ci AES_EROUND01(KEY_BASE + 48, I0, I1, KEY_BASE + 0) \ 9762306a36Sopenharmony_ci AES_EROUND23(KEY_BASE + 50, I0, I1, KEY_BASE + 2) \ 9862306a36Sopenharmony_ci AES_EROUND01(KEY_BASE + 48, I2, I3, KEY_BASE + 4) \ 9962306a36Sopenharmony_ci AES_EROUND23(KEY_BASE + 50, I2, I3, KEY_BASE + 6) \ 10062306a36Sopenharmony_ci AES_EROUND01_L(KEY_BASE + 52, KEY_BASE + 0, KEY_BASE + 2, I0) \ 10162306a36Sopenharmony_ci AES_EROUND23_L(KEY_BASE + 54, KEY_BASE + 0, KEY_BASE + 2, I1) \ 10262306a36Sopenharmony_ci ldd [%o0 + 0x10], %f8; \ 10362306a36Sopenharmony_ci ldd [%o0 + 0x18], %f10; \ 10462306a36Sopenharmony_ci AES_EROUND01_L(KEY_BASE + 52, KEY_BASE + 4, KEY_BASE + 6, I2) \ 10562306a36Sopenharmony_ci AES_EROUND23_L(KEY_BASE + 54, KEY_BASE + 4, KEY_BASE + 6, I3) \ 10662306a36Sopenharmony_ci ldd [%o0 + 0x20], %f12; \ 10762306a36Sopenharmony_ci ldd [%o0 + 0x28], %f14; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci#define DECRYPT_TWO_ROUNDS(KEY_BASE, I0, I1, T0, T1) \ 11062306a36Sopenharmony_ci AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \ 11162306a36Sopenharmony_ci AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \ 11262306a36Sopenharmony_ci AES_DROUND23(KEY_BASE + 4, T0, T1, I1) \ 11362306a36Sopenharmony_ci AES_DROUND01(KEY_BASE + 6, T0, T1, I0) 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci#define DECRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 11662306a36Sopenharmony_ci AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \ 11762306a36Sopenharmony_ci AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \ 11862306a36Sopenharmony_ci AES_DROUND23(KEY_BASE + 0, I2, I3, T3) \ 11962306a36Sopenharmony_ci AES_DROUND01(KEY_BASE + 2, I2, I3, T2) \ 12062306a36Sopenharmony_ci AES_DROUND23(KEY_BASE + 4, T0, T1, I1) \ 12162306a36Sopenharmony_ci AES_DROUND01(KEY_BASE + 6, T0, T1, I0) \ 12262306a36Sopenharmony_ci AES_DROUND23(KEY_BASE + 4, T2, T3, I3) \ 12362306a36Sopenharmony_ci AES_DROUND01(KEY_BASE + 6, T2, T3, I2) 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci#define DECRYPT_TWO_ROUNDS_LAST(KEY_BASE, I0, I1, T0, T1) \ 12662306a36Sopenharmony_ci AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \ 12762306a36Sopenharmony_ci AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \ 12862306a36Sopenharmony_ci AES_DROUND23_L(KEY_BASE + 4, T0, T1, I1) \ 12962306a36Sopenharmony_ci AES_DROUND01_L(KEY_BASE + 6, T0, T1, I0) 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci#define DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 13262306a36Sopenharmony_ci AES_DROUND23(KEY_BASE + 0, I0, I1, T1) \ 13362306a36Sopenharmony_ci AES_DROUND01(KEY_BASE + 2, I0, I1, T0) \ 13462306a36Sopenharmony_ci AES_DROUND23(KEY_BASE + 0, I2, I3, T3) \ 13562306a36Sopenharmony_ci AES_DROUND01(KEY_BASE + 2, I2, I3, T2) \ 13662306a36Sopenharmony_ci AES_DROUND23_L(KEY_BASE + 4, T0, T1, I1) \ 13762306a36Sopenharmony_ci AES_DROUND01_L(KEY_BASE + 6, T0, T1, I0) \ 13862306a36Sopenharmony_ci AES_DROUND23_L(KEY_BASE + 4, T2, T3, I3) \ 13962306a36Sopenharmony_ci AES_DROUND01_L(KEY_BASE + 6, T2, T3, I2) 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci /* 10 rounds */ 14262306a36Sopenharmony_ci#define DECRYPT_128(KEY_BASE, I0, I1, T0, T1) \ 14362306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ 14462306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ 14562306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ 14662306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ 14762306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 32, I0, I1, T0, T1) 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci#define DECRYPT_128_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 15062306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \ 15162306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \ 15262306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \ 15362306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \ 15462306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci /* 12 rounds */ 15762306a36Sopenharmony_ci#define DECRYPT_192(KEY_BASE, I0, I1, T0, T1) \ 15862306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ 15962306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ 16062306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ 16162306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ 16262306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ 16362306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 40, I0, I1, T0, T1) 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_ci#define DECRYPT_192_2(KEY_BASE, I0, I1, I2, I3, T0, T1, T2, T3) \ 16662306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, T0, T1, T2, T3) \ 16762306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, T0, T1, T2, T3) \ 16862306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, T0, T1, T2, T3) \ 16962306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, T0, T1, T2, T3) \ 17062306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, T0, T1, T2, T3) \ 17162306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_LAST_2(KEY_BASE + 40, I0, I1, I2, I3, T0, T1, T2, T3) 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci /* 14 rounds */ 17462306a36Sopenharmony_ci#define DECRYPT_256(KEY_BASE, I0, I1, T0, T1) \ 17562306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 0, I0, I1, T0, T1) \ 17662306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 8, I0, I1, T0, T1) \ 17762306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 16, I0, I1, T0, T1) \ 17862306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 24, I0, I1, T0, T1) \ 17962306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 32, I0, I1, T0, T1) \ 18062306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(KEY_BASE + 40, I0, I1, T0, T1) \ 18162306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_LAST(KEY_BASE + 48, I0, I1, T0, T1) 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci#define DECRYPT_256_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, TMP_BASE) \ 18462306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS_2(KEY_BASE, I0, I1, I2, I3, \ 18562306a36Sopenharmony_ci TMP_BASE + 0, TMP_BASE + 2, TMP_BASE + 4, TMP_BASE + 6) 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci#define DECRYPT_256_2(KEY_BASE, I0, I1, I2, I3) \ 18862306a36Sopenharmony_ci DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 0, I0, I1, I2, I3, KEY_BASE + 48) \ 18962306a36Sopenharmony_ci ldd [%o0 + 0x18], %f56; \ 19062306a36Sopenharmony_ci ldd [%o0 + 0x10], %f58; \ 19162306a36Sopenharmony_ci DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 8, I0, I1, I2, I3, KEY_BASE + 0) \ 19262306a36Sopenharmony_ci ldd [%o0 + 0x08], %f60; \ 19362306a36Sopenharmony_ci ldd [%o0 + 0x00], %f62; \ 19462306a36Sopenharmony_ci DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 16, I0, I1, I2, I3, KEY_BASE + 0) \ 19562306a36Sopenharmony_ci DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 24, I0, I1, I2, I3, KEY_BASE + 0) \ 19662306a36Sopenharmony_ci DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 32, I0, I1, I2, I3, KEY_BASE + 0) \ 19762306a36Sopenharmony_ci DECRYPT_256_TWO_ROUNDS_2(KEY_BASE + 40, I0, I1, I2, I3, KEY_BASE + 0) \ 19862306a36Sopenharmony_ci AES_DROUND23(KEY_BASE + 48, I0, I1, KEY_BASE + 2) \ 19962306a36Sopenharmony_ci AES_DROUND01(KEY_BASE + 50, I0, I1, KEY_BASE + 0) \ 20062306a36Sopenharmony_ci AES_DROUND23(KEY_BASE + 48, I2, I3, KEY_BASE + 6) \ 20162306a36Sopenharmony_ci AES_DROUND01(KEY_BASE + 50, I2, I3, KEY_BASE + 4) \ 20262306a36Sopenharmony_ci AES_DROUND23_L(KEY_BASE + 52, KEY_BASE + 0, KEY_BASE + 2, I1) \ 20362306a36Sopenharmony_ci AES_DROUND01_L(KEY_BASE + 54, KEY_BASE + 0, KEY_BASE + 2, I0) \ 20462306a36Sopenharmony_ci ldd [%o0 + 0xd8], %f8; \ 20562306a36Sopenharmony_ci ldd [%o0 + 0xd0], %f10; \ 20662306a36Sopenharmony_ci AES_DROUND23_L(KEY_BASE + 52, KEY_BASE + 4, KEY_BASE + 6, I3) \ 20762306a36Sopenharmony_ci AES_DROUND01_L(KEY_BASE + 54, KEY_BASE + 4, KEY_BASE + 6, I2) \ 20862306a36Sopenharmony_ci ldd [%o0 + 0xc8], %f12; \ 20962306a36Sopenharmony_ci ldd [%o0 + 0xc0], %f14; 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ci .align 32 21262306a36Sopenharmony_ciENTRY(aes_sparc64_key_expand) 21362306a36Sopenharmony_ci /* %o0=input_key, %o1=output_key, %o2=key_len */ 21462306a36Sopenharmony_ci VISEntry 21562306a36Sopenharmony_ci ld [%o0 + 0x00], %f0 21662306a36Sopenharmony_ci ld [%o0 + 0x04], %f1 21762306a36Sopenharmony_ci ld [%o0 + 0x08], %f2 21862306a36Sopenharmony_ci ld [%o0 + 0x0c], %f3 21962306a36Sopenharmony_ci 22062306a36Sopenharmony_ci std %f0, [%o1 + 0x00] 22162306a36Sopenharmony_ci std %f2, [%o1 + 0x08] 22262306a36Sopenharmony_ci add %o1, 0x10, %o1 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci cmp %o2, 24 22562306a36Sopenharmony_ci bl 2f 22662306a36Sopenharmony_ci nop 22762306a36Sopenharmony_ci 22862306a36Sopenharmony_ci be 1f 22962306a36Sopenharmony_ci nop 23062306a36Sopenharmony_ci 23162306a36Sopenharmony_ci /* 256-bit key expansion */ 23262306a36Sopenharmony_ci ld [%o0 + 0x10], %f4 23362306a36Sopenharmony_ci ld [%o0 + 0x14], %f5 23462306a36Sopenharmony_ci ld [%o0 + 0x18], %f6 23562306a36Sopenharmony_ci ld [%o0 + 0x1c], %f7 23662306a36Sopenharmony_ci 23762306a36Sopenharmony_ci std %f4, [%o1 + 0x00] 23862306a36Sopenharmony_ci std %f6, [%o1 + 0x08] 23962306a36Sopenharmony_ci add %o1, 0x10, %o1 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_ci AES_KEXPAND1(0, 6, 0x0, 8) 24262306a36Sopenharmony_ci AES_KEXPAND2(2, 8, 10) 24362306a36Sopenharmony_ci AES_KEXPAND0(4, 10, 12) 24462306a36Sopenharmony_ci AES_KEXPAND2(6, 12, 14) 24562306a36Sopenharmony_ci AES_KEXPAND1(8, 14, 0x1, 16) 24662306a36Sopenharmony_ci AES_KEXPAND2(10, 16, 18) 24762306a36Sopenharmony_ci AES_KEXPAND0(12, 18, 20) 24862306a36Sopenharmony_ci AES_KEXPAND2(14, 20, 22) 24962306a36Sopenharmony_ci AES_KEXPAND1(16, 22, 0x2, 24) 25062306a36Sopenharmony_ci AES_KEXPAND2(18, 24, 26) 25162306a36Sopenharmony_ci AES_KEXPAND0(20, 26, 28) 25262306a36Sopenharmony_ci AES_KEXPAND2(22, 28, 30) 25362306a36Sopenharmony_ci AES_KEXPAND1(24, 30, 0x3, 32) 25462306a36Sopenharmony_ci AES_KEXPAND2(26, 32, 34) 25562306a36Sopenharmony_ci AES_KEXPAND0(28, 34, 36) 25662306a36Sopenharmony_ci AES_KEXPAND2(30, 36, 38) 25762306a36Sopenharmony_ci AES_KEXPAND1(32, 38, 0x4, 40) 25862306a36Sopenharmony_ci AES_KEXPAND2(34, 40, 42) 25962306a36Sopenharmony_ci AES_KEXPAND0(36, 42, 44) 26062306a36Sopenharmony_ci AES_KEXPAND2(38, 44, 46) 26162306a36Sopenharmony_ci AES_KEXPAND1(40, 46, 0x5, 48) 26262306a36Sopenharmony_ci AES_KEXPAND2(42, 48, 50) 26362306a36Sopenharmony_ci AES_KEXPAND0(44, 50, 52) 26462306a36Sopenharmony_ci AES_KEXPAND2(46, 52, 54) 26562306a36Sopenharmony_ci AES_KEXPAND1(48, 54, 0x6, 56) 26662306a36Sopenharmony_ci AES_KEXPAND2(50, 56, 58) 26762306a36Sopenharmony_ci 26862306a36Sopenharmony_ci std %f8, [%o1 + 0x00] 26962306a36Sopenharmony_ci std %f10, [%o1 + 0x08] 27062306a36Sopenharmony_ci std %f12, [%o1 + 0x10] 27162306a36Sopenharmony_ci std %f14, [%o1 + 0x18] 27262306a36Sopenharmony_ci std %f16, [%o1 + 0x20] 27362306a36Sopenharmony_ci std %f18, [%o1 + 0x28] 27462306a36Sopenharmony_ci std %f20, [%o1 + 0x30] 27562306a36Sopenharmony_ci std %f22, [%o1 + 0x38] 27662306a36Sopenharmony_ci std %f24, [%o1 + 0x40] 27762306a36Sopenharmony_ci std %f26, [%o1 + 0x48] 27862306a36Sopenharmony_ci std %f28, [%o1 + 0x50] 27962306a36Sopenharmony_ci std %f30, [%o1 + 0x58] 28062306a36Sopenharmony_ci std %f32, [%o1 + 0x60] 28162306a36Sopenharmony_ci std %f34, [%o1 + 0x68] 28262306a36Sopenharmony_ci std %f36, [%o1 + 0x70] 28362306a36Sopenharmony_ci std %f38, [%o1 + 0x78] 28462306a36Sopenharmony_ci std %f40, [%o1 + 0x80] 28562306a36Sopenharmony_ci std %f42, [%o1 + 0x88] 28662306a36Sopenharmony_ci std %f44, [%o1 + 0x90] 28762306a36Sopenharmony_ci std %f46, [%o1 + 0x98] 28862306a36Sopenharmony_ci std %f48, [%o1 + 0xa0] 28962306a36Sopenharmony_ci std %f50, [%o1 + 0xa8] 29062306a36Sopenharmony_ci std %f52, [%o1 + 0xb0] 29162306a36Sopenharmony_ci std %f54, [%o1 + 0xb8] 29262306a36Sopenharmony_ci std %f56, [%o1 + 0xc0] 29362306a36Sopenharmony_ci ba,pt %xcc, 80f 29462306a36Sopenharmony_ci std %f58, [%o1 + 0xc8] 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci1: 29762306a36Sopenharmony_ci /* 192-bit key expansion */ 29862306a36Sopenharmony_ci ld [%o0 + 0x10], %f4 29962306a36Sopenharmony_ci ld [%o0 + 0x14], %f5 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ci std %f4, [%o1 + 0x00] 30262306a36Sopenharmony_ci add %o1, 0x08, %o1 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_ci AES_KEXPAND1(0, 4, 0x0, 6) 30562306a36Sopenharmony_ci AES_KEXPAND2(2, 6, 8) 30662306a36Sopenharmony_ci AES_KEXPAND2(4, 8, 10) 30762306a36Sopenharmony_ci AES_KEXPAND1(6, 10, 0x1, 12) 30862306a36Sopenharmony_ci AES_KEXPAND2(8, 12, 14) 30962306a36Sopenharmony_ci AES_KEXPAND2(10, 14, 16) 31062306a36Sopenharmony_ci AES_KEXPAND1(12, 16, 0x2, 18) 31162306a36Sopenharmony_ci AES_KEXPAND2(14, 18, 20) 31262306a36Sopenharmony_ci AES_KEXPAND2(16, 20, 22) 31362306a36Sopenharmony_ci AES_KEXPAND1(18, 22, 0x3, 24) 31462306a36Sopenharmony_ci AES_KEXPAND2(20, 24, 26) 31562306a36Sopenharmony_ci AES_KEXPAND2(22, 26, 28) 31662306a36Sopenharmony_ci AES_KEXPAND1(24, 28, 0x4, 30) 31762306a36Sopenharmony_ci AES_KEXPAND2(26, 30, 32) 31862306a36Sopenharmony_ci AES_KEXPAND2(28, 32, 34) 31962306a36Sopenharmony_ci AES_KEXPAND1(30, 34, 0x5, 36) 32062306a36Sopenharmony_ci AES_KEXPAND2(32, 36, 38) 32162306a36Sopenharmony_ci AES_KEXPAND2(34, 38, 40) 32262306a36Sopenharmony_ci AES_KEXPAND1(36, 40, 0x6, 42) 32362306a36Sopenharmony_ci AES_KEXPAND2(38, 42, 44) 32462306a36Sopenharmony_ci AES_KEXPAND2(40, 44, 46) 32562306a36Sopenharmony_ci AES_KEXPAND1(42, 46, 0x7, 48) 32662306a36Sopenharmony_ci AES_KEXPAND2(44, 48, 50) 32762306a36Sopenharmony_ci 32862306a36Sopenharmony_ci std %f6, [%o1 + 0x00] 32962306a36Sopenharmony_ci std %f8, [%o1 + 0x08] 33062306a36Sopenharmony_ci std %f10, [%o1 + 0x10] 33162306a36Sopenharmony_ci std %f12, [%o1 + 0x18] 33262306a36Sopenharmony_ci std %f14, [%o1 + 0x20] 33362306a36Sopenharmony_ci std %f16, [%o1 + 0x28] 33462306a36Sopenharmony_ci std %f18, [%o1 + 0x30] 33562306a36Sopenharmony_ci std %f20, [%o1 + 0x38] 33662306a36Sopenharmony_ci std %f22, [%o1 + 0x40] 33762306a36Sopenharmony_ci std %f24, [%o1 + 0x48] 33862306a36Sopenharmony_ci std %f26, [%o1 + 0x50] 33962306a36Sopenharmony_ci std %f28, [%o1 + 0x58] 34062306a36Sopenharmony_ci std %f30, [%o1 + 0x60] 34162306a36Sopenharmony_ci std %f32, [%o1 + 0x68] 34262306a36Sopenharmony_ci std %f34, [%o1 + 0x70] 34362306a36Sopenharmony_ci std %f36, [%o1 + 0x78] 34462306a36Sopenharmony_ci std %f38, [%o1 + 0x80] 34562306a36Sopenharmony_ci std %f40, [%o1 + 0x88] 34662306a36Sopenharmony_ci std %f42, [%o1 + 0x90] 34762306a36Sopenharmony_ci std %f44, [%o1 + 0x98] 34862306a36Sopenharmony_ci std %f46, [%o1 + 0xa0] 34962306a36Sopenharmony_ci std %f48, [%o1 + 0xa8] 35062306a36Sopenharmony_ci ba,pt %xcc, 80f 35162306a36Sopenharmony_ci std %f50, [%o1 + 0xb0] 35262306a36Sopenharmony_ci 35362306a36Sopenharmony_ci2: 35462306a36Sopenharmony_ci /* 128-bit key expansion */ 35562306a36Sopenharmony_ci AES_KEXPAND1(0, 2, 0x0, 4) 35662306a36Sopenharmony_ci AES_KEXPAND2(2, 4, 6) 35762306a36Sopenharmony_ci AES_KEXPAND1(4, 6, 0x1, 8) 35862306a36Sopenharmony_ci AES_KEXPAND2(6, 8, 10) 35962306a36Sopenharmony_ci AES_KEXPAND1(8, 10, 0x2, 12) 36062306a36Sopenharmony_ci AES_KEXPAND2(10, 12, 14) 36162306a36Sopenharmony_ci AES_KEXPAND1(12, 14, 0x3, 16) 36262306a36Sopenharmony_ci AES_KEXPAND2(14, 16, 18) 36362306a36Sopenharmony_ci AES_KEXPAND1(16, 18, 0x4, 20) 36462306a36Sopenharmony_ci AES_KEXPAND2(18, 20, 22) 36562306a36Sopenharmony_ci AES_KEXPAND1(20, 22, 0x5, 24) 36662306a36Sopenharmony_ci AES_KEXPAND2(22, 24, 26) 36762306a36Sopenharmony_ci AES_KEXPAND1(24, 26, 0x6, 28) 36862306a36Sopenharmony_ci AES_KEXPAND2(26, 28, 30) 36962306a36Sopenharmony_ci AES_KEXPAND1(28, 30, 0x7, 32) 37062306a36Sopenharmony_ci AES_KEXPAND2(30, 32, 34) 37162306a36Sopenharmony_ci AES_KEXPAND1(32, 34, 0x8, 36) 37262306a36Sopenharmony_ci AES_KEXPAND2(34, 36, 38) 37362306a36Sopenharmony_ci AES_KEXPAND1(36, 38, 0x9, 40) 37462306a36Sopenharmony_ci AES_KEXPAND2(38, 40, 42) 37562306a36Sopenharmony_ci 37662306a36Sopenharmony_ci std %f4, [%o1 + 0x00] 37762306a36Sopenharmony_ci std %f6, [%o1 + 0x08] 37862306a36Sopenharmony_ci std %f8, [%o1 + 0x10] 37962306a36Sopenharmony_ci std %f10, [%o1 + 0x18] 38062306a36Sopenharmony_ci std %f12, [%o1 + 0x20] 38162306a36Sopenharmony_ci std %f14, [%o1 + 0x28] 38262306a36Sopenharmony_ci std %f16, [%o1 + 0x30] 38362306a36Sopenharmony_ci std %f18, [%o1 + 0x38] 38462306a36Sopenharmony_ci std %f20, [%o1 + 0x40] 38562306a36Sopenharmony_ci std %f22, [%o1 + 0x48] 38662306a36Sopenharmony_ci std %f24, [%o1 + 0x50] 38762306a36Sopenharmony_ci std %f26, [%o1 + 0x58] 38862306a36Sopenharmony_ci std %f28, [%o1 + 0x60] 38962306a36Sopenharmony_ci std %f30, [%o1 + 0x68] 39062306a36Sopenharmony_ci std %f32, [%o1 + 0x70] 39162306a36Sopenharmony_ci std %f34, [%o1 + 0x78] 39262306a36Sopenharmony_ci std %f36, [%o1 + 0x80] 39362306a36Sopenharmony_ci std %f38, [%o1 + 0x88] 39462306a36Sopenharmony_ci std %f40, [%o1 + 0x90] 39562306a36Sopenharmony_ci std %f42, [%o1 + 0x98] 39662306a36Sopenharmony_ci80: 39762306a36Sopenharmony_ci retl 39862306a36Sopenharmony_ci VISExit 39962306a36Sopenharmony_ciENDPROC(aes_sparc64_key_expand) 40062306a36Sopenharmony_ci 40162306a36Sopenharmony_ci .align 32 40262306a36Sopenharmony_ciENTRY(aes_sparc64_encrypt_128) 40362306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output */ 40462306a36Sopenharmony_ci VISEntry 40562306a36Sopenharmony_ci ld [%o1 + 0x00], %f4 40662306a36Sopenharmony_ci ld [%o1 + 0x04], %f5 40762306a36Sopenharmony_ci ld [%o1 + 0x08], %f6 40862306a36Sopenharmony_ci ld [%o1 + 0x0c], %f7 40962306a36Sopenharmony_ci ldd [%o0 + 0x00], %f8 41062306a36Sopenharmony_ci ldd [%o0 + 0x08], %f10 41162306a36Sopenharmony_ci ldd [%o0 + 0x10], %f12 41262306a36Sopenharmony_ci ldd [%o0 + 0x18], %f14 41362306a36Sopenharmony_ci ldd [%o0 + 0x20], %f16 41462306a36Sopenharmony_ci ldd [%o0 + 0x28], %f18 41562306a36Sopenharmony_ci ldd [%o0 + 0x30], %f20 41662306a36Sopenharmony_ci ldd [%o0 + 0x38], %f22 41762306a36Sopenharmony_ci ldd [%o0 + 0x40], %f24 41862306a36Sopenharmony_ci ldd [%o0 + 0x48], %f26 41962306a36Sopenharmony_ci ldd [%o0 + 0x50], %f28 42062306a36Sopenharmony_ci ldd [%o0 + 0x58], %f30 42162306a36Sopenharmony_ci ldd [%o0 + 0x60], %f32 42262306a36Sopenharmony_ci ldd [%o0 + 0x68], %f34 42362306a36Sopenharmony_ci ldd [%o0 + 0x70], %f36 42462306a36Sopenharmony_ci ldd [%o0 + 0x78], %f38 42562306a36Sopenharmony_ci ldd [%o0 + 0x80], %f40 42662306a36Sopenharmony_ci ldd [%o0 + 0x88], %f42 42762306a36Sopenharmony_ci ldd [%o0 + 0x90], %f44 42862306a36Sopenharmony_ci ldd [%o0 + 0x98], %f46 42962306a36Sopenharmony_ci ldd [%o0 + 0xa0], %f48 43062306a36Sopenharmony_ci ldd [%o0 + 0xa8], %f50 43162306a36Sopenharmony_ci fxor %f8, %f4, %f4 43262306a36Sopenharmony_ci fxor %f10, %f6, %f6 43362306a36Sopenharmony_ci ENCRYPT_128(12, 4, 6, 0, 2) 43462306a36Sopenharmony_ci st %f4, [%o2 + 0x00] 43562306a36Sopenharmony_ci st %f5, [%o2 + 0x04] 43662306a36Sopenharmony_ci st %f6, [%o2 + 0x08] 43762306a36Sopenharmony_ci st %f7, [%o2 + 0x0c] 43862306a36Sopenharmony_ci retl 43962306a36Sopenharmony_ci VISExit 44062306a36Sopenharmony_ciENDPROC(aes_sparc64_encrypt_128) 44162306a36Sopenharmony_ci 44262306a36Sopenharmony_ci .align 32 44362306a36Sopenharmony_ciENTRY(aes_sparc64_encrypt_192) 44462306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output */ 44562306a36Sopenharmony_ci VISEntry 44662306a36Sopenharmony_ci ld [%o1 + 0x00], %f4 44762306a36Sopenharmony_ci ld [%o1 + 0x04], %f5 44862306a36Sopenharmony_ci ld [%o1 + 0x08], %f6 44962306a36Sopenharmony_ci ld [%o1 + 0x0c], %f7 45062306a36Sopenharmony_ci 45162306a36Sopenharmony_ci ldd [%o0 + 0x00], %f8 45262306a36Sopenharmony_ci ldd [%o0 + 0x08], %f10 45362306a36Sopenharmony_ci 45462306a36Sopenharmony_ci fxor %f8, %f4, %f4 45562306a36Sopenharmony_ci fxor %f10, %f6, %f6 45662306a36Sopenharmony_ci 45762306a36Sopenharmony_ci ldd [%o0 + 0x10], %f8 45862306a36Sopenharmony_ci ldd [%o0 + 0x18], %f10 45962306a36Sopenharmony_ci ldd [%o0 + 0x20], %f12 46062306a36Sopenharmony_ci ldd [%o0 + 0x28], %f14 46162306a36Sopenharmony_ci add %o0, 0x20, %o0 46262306a36Sopenharmony_ci 46362306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2) 46462306a36Sopenharmony_ci 46562306a36Sopenharmony_ci ldd [%o0 + 0x10], %f12 46662306a36Sopenharmony_ci ldd [%o0 + 0x18], %f14 46762306a36Sopenharmony_ci ldd [%o0 + 0x20], %f16 46862306a36Sopenharmony_ci ldd [%o0 + 0x28], %f18 46962306a36Sopenharmony_ci ldd [%o0 + 0x30], %f20 47062306a36Sopenharmony_ci ldd [%o0 + 0x38], %f22 47162306a36Sopenharmony_ci ldd [%o0 + 0x40], %f24 47262306a36Sopenharmony_ci ldd [%o0 + 0x48], %f26 47362306a36Sopenharmony_ci ldd [%o0 + 0x50], %f28 47462306a36Sopenharmony_ci ldd [%o0 + 0x58], %f30 47562306a36Sopenharmony_ci ldd [%o0 + 0x60], %f32 47662306a36Sopenharmony_ci ldd [%o0 + 0x68], %f34 47762306a36Sopenharmony_ci ldd [%o0 + 0x70], %f36 47862306a36Sopenharmony_ci ldd [%o0 + 0x78], %f38 47962306a36Sopenharmony_ci ldd [%o0 + 0x80], %f40 48062306a36Sopenharmony_ci ldd [%o0 + 0x88], %f42 48162306a36Sopenharmony_ci ldd [%o0 + 0x90], %f44 48262306a36Sopenharmony_ci ldd [%o0 + 0x98], %f46 48362306a36Sopenharmony_ci ldd [%o0 + 0xa0], %f48 48462306a36Sopenharmony_ci ldd [%o0 + 0xa8], %f50 48562306a36Sopenharmony_ci 48662306a36Sopenharmony_ci 48762306a36Sopenharmony_ci ENCRYPT_128(12, 4, 6, 0, 2) 48862306a36Sopenharmony_ci 48962306a36Sopenharmony_ci st %f4, [%o2 + 0x00] 49062306a36Sopenharmony_ci st %f5, [%o2 + 0x04] 49162306a36Sopenharmony_ci st %f6, [%o2 + 0x08] 49262306a36Sopenharmony_ci st %f7, [%o2 + 0x0c] 49362306a36Sopenharmony_ci 49462306a36Sopenharmony_ci retl 49562306a36Sopenharmony_ci VISExit 49662306a36Sopenharmony_ciENDPROC(aes_sparc64_encrypt_192) 49762306a36Sopenharmony_ci 49862306a36Sopenharmony_ci .align 32 49962306a36Sopenharmony_ciENTRY(aes_sparc64_encrypt_256) 50062306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output */ 50162306a36Sopenharmony_ci VISEntry 50262306a36Sopenharmony_ci ld [%o1 + 0x00], %f4 50362306a36Sopenharmony_ci ld [%o1 + 0x04], %f5 50462306a36Sopenharmony_ci ld [%o1 + 0x08], %f6 50562306a36Sopenharmony_ci ld [%o1 + 0x0c], %f7 50662306a36Sopenharmony_ci 50762306a36Sopenharmony_ci ldd [%o0 + 0x00], %f8 50862306a36Sopenharmony_ci ldd [%o0 + 0x08], %f10 50962306a36Sopenharmony_ci 51062306a36Sopenharmony_ci fxor %f8, %f4, %f4 51162306a36Sopenharmony_ci fxor %f10, %f6, %f6 51262306a36Sopenharmony_ci 51362306a36Sopenharmony_ci ldd [%o0 + 0x10], %f8 51462306a36Sopenharmony_ci 51562306a36Sopenharmony_ci ldd [%o0 + 0x18], %f10 51662306a36Sopenharmony_ci ldd [%o0 + 0x20], %f12 51762306a36Sopenharmony_ci ldd [%o0 + 0x28], %f14 51862306a36Sopenharmony_ci add %o0, 0x20, %o0 51962306a36Sopenharmony_ci 52062306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2) 52162306a36Sopenharmony_ci 52262306a36Sopenharmony_ci ldd [%o0 + 0x10], %f8 52362306a36Sopenharmony_ci 52462306a36Sopenharmony_ci ldd [%o0 + 0x18], %f10 52562306a36Sopenharmony_ci ldd [%o0 + 0x20], %f12 52662306a36Sopenharmony_ci ldd [%o0 + 0x28], %f14 52762306a36Sopenharmony_ci add %o0, 0x20, %o0 52862306a36Sopenharmony_ci 52962306a36Sopenharmony_ci ENCRYPT_TWO_ROUNDS(8, 4, 6, 0, 2) 53062306a36Sopenharmony_ci 53162306a36Sopenharmony_ci ldd [%o0 + 0x10], %f12 53262306a36Sopenharmony_ci ldd [%o0 + 0x18], %f14 53362306a36Sopenharmony_ci ldd [%o0 + 0x20], %f16 53462306a36Sopenharmony_ci ldd [%o0 + 0x28], %f18 53562306a36Sopenharmony_ci ldd [%o0 + 0x30], %f20 53662306a36Sopenharmony_ci ldd [%o0 + 0x38], %f22 53762306a36Sopenharmony_ci ldd [%o0 + 0x40], %f24 53862306a36Sopenharmony_ci ldd [%o0 + 0x48], %f26 53962306a36Sopenharmony_ci ldd [%o0 + 0x50], %f28 54062306a36Sopenharmony_ci ldd [%o0 + 0x58], %f30 54162306a36Sopenharmony_ci ldd [%o0 + 0x60], %f32 54262306a36Sopenharmony_ci ldd [%o0 + 0x68], %f34 54362306a36Sopenharmony_ci ldd [%o0 + 0x70], %f36 54462306a36Sopenharmony_ci ldd [%o0 + 0x78], %f38 54562306a36Sopenharmony_ci ldd [%o0 + 0x80], %f40 54662306a36Sopenharmony_ci ldd [%o0 + 0x88], %f42 54762306a36Sopenharmony_ci ldd [%o0 + 0x90], %f44 54862306a36Sopenharmony_ci ldd [%o0 + 0x98], %f46 54962306a36Sopenharmony_ci ldd [%o0 + 0xa0], %f48 55062306a36Sopenharmony_ci ldd [%o0 + 0xa8], %f50 55162306a36Sopenharmony_ci 55262306a36Sopenharmony_ci ENCRYPT_128(12, 4, 6, 0, 2) 55362306a36Sopenharmony_ci 55462306a36Sopenharmony_ci st %f4, [%o2 + 0x00] 55562306a36Sopenharmony_ci st %f5, [%o2 + 0x04] 55662306a36Sopenharmony_ci st %f6, [%o2 + 0x08] 55762306a36Sopenharmony_ci st %f7, [%o2 + 0x0c] 55862306a36Sopenharmony_ci 55962306a36Sopenharmony_ci retl 56062306a36Sopenharmony_ci VISExit 56162306a36Sopenharmony_ciENDPROC(aes_sparc64_encrypt_256) 56262306a36Sopenharmony_ci 56362306a36Sopenharmony_ci .align 32 56462306a36Sopenharmony_ciENTRY(aes_sparc64_decrypt_128) 56562306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output */ 56662306a36Sopenharmony_ci VISEntry 56762306a36Sopenharmony_ci ld [%o1 + 0x00], %f4 56862306a36Sopenharmony_ci ld [%o1 + 0x04], %f5 56962306a36Sopenharmony_ci ld [%o1 + 0x08], %f6 57062306a36Sopenharmony_ci ld [%o1 + 0x0c], %f7 57162306a36Sopenharmony_ci ldd [%o0 + 0xa0], %f8 57262306a36Sopenharmony_ci ldd [%o0 + 0xa8], %f10 57362306a36Sopenharmony_ci ldd [%o0 + 0x98], %f12 57462306a36Sopenharmony_ci ldd [%o0 + 0x90], %f14 57562306a36Sopenharmony_ci ldd [%o0 + 0x88], %f16 57662306a36Sopenharmony_ci ldd [%o0 + 0x80], %f18 57762306a36Sopenharmony_ci ldd [%o0 + 0x78], %f20 57862306a36Sopenharmony_ci ldd [%o0 + 0x70], %f22 57962306a36Sopenharmony_ci ldd [%o0 + 0x68], %f24 58062306a36Sopenharmony_ci ldd [%o0 + 0x60], %f26 58162306a36Sopenharmony_ci ldd [%o0 + 0x58], %f28 58262306a36Sopenharmony_ci ldd [%o0 + 0x50], %f30 58362306a36Sopenharmony_ci ldd [%o0 + 0x48], %f32 58462306a36Sopenharmony_ci ldd [%o0 + 0x40], %f34 58562306a36Sopenharmony_ci ldd [%o0 + 0x38], %f36 58662306a36Sopenharmony_ci ldd [%o0 + 0x30], %f38 58762306a36Sopenharmony_ci ldd [%o0 + 0x28], %f40 58862306a36Sopenharmony_ci ldd [%o0 + 0x20], %f42 58962306a36Sopenharmony_ci ldd [%o0 + 0x18], %f44 59062306a36Sopenharmony_ci ldd [%o0 + 0x10], %f46 59162306a36Sopenharmony_ci ldd [%o0 + 0x08], %f48 59262306a36Sopenharmony_ci ldd [%o0 + 0x00], %f50 59362306a36Sopenharmony_ci fxor %f8, %f4, %f4 59462306a36Sopenharmony_ci fxor %f10, %f6, %f6 59562306a36Sopenharmony_ci DECRYPT_128(12, 4, 6, 0, 2) 59662306a36Sopenharmony_ci st %f4, [%o2 + 0x00] 59762306a36Sopenharmony_ci st %f5, [%o2 + 0x04] 59862306a36Sopenharmony_ci st %f6, [%o2 + 0x08] 59962306a36Sopenharmony_ci st %f7, [%o2 + 0x0c] 60062306a36Sopenharmony_ci retl 60162306a36Sopenharmony_ci VISExit 60262306a36Sopenharmony_ciENDPROC(aes_sparc64_decrypt_128) 60362306a36Sopenharmony_ci 60462306a36Sopenharmony_ci .align 32 60562306a36Sopenharmony_ciENTRY(aes_sparc64_decrypt_192) 60662306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output */ 60762306a36Sopenharmony_ci VISEntry 60862306a36Sopenharmony_ci ld [%o1 + 0x00], %f4 60962306a36Sopenharmony_ci ld [%o1 + 0x04], %f5 61062306a36Sopenharmony_ci ld [%o1 + 0x08], %f6 61162306a36Sopenharmony_ci ld [%o1 + 0x0c], %f7 61262306a36Sopenharmony_ci ldd [%o0 + 0xc0], %f8 61362306a36Sopenharmony_ci ldd [%o0 + 0xc8], %f10 61462306a36Sopenharmony_ci ldd [%o0 + 0xb8], %f12 61562306a36Sopenharmony_ci ldd [%o0 + 0xb0], %f14 61662306a36Sopenharmony_ci ldd [%o0 + 0xa8], %f16 61762306a36Sopenharmony_ci ldd [%o0 + 0xa0], %f18 61862306a36Sopenharmony_ci fxor %f8, %f4, %f4 61962306a36Sopenharmony_ci fxor %f10, %f6, %f6 62062306a36Sopenharmony_ci ldd [%o0 + 0x98], %f20 62162306a36Sopenharmony_ci ldd [%o0 + 0x90], %f22 62262306a36Sopenharmony_ci ldd [%o0 + 0x88], %f24 62362306a36Sopenharmony_ci ldd [%o0 + 0x80], %f26 62462306a36Sopenharmony_ci DECRYPT_TWO_ROUNDS(12, 4, 6, 0, 2) 62562306a36Sopenharmony_ci ldd [%o0 + 0x78], %f28 62662306a36Sopenharmony_ci ldd [%o0 + 0x70], %f30 62762306a36Sopenharmony_ci ldd [%o0 + 0x68], %f32 62862306a36Sopenharmony_ci ldd [%o0 + 0x60], %f34 62962306a36Sopenharmony_ci ldd [%o0 + 0x58], %f36 63062306a36Sopenharmony_ci ldd [%o0 + 0x50], %f38 63162306a36Sopenharmony_ci ldd [%o0 + 0x48], %f40 63262306a36Sopenharmony_ci ldd [%o0 + 0x40], %f42 63362306a36Sopenharmony_ci ldd [%o0 + 0x38], %f44 63462306a36Sopenharmony_ci ldd [%o0 + 0x30], %f46 63562306a36Sopenharmony_ci ldd [%o0 + 0x28], %f48 63662306a36Sopenharmony_ci ldd [%o0 + 0x20], %f50 63762306a36Sopenharmony_ci ldd [%o0 + 0x18], %f52 63862306a36Sopenharmony_ci ldd [%o0 + 0x10], %f54 63962306a36Sopenharmony_ci ldd [%o0 + 0x08], %f56 64062306a36Sopenharmony_ci ldd [%o0 + 0x00], %f58 64162306a36Sopenharmony_ci DECRYPT_128(20, 4, 6, 0, 2) 64262306a36Sopenharmony_ci st %f4, [%o2 + 0x00] 64362306a36Sopenharmony_ci st %f5, [%o2 + 0x04] 64462306a36Sopenharmony_ci st %f6, [%o2 + 0x08] 64562306a36Sopenharmony_ci st %f7, [%o2 + 0x0c] 64662306a36Sopenharmony_ci retl 64762306a36Sopenharmony_ci VISExit 64862306a36Sopenharmony_ciENDPROC(aes_sparc64_decrypt_192) 64962306a36Sopenharmony_ci 65062306a36Sopenharmony_ci .align 32 65162306a36Sopenharmony_ciENTRY(aes_sparc64_decrypt_256) 65262306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output */ 65362306a36Sopenharmony_ci VISEntry 65462306a36Sopenharmony_ci ld [%o1 + 0x00], %f4 65562306a36Sopenharmony_ci ld [%o1 + 0x04], %f5 65662306a36Sopenharmony_ci ld [%o1 + 0x08], %f6 65762306a36Sopenharmony_ci ld [%o1 + 0x0c], %f7 65862306a36Sopenharmony_ci ldd [%o0 + 0xe0], %f8 65962306a36Sopenharmony_ci ldd [%o0 + 0xe8], %f10 66062306a36Sopenharmony_ci ldd [%o0 + 0xd8], %f12 66162306a36Sopenharmony_ci ldd [%o0 + 0xd0], %f14 66262306a36Sopenharmony_ci ldd [%o0 + 0xc8], %f16 66362306a36Sopenharmony_ci fxor %f8, %f4, %f4 66462306a36Sopenharmony_ci ldd [%o0 + 0xc0], %f18 66562306a36Sopenharmony_ci fxor %f10, %f6, %f6 66662306a36Sopenharmony_ci ldd [%o0 + 0xb8], %f20 66762306a36Sopenharmony_ci AES_DROUND23(12, 4, 6, 2) 66862306a36Sopenharmony_ci ldd [%o0 + 0xb0], %f22 66962306a36Sopenharmony_ci AES_DROUND01(14, 4, 6, 0) 67062306a36Sopenharmony_ci ldd [%o0 + 0xa8], %f24 67162306a36Sopenharmony_ci AES_DROUND23(16, 0, 2, 6) 67262306a36Sopenharmony_ci ldd [%o0 + 0xa0], %f26 67362306a36Sopenharmony_ci AES_DROUND01(18, 0, 2, 4) 67462306a36Sopenharmony_ci ldd [%o0 + 0x98], %f12 67562306a36Sopenharmony_ci AES_DROUND23(20, 4, 6, 2) 67662306a36Sopenharmony_ci ldd [%o0 + 0x90], %f14 67762306a36Sopenharmony_ci AES_DROUND01(22, 4, 6, 0) 67862306a36Sopenharmony_ci ldd [%o0 + 0x88], %f16 67962306a36Sopenharmony_ci AES_DROUND23(24, 0, 2, 6) 68062306a36Sopenharmony_ci ldd [%o0 + 0x80], %f18 68162306a36Sopenharmony_ci AES_DROUND01(26, 0, 2, 4) 68262306a36Sopenharmony_ci ldd [%o0 + 0x78], %f20 68362306a36Sopenharmony_ci AES_DROUND23(12, 4, 6, 2) 68462306a36Sopenharmony_ci ldd [%o0 + 0x70], %f22 68562306a36Sopenharmony_ci AES_DROUND01(14, 4, 6, 0) 68662306a36Sopenharmony_ci ldd [%o0 + 0x68], %f24 68762306a36Sopenharmony_ci AES_DROUND23(16, 0, 2, 6) 68862306a36Sopenharmony_ci ldd [%o0 + 0x60], %f26 68962306a36Sopenharmony_ci AES_DROUND01(18, 0, 2, 4) 69062306a36Sopenharmony_ci ldd [%o0 + 0x58], %f28 69162306a36Sopenharmony_ci AES_DROUND23(20, 4, 6, 2) 69262306a36Sopenharmony_ci ldd [%o0 + 0x50], %f30 69362306a36Sopenharmony_ci AES_DROUND01(22, 4, 6, 0) 69462306a36Sopenharmony_ci ldd [%o0 + 0x48], %f32 69562306a36Sopenharmony_ci AES_DROUND23(24, 0, 2, 6) 69662306a36Sopenharmony_ci ldd [%o0 + 0x40], %f34 69762306a36Sopenharmony_ci AES_DROUND01(26, 0, 2, 4) 69862306a36Sopenharmony_ci ldd [%o0 + 0x38], %f36 69962306a36Sopenharmony_ci AES_DROUND23(28, 4, 6, 2) 70062306a36Sopenharmony_ci ldd [%o0 + 0x30], %f38 70162306a36Sopenharmony_ci AES_DROUND01(30, 4, 6, 0) 70262306a36Sopenharmony_ci ldd [%o0 + 0x28], %f40 70362306a36Sopenharmony_ci AES_DROUND23(32, 0, 2, 6) 70462306a36Sopenharmony_ci ldd [%o0 + 0x20], %f42 70562306a36Sopenharmony_ci AES_DROUND01(34, 0, 2, 4) 70662306a36Sopenharmony_ci ldd [%o0 + 0x18], %f44 70762306a36Sopenharmony_ci AES_DROUND23(36, 4, 6, 2) 70862306a36Sopenharmony_ci ldd [%o0 + 0x10], %f46 70962306a36Sopenharmony_ci AES_DROUND01(38, 4, 6, 0) 71062306a36Sopenharmony_ci ldd [%o0 + 0x08], %f48 71162306a36Sopenharmony_ci AES_DROUND23(40, 0, 2, 6) 71262306a36Sopenharmony_ci ldd [%o0 + 0x00], %f50 71362306a36Sopenharmony_ci AES_DROUND01(42, 0, 2, 4) 71462306a36Sopenharmony_ci AES_DROUND23(44, 4, 6, 2) 71562306a36Sopenharmony_ci AES_DROUND01(46, 4, 6, 0) 71662306a36Sopenharmony_ci AES_DROUND23_L(48, 0, 2, 6) 71762306a36Sopenharmony_ci AES_DROUND01_L(50, 0, 2, 4) 71862306a36Sopenharmony_ci st %f4, [%o2 + 0x00] 71962306a36Sopenharmony_ci st %f5, [%o2 + 0x04] 72062306a36Sopenharmony_ci st %f6, [%o2 + 0x08] 72162306a36Sopenharmony_ci st %f7, [%o2 + 0x0c] 72262306a36Sopenharmony_ci retl 72362306a36Sopenharmony_ci VISExit 72462306a36Sopenharmony_ciENDPROC(aes_sparc64_decrypt_256) 72562306a36Sopenharmony_ci 72662306a36Sopenharmony_ci .align 32 72762306a36Sopenharmony_ciENTRY(aes_sparc64_load_encrypt_keys_128) 72862306a36Sopenharmony_ci /* %o0=key */ 72962306a36Sopenharmony_ci VISEntry 73062306a36Sopenharmony_ci ldd [%o0 + 0x10], %f8 73162306a36Sopenharmony_ci ldd [%o0 + 0x18], %f10 73262306a36Sopenharmony_ci ldd [%o0 + 0x20], %f12 73362306a36Sopenharmony_ci ldd [%o0 + 0x28], %f14 73462306a36Sopenharmony_ci ldd [%o0 + 0x30], %f16 73562306a36Sopenharmony_ci ldd [%o0 + 0x38], %f18 73662306a36Sopenharmony_ci ldd [%o0 + 0x40], %f20 73762306a36Sopenharmony_ci ldd [%o0 + 0x48], %f22 73862306a36Sopenharmony_ci ldd [%o0 + 0x50], %f24 73962306a36Sopenharmony_ci ldd [%o0 + 0x58], %f26 74062306a36Sopenharmony_ci ldd [%o0 + 0x60], %f28 74162306a36Sopenharmony_ci ldd [%o0 + 0x68], %f30 74262306a36Sopenharmony_ci ldd [%o0 + 0x70], %f32 74362306a36Sopenharmony_ci ldd [%o0 + 0x78], %f34 74462306a36Sopenharmony_ci ldd [%o0 + 0x80], %f36 74562306a36Sopenharmony_ci ldd [%o0 + 0x88], %f38 74662306a36Sopenharmony_ci ldd [%o0 + 0x90], %f40 74762306a36Sopenharmony_ci ldd [%o0 + 0x98], %f42 74862306a36Sopenharmony_ci ldd [%o0 + 0xa0], %f44 74962306a36Sopenharmony_ci retl 75062306a36Sopenharmony_ci ldd [%o0 + 0xa8], %f46 75162306a36Sopenharmony_ciENDPROC(aes_sparc64_load_encrypt_keys_128) 75262306a36Sopenharmony_ci 75362306a36Sopenharmony_ci .align 32 75462306a36Sopenharmony_ciENTRY(aes_sparc64_load_encrypt_keys_192) 75562306a36Sopenharmony_ci /* %o0=key */ 75662306a36Sopenharmony_ci VISEntry 75762306a36Sopenharmony_ci ldd [%o0 + 0x10], %f8 75862306a36Sopenharmony_ci ldd [%o0 + 0x18], %f10 75962306a36Sopenharmony_ci ldd [%o0 + 0x20], %f12 76062306a36Sopenharmony_ci ldd [%o0 + 0x28], %f14 76162306a36Sopenharmony_ci ldd [%o0 + 0x30], %f16 76262306a36Sopenharmony_ci ldd [%o0 + 0x38], %f18 76362306a36Sopenharmony_ci ldd [%o0 + 0x40], %f20 76462306a36Sopenharmony_ci ldd [%o0 + 0x48], %f22 76562306a36Sopenharmony_ci ldd [%o0 + 0x50], %f24 76662306a36Sopenharmony_ci ldd [%o0 + 0x58], %f26 76762306a36Sopenharmony_ci ldd [%o0 + 0x60], %f28 76862306a36Sopenharmony_ci ldd [%o0 + 0x68], %f30 76962306a36Sopenharmony_ci ldd [%o0 + 0x70], %f32 77062306a36Sopenharmony_ci ldd [%o0 + 0x78], %f34 77162306a36Sopenharmony_ci ldd [%o0 + 0x80], %f36 77262306a36Sopenharmony_ci ldd [%o0 + 0x88], %f38 77362306a36Sopenharmony_ci ldd [%o0 + 0x90], %f40 77462306a36Sopenharmony_ci ldd [%o0 + 0x98], %f42 77562306a36Sopenharmony_ci ldd [%o0 + 0xa0], %f44 77662306a36Sopenharmony_ci ldd [%o0 + 0xa8], %f46 77762306a36Sopenharmony_ci ldd [%o0 + 0xb0], %f48 77862306a36Sopenharmony_ci ldd [%o0 + 0xb8], %f50 77962306a36Sopenharmony_ci ldd [%o0 + 0xc0], %f52 78062306a36Sopenharmony_ci retl 78162306a36Sopenharmony_ci ldd [%o0 + 0xc8], %f54 78262306a36Sopenharmony_ciENDPROC(aes_sparc64_load_encrypt_keys_192) 78362306a36Sopenharmony_ci 78462306a36Sopenharmony_ci .align 32 78562306a36Sopenharmony_ciENTRY(aes_sparc64_load_encrypt_keys_256) 78662306a36Sopenharmony_ci /* %o0=key */ 78762306a36Sopenharmony_ci VISEntry 78862306a36Sopenharmony_ci ldd [%o0 + 0x10], %f8 78962306a36Sopenharmony_ci ldd [%o0 + 0x18], %f10 79062306a36Sopenharmony_ci ldd [%o0 + 0x20], %f12 79162306a36Sopenharmony_ci ldd [%o0 + 0x28], %f14 79262306a36Sopenharmony_ci ldd [%o0 + 0x30], %f16 79362306a36Sopenharmony_ci ldd [%o0 + 0x38], %f18 79462306a36Sopenharmony_ci ldd [%o0 + 0x40], %f20 79562306a36Sopenharmony_ci ldd [%o0 + 0x48], %f22 79662306a36Sopenharmony_ci ldd [%o0 + 0x50], %f24 79762306a36Sopenharmony_ci ldd [%o0 + 0x58], %f26 79862306a36Sopenharmony_ci ldd [%o0 + 0x60], %f28 79962306a36Sopenharmony_ci ldd [%o0 + 0x68], %f30 80062306a36Sopenharmony_ci ldd [%o0 + 0x70], %f32 80162306a36Sopenharmony_ci ldd [%o0 + 0x78], %f34 80262306a36Sopenharmony_ci ldd [%o0 + 0x80], %f36 80362306a36Sopenharmony_ci ldd [%o0 + 0x88], %f38 80462306a36Sopenharmony_ci ldd [%o0 + 0x90], %f40 80562306a36Sopenharmony_ci ldd [%o0 + 0x98], %f42 80662306a36Sopenharmony_ci ldd [%o0 + 0xa0], %f44 80762306a36Sopenharmony_ci ldd [%o0 + 0xa8], %f46 80862306a36Sopenharmony_ci ldd [%o0 + 0xb0], %f48 80962306a36Sopenharmony_ci ldd [%o0 + 0xb8], %f50 81062306a36Sopenharmony_ci ldd [%o0 + 0xc0], %f52 81162306a36Sopenharmony_ci ldd [%o0 + 0xc8], %f54 81262306a36Sopenharmony_ci ldd [%o0 + 0xd0], %f56 81362306a36Sopenharmony_ci ldd [%o0 + 0xd8], %f58 81462306a36Sopenharmony_ci ldd [%o0 + 0xe0], %f60 81562306a36Sopenharmony_ci retl 81662306a36Sopenharmony_ci ldd [%o0 + 0xe8], %f62 81762306a36Sopenharmony_ciENDPROC(aes_sparc64_load_encrypt_keys_256) 81862306a36Sopenharmony_ci 81962306a36Sopenharmony_ci .align 32 82062306a36Sopenharmony_ciENTRY(aes_sparc64_load_decrypt_keys_128) 82162306a36Sopenharmony_ci /* %o0=key */ 82262306a36Sopenharmony_ci VISEntry 82362306a36Sopenharmony_ci ldd [%o0 + 0x98], %f8 82462306a36Sopenharmony_ci ldd [%o0 + 0x90], %f10 82562306a36Sopenharmony_ci ldd [%o0 + 0x88], %f12 82662306a36Sopenharmony_ci ldd [%o0 + 0x80], %f14 82762306a36Sopenharmony_ci ldd [%o0 + 0x78], %f16 82862306a36Sopenharmony_ci ldd [%o0 + 0x70], %f18 82962306a36Sopenharmony_ci ldd [%o0 + 0x68], %f20 83062306a36Sopenharmony_ci ldd [%o0 + 0x60], %f22 83162306a36Sopenharmony_ci ldd [%o0 + 0x58], %f24 83262306a36Sopenharmony_ci ldd [%o0 + 0x50], %f26 83362306a36Sopenharmony_ci ldd [%o0 + 0x48], %f28 83462306a36Sopenharmony_ci ldd [%o0 + 0x40], %f30 83562306a36Sopenharmony_ci ldd [%o0 + 0x38], %f32 83662306a36Sopenharmony_ci ldd [%o0 + 0x30], %f34 83762306a36Sopenharmony_ci ldd [%o0 + 0x28], %f36 83862306a36Sopenharmony_ci ldd [%o0 + 0x20], %f38 83962306a36Sopenharmony_ci ldd [%o0 + 0x18], %f40 84062306a36Sopenharmony_ci ldd [%o0 + 0x10], %f42 84162306a36Sopenharmony_ci ldd [%o0 + 0x08], %f44 84262306a36Sopenharmony_ci retl 84362306a36Sopenharmony_ci ldd [%o0 + 0x00], %f46 84462306a36Sopenharmony_ciENDPROC(aes_sparc64_load_decrypt_keys_128) 84562306a36Sopenharmony_ci 84662306a36Sopenharmony_ci .align 32 84762306a36Sopenharmony_ciENTRY(aes_sparc64_load_decrypt_keys_192) 84862306a36Sopenharmony_ci /* %o0=key */ 84962306a36Sopenharmony_ci VISEntry 85062306a36Sopenharmony_ci ldd [%o0 + 0xb8], %f8 85162306a36Sopenharmony_ci ldd [%o0 + 0xb0], %f10 85262306a36Sopenharmony_ci ldd [%o0 + 0xa8], %f12 85362306a36Sopenharmony_ci ldd [%o0 + 0xa0], %f14 85462306a36Sopenharmony_ci ldd [%o0 + 0x98], %f16 85562306a36Sopenharmony_ci ldd [%o0 + 0x90], %f18 85662306a36Sopenharmony_ci ldd [%o0 + 0x88], %f20 85762306a36Sopenharmony_ci ldd [%o0 + 0x80], %f22 85862306a36Sopenharmony_ci ldd [%o0 + 0x78], %f24 85962306a36Sopenharmony_ci ldd [%o0 + 0x70], %f26 86062306a36Sopenharmony_ci ldd [%o0 + 0x68], %f28 86162306a36Sopenharmony_ci ldd [%o0 + 0x60], %f30 86262306a36Sopenharmony_ci ldd [%o0 + 0x58], %f32 86362306a36Sopenharmony_ci ldd [%o0 + 0x50], %f34 86462306a36Sopenharmony_ci ldd [%o0 + 0x48], %f36 86562306a36Sopenharmony_ci ldd [%o0 + 0x40], %f38 86662306a36Sopenharmony_ci ldd [%o0 + 0x38], %f40 86762306a36Sopenharmony_ci ldd [%o0 + 0x30], %f42 86862306a36Sopenharmony_ci ldd [%o0 + 0x28], %f44 86962306a36Sopenharmony_ci ldd [%o0 + 0x20], %f46 87062306a36Sopenharmony_ci ldd [%o0 + 0x18], %f48 87162306a36Sopenharmony_ci ldd [%o0 + 0x10], %f50 87262306a36Sopenharmony_ci ldd [%o0 + 0x08], %f52 87362306a36Sopenharmony_ci retl 87462306a36Sopenharmony_ci ldd [%o0 + 0x00], %f54 87562306a36Sopenharmony_ciENDPROC(aes_sparc64_load_decrypt_keys_192) 87662306a36Sopenharmony_ci 87762306a36Sopenharmony_ci .align 32 87862306a36Sopenharmony_ciENTRY(aes_sparc64_load_decrypt_keys_256) 87962306a36Sopenharmony_ci /* %o0=key */ 88062306a36Sopenharmony_ci VISEntry 88162306a36Sopenharmony_ci ldd [%o0 + 0xd8], %f8 88262306a36Sopenharmony_ci ldd [%o0 + 0xd0], %f10 88362306a36Sopenharmony_ci ldd [%o0 + 0xc8], %f12 88462306a36Sopenharmony_ci ldd [%o0 + 0xc0], %f14 88562306a36Sopenharmony_ci ldd [%o0 + 0xb8], %f16 88662306a36Sopenharmony_ci ldd [%o0 + 0xb0], %f18 88762306a36Sopenharmony_ci ldd [%o0 + 0xa8], %f20 88862306a36Sopenharmony_ci ldd [%o0 + 0xa0], %f22 88962306a36Sopenharmony_ci ldd [%o0 + 0x98], %f24 89062306a36Sopenharmony_ci ldd [%o0 + 0x90], %f26 89162306a36Sopenharmony_ci ldd [%o0 + 0x88], %f28 89262306a36Sopenharmony_ci ldd [%o0 + 0x80], %f30 89362306a36Sopenharmony_ci ldd [%o0 + 0x78], %f32 89462306a36Sopenharmony_ci ldd [%o0 + 0x70], %f34 89562306a36Sopenharmony_ci ldd [%o0 + 0x68], %f36 89662306a36Sopenharmony_ci ldd [%o0 + 0x60], %f38 89762306a36Sopenharmony_ci ldd [%o0 + 0x58], %f40 89862306a36Sopenharmony_ci ldd [%o0 + 0x50], %f42 89962306a36Sopenharmony_ci ldd [%o0 + 0x48], %f44 90062306a36Sopenharmony_ci ldd [%o0 + 0x40], %f46 90162306a36Sopenharmony_ci ldd [%o0 + 0x38], %f48 90262306a36Sopenharmony_ci ldd [%o0 + 0x30], %f50 90362306a36Sopenharmony_ci ldd [%o0 + 0x28], %f52 90462306a36Sopenharmony_ci ldd [%o0 + 0x20], %f54 90562306a36Sopenharmony_ci ldd [%o0 + 0x18], %f56 90662306a36Sopenharmony_ci ldd [%o0 + 0x10], %f58 90762306a36Sopenharmony_ci ldd [%o0 + 0x08], %f60 90862306a36Sopenharmony_ci retl 90962306a36Sopenharmony_ci ldd [%o0 + 0x00], %f62 91062306a36Sopenharmony_ciENDPROC(aes_sparc64_load_decrypt_keys_256) 91162306a36Sopenharmony_ci 91262306a36Sopenharmony_ci .align 32 91362306a36Sopenharmony_ciENTRY(aes_sparc64_ecb_encrypt_128) 91462306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output, %o3=len */ 91562306a36Sopenharmony_ci ldx [%o0 + 0x00], %g1 91662306a36Sopenharmony_ci subcc %o3, 0x10, %o3 91762306a36Sopenharmony_ci be 10f 91862306a36Sopenharmony_ci ldx [%o0 + 0x08], %g2 91962306a36Sopenharmony_ci1: ldx [%o1 + 0x00], %g3 92062306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 92162306a36Sopenharmony_ci ldx [%o1 + 0x10], %o4 92262306a36Sopenharmony_ci ldx [%o1 + 0x18], %o5 92362306a36Sopenharmony_ci xor %g1, %g3, %g3 92462306a36Sopenharmony_ci xor %g2, %g7, %g7 92562306a36Sopenharmony_ci MOVXTOD_G3_F4 92662306a36Sopenharmony_ci MOVXTOD_G7_F6 92762306a36Sopenharmony_ci xor %g1, %o4, %g3 92862306a36Sopenharmony_ci xor %g2, %o5, %g7 92962306a36Sopenharmony_ci MOVXTOD_G3_F60 93062306a36Sopenharmony_ci MOVXTOD_G7_F62 93162306a36Sopenharmony_ci ENCRYPT_128_2(8, 4, 6, 60, 62, 0, 2, 56, 58) 93262306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 93362306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 93462306a36Sopenharmony_ci std %f60, [%o2 + 0x10] 93562306a36Sopenharmony_ci std %f62, [%o2 + 0x18] 93662306a36Sopenharmony_ci sub %o3, 0x20, %o3 93762306a36Sopenharmony_ci add %o1, 0x20, %o1 93862306a36Sopenharmony_ci brgz %o3, 1b 93962306a36Sopenharmony_ci add %o2, 0x20, %o2 94062306a36Sopenharmony_ci brlz,pt %o3, 11f 94162306a36Sopenharmony_ci nop 94262306a36Sopenharmony_ci10: ldx [%o1 + 0x00], %g3 94362306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 94462306a36Sopenharmony_ci xor %g1, %g3, %g3 94562306a36Sopenharmony_ci xor %g2, %g7, %g7 94662306a36Sopenharmony_ci MOVXTOD_G3_F4 94762306a36Sopenharmony_ci MOVXTOD_G7_F6 94862306a36Sopenharmony_ci ENCRYPT_128(8, 4, 6, 0, 2) 94962306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 95062306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 95162306a36Sopenharmony_ci11: retl 95262306a36Sopenharmony_ci nop 95362306a36Sopenharmony_ciENDPROC(aes_sparc64_ecb_encrypt_128) 95462306a36Sopenharmony_ci 95562306a36Sopenharmony_ci .align 32 95662306a36Sopenharmony_ciENTRY(aes_sparc64_ecb_encrypt_192) 95762306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output, %o3=len */ 95862306a36Sopenharmony_ci ldx [%o0 + 0x00], %g1 95962306a36Sopenharmony_ci subcc %o3, 0x10, %o3 96062306a36Sopenharmony_ci be 10f 96162306a36Sopenharmony_ci ldx [%o0 + 0x08], %g2 96262306a36Sopenharmony_ci1: ldx [%o1 + 0x00], %g3 96362306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 96462306a36Sopenharmony_ci ldx [%o1 + 0x10], %o4 96562306a36Sopenharmony_ci ldx [%o1 + 0x18], %o5 96662306a36Sopenharmony_ci xor %g1, %g3, %g3 96762306a36Sopenharmony_ci xor %g2, %g7, %g7 96862306a36Sopenharmony_ci MOVXTOD_G3_F4 96962306a36Sopenharmony_ci MOVXTOD_G7_F6 97062306a36Sopenharmony_ci xor %g1, %o4, %g3 97162306a36Sopenharmony_ci xor %g2, %o5, %g7 97262306a36Sopenharmony_ci MOVXTOD_G3_F60 97362306a36Sopenharmony_ci MOVXTOD_G7_F62 97462306a36Sopenharmony_ci ENCRYPT_192_2(8, 4, 6, 60, 62, 0, 2, 56, 58) 97562306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 97662306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 97762306a36Sopenharmony_ci std %f60, [%o2 + 0x10] 97862306a36Sopenharmony_ci std %f62, [%o2 + 0x18] 97962306a36Sopenharmony_ci sub %o3, 0x20, %o3 98062306a36Sopenharmony_ci add %o1, 0x20, %o1 98162306a36Sopenharmony_ci brgz %o3, 1b 98262306a36Sopenharmony_ci add %o2, 0x20, %o2 98362306a36Sopenharmony_ci brlz,pt %o3, 11f 98462306a36Sopenharmony_ci nop 98562306a36Sopenharmony_ci10: ldx [%o1 + 0x00], %g3 98662306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 98762306a36Sopenharmony_ci xor %g1, %g3, %g3 98862306a36Sopenharmony_ci xor %g2, %g7, %g7 98962306a36Sopenharmony_ci MOVXTOD_G3_F4 99062306a36Sopenharmony_ci MOVXTOD_G7_F6 99162306a36Sopenharmony_ci ENCRYPT_192(8, 4, 6, 0, 2) 99262306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 99362306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 99462306a36Sopenharmony_ci11: retl 99562306a36Sopenharmony_ci nop 99662306a36Sopenharmony_ciENDPROC(aes_sparc64_ecb_encrypt_192) 99762306a36Sopenharmony_ci 99862306a36Sopenharmony_ci .align 32 99962306a36Sopenharmony_ciENTRY(aes_sparc64_ecb_encrypt_256) 100062306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output, %o3=len */ 100162306a36Sopenharmony_ci ldx [%o0 + 0x00], %g1 100262306a36Sopenharmony_ci subcc %o3, 0x10, %o3 100362306a36Sopenharmony_ci be 10f 100462306a36Sopenharmony_ci ldx [%o0 + 0x08], %g2 100562306a36Sopenharmony_ci1: ldx [%o1 + 0x00], %g3 100662306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 100762306a36Sopenharmony_ci ldx [%o1 + 0x10], %o4 100862306a36Sopenharmony_ci ldx [%o1 + 0x18], %o5 100962306a36Sopenharmony_ci xor %g1, %g3, %g3 101062306a36Sopenharmony_ci xor %g2, %g7, %g7 101162306a36Sopenharmony_ci MOVXTOD_G3_F4 101262306a36Sopenharmony_ci MOVXTOD_G7_F6 101362306a36Sopenharmony_ci xor %g1, %o4, %g3 101462306a36Sopenharmony_ci xor %g2, %o5, %g7 101562306a36Sopenharmony_ci MOVXTOD_G3_F0 101662306a36Sopenharmony_ci MOVXTOD_G7_F2 101762306a36Sopenharmony_ci ENCRYPT_256_2(8, 4, 6, 0, 2) 101862306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 101962306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 102062306a36Sopenharmony_ci std %f0, [%o2 + 0x10] 102162306a36Sopenharmony_ci std %f2, [%o2 + 0x18] 102262306a36Sopenharmony_ci sub %o3, 0x20, %o3 102362306a36Sopenharmony_ci add %o1, 0x20, %o1 102462306a36Sopenharmony_ci brgz %o3, 1b 102562306a36Sopenharmony_ci add %o2, 0x20, %o2 102662306a36Sopenharmony_ci brlz,pt %o3, 11f 102762306a36Sopenharmony_ci nop 102862306a36Sopenharmony_ci10: ldd [%o0 + 0xd0], %f56 102962306a36Sopenharmony_ci ldd [%o0 + 0xd8], %f58 103062306a36Sopenharmony_ci ldd [%o0 + 0xe0], %f60 103162306a36Sopenharmony_ci ldd [%o0 + 0xe8], %f62 103262306a36Sopenharmony_ci ldx [%o1 + 0x00], %g3 103362306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 103462306a36Sopenharmony_ci xor %g1, %g3, %g3 103562306a36Sopenharmony_ci xor %g2, %g7, %g7 103662306a36Sopenharmony_ci MOVXTOD_G3_F4 103762306a36Sopenharmony_ci MOVXTOD_G7_F6 103862306a36Sopenharmony_ci ENCRYPT_256(8, 4, 6, 0, 2) 103962306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 104062306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 104162306a36Sopenharmony_ci11: retl 104262306a36Sopenharmony_ci nop 104362306a36Sopenharmony_ciENDPROC(aes_sparc64_ecb_encrypt_256) 104462306a36Sopenharmony_ci 104562306a36Sopenharmony_ci .align 32 104662306a36Sopenharmony_ciENTRY(aes_sparc64_ecb_decrypt_128) 104762306a36Sopenharmony_ci /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */ 104862306a36Sopenharmony_ci ldx [%o0 - 0x10], %g1 104962306a36Sopenharmony_ci subcc %o3, 0x10, %o3 105062306a36Sopenharmony_ci be 10f 105162306a36Sopenharmony_ci ldx [%o0 - 0x08], %g2 105262306a36Sopenharmony_ci1: ldx [%o1 + 0x00], %g3 105362306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 105462306a36Sopenharmony_ci ldx [%o1 + 0x10], %o4 105562306a36Sopenharmony_ci ldx [%o1 + 0x18], %o5 105662306a36Sopenharmony_ci xor %g1, %g3, %g3 105762306a36Sopenharmony_ci xor %g2, %g7, %g7 105862306a36Sopenharmony_ci MOVXTOD_G3_F4 105962306a36Sopenharmony_ci MOVXTOD_G7_F6 106062306a36Sopenharmony_ci xor %g1, %o4, %g3 106162306a36Sopenharmony_ci xor %g2, %o5, %g7 106262306a36Sopenharmony_ci MOVXTOD_G3_F60 106362306a36Sopenharmony_ci MOVXTOD_G7_F62 106462306a36Sopenharmony_ci DECRYPT_128_2(8, 4, 6, 60, 62, 0, 2, 56, 58) 106562306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 106662306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 106762306a36Sopenharmony_ci std %f60, [%o2 + 0x10] 106862306a36Sopenharmony_ci std %f62, [%o2 + 0x18] 106962306a36Sopenharmony_ci sub %o3, 0x20, %o3 107062306a36Sopenharmony_ci add %o1, 0x20, %o1 107162306a36Sopenharmony_ci brgz,pt %o3, 1b 107262306a36Sopenharmony_ci add %o2, 0x20, %o2 107362306a36Sopenharmony_ci brlz,pt %o3, 11f 107462306a36Sopenharmony_ci nop 107562306a36Sopenharmony_ci10: ldx [%o1 + 0x00], %g3 107662306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 107762306a36Sopenharmony_ci xor %g1, %g3, %g3 107862306a36Sopenharmony_ci xor %g2, %g7, %g7 107962306a36Sopenharmony_ci MOVXTOD_G3_F4 108062306a36Sopenharmony_ci MOVXTOD_G7_F6 108162306a36Sopenharmony_ci DECRYPT_128(8, 4, 6, 0, 2) 108262306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 108362306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 108462306a36Sopenharmony_ci11: retl 108562306a36Sopenharmony_ci nop 108662306a36Sopenharmony_ciENDPROC(aes_sparc64_ecb_decrypt_128) 108762306a36Sopenharmony_ci 108862306a36Sopenharmony_ci .align 32 108962306a36Sopenharmony_ciENTRY(aes_sparc64_ecb_decrypt_192) 109062306a36Sopenharmony_ci /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */ 109162306a36Sopenharmony_ci ldx [%o0 - 0x10], %g1 109262306a36Sopenharmony_ci subcc %o3, 0x10, %o3 109362306a36Sopenharmony_ci be 10f 109462306a36Sopenharmony_ci ldx [%o0 - 0x08], %g2 109562306a36Sopenharmony_ci1: ldx [%o1 + 0x00], %g3 109662306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 109762306a36Sopenharmony_ci ldx [%o1 + 0x10], %o4 109862306a36Sopenharmony_ci ldx [%o1 + 0x18], %o5 109962306a36Sopenharmony_ci xor %g1, %g3, %g3 110062306a36Sopenharmony_ci xor %g2, %g7, %g7 110162306a36Sopenharmony_ci MOVXTOD_G3_F4 110262306a36Sopenharmony_ci MOVXTOD_G7_F6 110362306a36Sopenharmony_ci xor %g1, %o4, %g3 110462306a36Sopenharmony_ci xor %g2, %o5, %g7 110562306a36Sopenharmony_ci MOVXTOD_G3_F60 110662306a36Sopenharmony_ci MOVXTOD_G7_F62 110762306a36Sopenharmony_ci DECRYPT_192_2(8, 4, 6, 60, 62, 0, 2, 56, 58) 110862306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 110962306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 111062306a36Sopenharmony_ci std %f60, [%o2 + 0x10] 111162306a36Sopenharmony_ci std %f62, [%o2 + 0x18] 111262306a36Sopenharmony_ci sub %o3, 0x20, %o3 111362306a36Sopenharmony_ci add %o1, 0x20, %o1 111462306a36Sopenharmony_ci brgz,pt %o3, 1b 111562306a36Sopenharmony_ci add %o2, 0x20, %o2 111662306a36Sopenharmony_ci brlz,pt %o3, 11f 111762306a36Sopenharmony_ci nop 111862306a36Sopenharmony_ci10: ldx [%o1 + 0x00], %g3 111962306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 112062306a36Sopenharmony_ci xor %g1, %g3, %g3 112162306a36Sopenharmony_ci xor %g2, %g7, %g7 112262306a36Sopenharmony_ci MOVXTOD_G3_F4 112362306a36Sopenharmony_ci MOVXTOD_G7_F6 112462306a36Sopenharmony_ci DECRYPT_192(8, 4, 6, 0, 2) 112562306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 112662306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 112762306a36Sopenharmony_ci11: retl 112862306a36Sopenharmony_ci nop 112962306a36Sopenharmony_ciENDPROC(aes_sparc64_ecb_decrypt_192) 113062306a36Sopenharmony_ci 113162306a36Sopenharmony_ci .align 32 113262306a36Sopenharmony_ciENTRY(aes_sparc64_ecb_decrypt_256) 113362306a36Sopenharmony_ci /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len */ 113462306a36Sopenharmony_ci ldx [%o0 - 0x10], %g1 113562306a36Sopenharmony_ci subcc %o3, 0x10, %o3 113662306a36Sopenharmony_ci ldx [%o0 - 0x08], %g2 113762306a36Sopenharmony_ci be 10f 113862306a36Sopenharmony_ci sub %o0, 0xf0, %o0 113962306a36Sopenharmony_ci1: ldx [%o1 + 0x00], %g3 114062306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 114162306a36Sopenharmony_ci ldx [%o1 + 0x10], %o4 114262306a36Sopenharmony_ci ldx [%o1 + 0x18], %o5 114362306a36Sopenharmony_ci xor %g1, %g3, %g3 114462306a36Sopenharmony_ci xor %g2, %g7, %g7 114562306a36Sopenharmony_ci MOVXTOD_G3_F4 114662306a36Sopenharmony_ci MOVXTOD_G7_F6 114762306a36Sopenharmony_ci xor %g1, %o4, %g3 114862306a36Sopenharmony_ci xor %g2, %o5, %g7 114962306a36Sopenharmony_ci MOVXTOD_G3_F0 115062306a36Sopenharmony_ci MOVXTOD_G7_F2 115162306a36Sopenharmony_ci DECRYPT_256_2(8, 4, 6, 0, 2) 115262306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 115362306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 115462306a36Sopenharmony_ci std %f0, [%o2 + 0x10] 115562306a36Sopenharmony_ci std %f2, [%o2 + 0x18] 115662306a36Sopenharmony_ci sub %o3, 0x20, %o3 115762306a36Sopenharmony_ci add %o1, 0x20, %o1 115862306a36Sopenharmony_ci brgz,pt %o3, 1b 115962306a36Sopenharmony_ci add %o2, 0x20, %o2 116062306a36Sopenharmony_ci brlz,pt %o3, 11f 116162306a36Sopenharmony_ci nop 116262306a36Sopenharmony_ci10: ldd [%o0 + 0x18], %f56 116362306a36Sopenharmony_ci ldd [%o0 + 0x10], %f58 116462306a36Sopenharmony_ci ldd [%o0 + 0x08], %f60 116562306a36Sopenharmony_ci ldd [%o0 + 0x00], %f62 116662306a36Sopenharmony_ci ldx [%o1 + 0x00], %g3 116762306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 116862306a36Sopenharmony_ci xor %g1, %g3, %g3 116962306a36Sopenharmony_ci xor %g2, %g7, %g7 117062306a36Sopenharmony_ci MOVXTOD_G3_F4 117162306a36Sopenharmony_ci MOVXTOD_G7_F6 117262306a36Sopenharmony_ci DECRYPT_256(8, 4, 6, 0, 2) 117362306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 117462306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 117562306a36Sopenharmony_ci11: retl 117662306a36Sopenharmony_ci nop 117762306a36Sopenharmony_ciENDPROC(aes_sparc64_ecb_decrypt_256) 117862306a36Sopenharmony_ci 117962306a36Sopenharmony_ci .align 32 118062306a36Sopenharmony_ciENTRY(aes_sparc64_cbc_encrypt_128) 118162306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ 118262306a36Sopenharmony_ci ldd [%o4 + 0x00], %f4 118362306a36Sopenharmony_ci ldd [%o4 + 0x08], %f6 118462306a36Sopenharmony_ci ldx [%o0 + 0x00], %g1 118562306a36Sopenharmony_ci ldx [%o0 + 0x08], %g2 118662306a36Sopenharmony_ci1: ldx [%o1 + 0x00], %g3 118762306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 118862306a36Sopenharmony_ci add %o1, 0x10, %o1 118962306a36Sopenharmony_ci xor %g1, %g3, %g3 119062306a36Sopenharmony_ci xor %g2, %g7, %g7 119162306a36Sopenharmony_ci MOVXTOD_G3_F0 119262306a36Sopenharmony_ci MOVXTOD_G7_F2 119362306a36Sopenharmony_ci fxor %f4, %f0, %f4 119462306a36Sopenharmony_ci fxor %f6, %f2, %f6 119562306a36Sopenharmony_ci ENCRYPT_128(8, 4, 6, 0, 2) 119662306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 119762306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 119862306a36Sopenharmony_ci subcc %o3, 0x10, %o3 119962306a36Sopenharmony_ci bne,pt %xcc, 1b 120062306a36Sopenharmony_ci add %o2, 0x10, %o2 120162306a36Sopenharmony_ci std %f4, [%o4 + 0x00] 120262306a36Sopenharmony_ci std %f6, [%o4 + 0x08] 120362306a36Sopenharmony_ci retl 120462306a36Sopenharmony_ci nop 120562306a36Sopenharmony_ciENDPROC(aes_sparc64_cbc_encrypt_128) 120662306a36Sopenharmony_ci 120762306a36Sopenharmony_ci .align 32 120862306a36Sopenharmony_ciENTRY(aes_sparc64_cbc_encrypt_192) 120962306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ 121062306a36Sopenharmony_ci ldd [%o4 + 0x00], %f4 121162306a36Sopenharmony_ci ldd [%o4 + 0x08], %f6 121262306a36Sopenharmony_ci ldx [%o0 + 0x00], %g1 121362306a36Sopenharmony_ci ldx [%o0 + 0x08], %g2 121462306a36Sopenharmony_ci1: ldx [%o1 + 0x00], %g3 121562306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 121662306a36Sopenharmony_ci add %o1, 0x10, %o1 121762306a36Sopenharmony_ci xor %g1, %g3, %g3 121862306a36Sopenharmony_ci xor %g2, %g7, %g7 121962306a36Sopenharmony_ci MOVXTOD_G3_F0 122062306a36Sopenharmony_ci MOVXTOD_G7_F2 122162306a36Sopenharmony_ci fxor %f4, %f0, %f4 122262306a36Sopenharmony_ci fxor %f6, %f2, %f6 122362306a36Sopenharmony_ci ENCRYPT_192(8, 4, 6, 0, 2) 122462306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 122562306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 122662306a36Sopenharmony_ci subcc %o3, 0x10, %o3 122762306a36Sopenharmony_ci bne,pt %xcc, 1b 122862306a36Sopenharmony_ci add %o2, 0x10, %o2 122962306a36Sopenharmony_ci std %f4, [%o4 + 0x00] 123062306a36Sopenharmony_ci std %f6, [%o4 + 0x08] 123162306a36Sopenharmony_ci retl 123262306a36Sopenharmony_ci nop 123362306a36Sopenharmony_ciENDPROC(aes_sparc64_cbc_encrypt_192) 123462306a36Sopenharmony_ci 123562306a36Sopenharmony_ci .align 32 123662306a36Sopenharmony_ciENTRY(aes_sparc64_cbc_encrypt_256) 123762306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ 123862306a36Sopenharmony_ci ldd [%o4 + 0x00], %f4 123962306a36Sopenharmony_ci ldd [%o4 + 0x08], %f6 124062306a36Sopenharmony_ci ldx [%o0 + 0x00], %g1 124162306a36Sopenharmony_ci ldx [%o0 + 0x08], %g2 124262306a36Sopenharmony_ci1: ldx [%o1 + 0x00], %g3 124362306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 124462306a36Sopenharmony_ci add %o1, 0x10, %o1 124562306a36Sopenharmony_ci xor %g1, %g3, %g3 124662306a36Sopenharmony_ci xor %g2, %g7, %g7 124762306a36Sopenharmony_ci MOVXTOD_G3_F0 124862306a36Sopenharmony_ci MOVXTOD_G7_F2 124962306a36Sopenharmony_ci fxor %f4, %f0, %f4 125062306a36Sopenharmony_ci fxor %f6, %f2, %f6 125162306a36Sopenharmony_ci ENCRYPT_256(8, 4, 6, 0, 2) 125262306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 125362306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 125462306a36Sopenharmony_ci subcc %o3, 0x10, %o3 125562306a36Sopenharmony_ci bne,pt %xcc, 1b 125662306a36Sopenharmony_ci add %o2, 0x10, %o2 125762306a36Sopenharmony_ci std %f4, [%o4 + 0x00] 125862306a36Sopenharmony_ci std %f6, [%o4 + 0x08] 125962306a36Sopenharmony_ci retl 126062306a36Sopenharmony_ci nop 126162306a36Sopenharmony_ciENDPROC(aes_sparc64_cbc_encrypt_256) 126262306a36Sopenharmony_ci 126362306a36Sopenharmony_ci .align 32 126462306a36Sopenharmony_ciENTRY(aes_sparc64_cbc_decrypt_128) 126562306a36Sopenharmony_ci /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */ 126662306a36Sopenharmony_ci ldx [%o0 - 0x10], %g1 126762306a36Sopenharmony_ci ldx [%o0 - 0x08], %g2 126862306a36Sopenharmony_ci ldx [%o4 + 0x00], %o0 126962306a36Sopenharmony_ci ldx [%o4 + 0x08], %o5 127062306a36Sopenharmony_ci1: ldx [%o1 + 0x00], %g3 127162306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 127262306a36Sopenharmony_ci add %o1, 0x10, %o1 127362306a36Sopenharmony_ci xor %g1, %g3, %g3 127462306a36Sopenharmony_ci xor %g2, %g7, %g7 127562306a36Sopenharmony_ci MOVXTOD_G3_F4 127662306a36Sopenharmony_ci MOVXTOD_G7_F6 127762306a36Sopenharmony_ci DECRYPT_128(8, 4, 6, 0, 2) 127862306a36Sopenharmony_ci MOVXTOD_O0_F0 127962306a36Sopenharmony_ci MOVXTOD_O5_F2 128062306a36Sopenharmony_ci xor %g1, %g3, %o0 128162306a36Sopenharmony_ci xor %g2, %g7, %o5 128262306a36Sopenharmony_ci fxor %f4, %f0, %f4 128362306a36Sopenharmony_ci fxor %f6, %f2, %f6 128462306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 128562306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 128662306a36Sopenharmony_ci subcc %o3, 0x10, %o3 128762306a36Sopenharmony_ci bne,pt %xcc, 1b 128862306a36Sopenharmony_ci add %o2, 0x10, %o2 128962306a36Sopenharmony_ci stx %o0, [%o4 + 0x00] 129062306a36Sopenharmony_ci stx %o5, [%o4 + 0x08] 129162306a36Sopenharmony_ci retl 129262306a36Sopenharmony_ci nop 129362306a36Sopenharmony_ciENDPROC(aes_sparc64_cbc_decrypt_128) 129462306a36Sopenharmony_ci 129562306a36Sopenharmony_ci .align 32 129662306a36Sopenharmony_ciENTRY(aes_sparc64_cbc_decrypt_192) 129762306a36Sopenharmony_ci /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */ 129862306a36Sopenharmony_ci ldx [%o0 - 0x10], %g1 129962306a36Sopenharmony_ci ldx [%o0 - 0x08], %g2 130062306a36Sopenharmony_ci ldx [%o4 + 0x00], %o0 130162306a36Sopenharmony_ci ldx [%o4 + 0x08], %o5 130262306a36Sopenharmony_ci1: ldx [%o1 + 0x00], %g3 130362306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 130462306a36Sopenharmony_ci add %o1, 0x10, %o1 130562306a36Sopenharmony_ci xor %g1, %g3, %g3 130662306a36Sopenharmony_ci xor %g2, %g7, %g7 130762306a36Sopenharmony_ci MOVXTOD_G3_F4 130862306a36Sopenharmony_ci MOVXTOD_G7_F6 130962306a36Sopenharmony_ci DECRYPT_192(8, 4, 6, 0, 2) 131062306a36Sopenharmony_ci MOVXTOD_O0_F0 131162306a36Sopenharmony_ci MOVXTOD_O5_F2 131262306a36Sopenharmony_ci xor %g1, %g3, %o0 131362306a36Sopenharmony_ci xor %g2, %g7, %o5 131462306a36Sopenharmony_ci fxor %f4, %f0, %f4 131562306a36Sopenharmony_ci fxor %f6, %f2, %f6 131662306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 131762306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 131862306a36Sopenharmony_ci subcc %o3, 0x10, %o3 131962306a36Sopenharmony_ci bne,pt %xcc, 1b 132062306a36Sopenharmony_ci add %o2, 0x10, %o2 132162306a36Sopenharmony_ci stx %o0, [%o4 + 0x00] 132262306a36Sopenharmony_ci stx %o5, [%o4 + 0x08] 132362306a36Sopenharmony_ci retl 132462306a36Sopenharmony_ci nop 132562306a36Sopenharmony_ciENDPROC(aes_sparc64_cbc_decrypt_192) 132662306a36Sopenharmony_ci 132762306a36Sopenharmony_ci .align 32 132862306a36Sopenharmony_ciENTRY(aes_sparc64_cbc_decrypt_256) 132962306a36Sopenharmony_ci /* %o0=&key[key_len], %o1=input, %o2=output, %o3=len, %o4=iv */ 133062306a36Sopenharmony_ci ldx [%o0 - 0x10], %g1 133162306a36Sopenharmony_ci ldx [%o0 - 0x08], %g2 133262306a36Sopenharmony_ci ldx [%o4 + 0x00], %o0 133362306a36Sopenharmony_ci ldx [%o4 + 0x08], %o5 133462306a36Sopenharmony_ci1: ldx [%o1 + 0x00], %g3 133562306a36Sopenharmony_ci ldx [%o1 + 0x08], %g7 133662306a36Sopenharmony_ci add %o1, 0x10, %o1 133762306a36Sopenharmony_ci xor %g1, %g3, %g3 133862306a36Sopenharmony_ci xor %g2, %g7, %g7 133962306a36Sopenharmony_ci MOVXTOD_G3_F4 134062306a36Sopenharmony_ci MOVXTOD_G7_F6 134162306a36Sopenharmony_ci DECRYPT_256(8, 4, 6, 0, 2) 134262306a36Sopenharmony_ci MOVXTOD_O0_F0 134362306a36Sopenharmony_ci MOVXTOD_O5_F2 134462306a36Sopenharmony_ci xor %g1, %g3, %o0 134562306a36Sopenharmony_ci xor %g2, %g7, %o5 134662306a36Sopenharmony_ci fxor %f4, %f0, %f4 134762306a36Sopenharmony_ci fxor %f6, %f2, %f6 134862306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 134962306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 135062306a36Sopenharmony_ci subcc %o3, 0x10, %o3 135162306a36Sopenharmony_ci bne,pt %xcc, 1b 135262306a36Sopenharmony_ci add %o2, 0x10, %o2 135362306a36Sopenharmony_ci stx %o0, [%o4 + 0x00] 135462306a36Sopenharmony_ci stx %o5, [%o4 + 0x08] 135562306a36Sopenharmony_ci retl 135662306a36Sopenharmony_ci nop 135762306a36Sopenharmony_ciENDPROC(aes_sparc64_cbc_decrypt_256) 135862306a36Sopenharmony_ci 135962306a36Sopenharmony_ci .align 32 136062306a36Sopenharmony_ciENTRY(aes_sparc64_ctr_crypt_128) 136162306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ 136262306a36Sopenharmony_ci ldx [%o4 + 0x00], %g3 136362306a36Sopenharmony_ci ldx [%o4 + 0x08], %g7 136462306a36Sopenharmony_ci subcc %o3, 0x10, %o3 136562306a36Sopenharmony_ci ldx [%o0 + 0x00], %g1 136662306a36Sopenharmony_ci be 10f 136762306a36Sopenharmony_ci ldx [%o0 + 0x08], %g2 136862306a36Sopenharmony_ci1: xor %g1, %g3, %o5 136962306a36Sopenharmony_ci MOVXTOD_O5_F0 137062306a36Sopenharmony_ci xor %g2, %g7, %o5 137162306a36Sopenharmony_ci MOVXTOD_O5_F2 137262306a36Sopenharmony_ci add %g7, 1, %g7 137362306a36Sopenharmony_ci add %g3, 1, %o5 137462306a36Sopenharmony_ci movrz %g7, %o5, %g3 137562306a36Sopenharmony_ci xor %g1, %g3, %o5 137662306a36Sopenharmony_ci MOVXTOD_O5_F4 137762306a36Sopenharmony_ci xor %g2, %g7, %o5 137862306a36Sopenharmony_ci MOVXTOD_O5_F6 137962306a36Sopenharmony_ci add %g7, 1, %g7 138062306a36Sopenharmony_ci add %g3, 1, %o5 138162306a36Sopenharmony_ci movrz %g7, %o5, %g3 138262306a36Sopenharmony_ci ENCRYPT_128_2(8, 0, 2, 4, 6, 56, 58, 60, 62) 138362306a36Sopenharmony_ci ldd [%o1 + 0x00], %f56 138462306a36Sopenharmony_ci ldd [%o1 + 0x08], %f58 138562306a36Sopenharmony_ci ldd [%o1 + 0x10], %f60 138662306a36Sopenharmony_ci ldd [%o1 + 0x18], %f62 138762306a36Sopenharmony_ci fxor %f56, %f0, %f56 138862306a36Sopenharmony_ci fxor %f58, %f2, %f58 138962306a36Sopenharmony_ci fxor %f60, %f4, %f60 139062306a36Sopenharmony_ci fxor %f62, %f6, %f62 139162306a36Sopenharmony_ci std %f56, [%o2 + 0x00] 139262306a36Sopenharmony_ci std %f58, [%o2 + 0x08] 139362306a36Sopenharmony_ci std %f60, [%o2 + 0x10] 139462306a36Sopenharmony_ci std %f62, [%o2 + 0x18] 139562306a36Sopenharmony_ci subcc %o3, 0x20, %o3 139662306a36Sopenharmony_ci add %o1, 0x20, %o1 139762306a36Sopenharmony_ci brgz %o3, 1b 139862306a36Sopenharmony_ci add %o2, 0x20, %o2 139962306a36Sopenharmony_ci brlz,pt %o3, 11f 140062306a36Sopenharmony_ci nop 140162306a36Sopenharmony_ci10: xor %g1, %g3, %o5 140262306a36Sopenharmony_ci MOVXTOD_O5_F0 140362306a36Sopenharmony_ci xor %g2, %g7, %o5 140462306a36Sopenharmony_ci MOVXTOD_O5_F2 140562306a36Sopenharmony_ci add %g7, 1, %g7 140662306a36Sopenharmony_ci add %g3, 1, %o5 140762306a36Sopenharmony_ci movrz %g7, %o5, %g3 140862306a36Sopenharmony_ci ENCRYPT_128(8, 0, 2, 4, 6) 140962306a36Sopenharmony_ci ldd [%o1 + 0x00], %f4 141062306a36Sopenharmony_ci ldd [%o1 + 0x08], %f6 141162306a36Sopenharmony_ci fxor %f4, %f0, %f4 141262306a36Sopenharmony_ci fxor %f6, %f2, %f6 141362306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 141462306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 141562306a36Sopenharmony_ci11: stx %g3, [%o4 + 0x00] 141662306a36Sopenharmony_ci retl 141762306a36Sopenharmony_ci stx %g7, [%o4 + 0x08] 141862306a36Sopenharmony_ciENDPROC(aes_sparc64_ctr_crypt_128) 141962306a36Sopenharmony_ci 142062306a36Sopenharmony_ci .align 32 142162306a36Sopenharmony_ciENTRY(aes_sparc64_ctr_crypt_192) 142262306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ 142362306a36Sopenharmony_ci ldx [%o4 + 0x00], %g3 142462306a36Sopenharmony_ci ldx [%o4 + 0x08], %g7 142562306a36Sopenharmony_ci subcc %o3, 0x10, %o3 142662306a36Sopenharmony_ci ldx [%o0 + 0x00], %g1 142762306a36Sopenharmony_ci be 10f 142862306a36Sopenharmony_ci ldx [%o0 + 0x08], %g2 142962306a36Sopenharmony_ci1: xor %g1, %g3, %o5 143062306a36Sopenharmony_ci MOVXTOD_O5_F0 143162306a36Sopenharmony_ci xor %g2, %g7, %o5 143262306a36Sopenharmony_ci MOVXTOD_O5_F2 143362306a36Sopenharmony_ci add %g7, 1, %g7 143462306a36Sopenharmony_ci add %g3, 1, %o5 143562306a36Sopenharmony_ci movrz %g7, %o5, %g3 143662306a36Sopenharmony_ci xor %g1, %g3, %o5 143762306a36Sopenharmony_ci MOVXTOD_O5_F4 143862306a36Sopenharmony_ci xor %g2, %g7, %o5 143962306a36Sopenharmony_ci MOVXTOD_O5_F6 144062306a36Sopenharmony_ci add %g7, 1, %g7 144162306a36Sopenharmony_ci add %g3, 1, %o5 144262306a36Sopenharmony_ci movrz %g7, %o5, %g3 144362306a36Sopenharmony_ci ENCRYPT_192_2(8, 0, 2, 4, 6, 56, 58, 60, 62) 144462306a36Sopenharmony_ci ldd [%o1 + 0x00], %f56 144562306a36Sopenharmony_ci ldd [%o1 + 0x08], %f58 144662306a36Sopenharmony_ci ldd [%o1 + 0x10], %f60 144762306a36Sopenharmony_ci ldd [%o1 + 0x18], %f62 144862306a36Sopenharmony_ci fxor %f56, %f0, %f56 144962306a36Sopenharmony_ci fxor %f58, %f2, %f58 145062306a36Sopenharmony_ci fxor %f60, %f4, %f60 145162306a36Sopenharmony_ci fxor %f62, %f6, %f62 145262306a36Sopenharmony_ci std %f56, [%o2 + 0x00] 145362306a36Sopenharmony_ci std %f58, [%o2 + 0x08] 145462306a36Sopenharmony_ci std %f60, [%o2 + 0x10] 145562306a36Sopenharmony_ci std %f62, [%o2 + 0x18] 145662306a36Sopenharmony_ci subcc %o3, 0x20, %o3 145762306a36Sopenharmony_ci add %o1, 0x20, %o1 145862306a36Sopenharmony_ci brgz %o3, 1b 145962306a36Sopenharmony_ci add %o2, 0x20, %o2 146062306a36Sopenharmony_ci brlz,pt %o3, 11f 146162306a36Sopenharmony_ci nop 146262306a36Sopenharmony_ci10: xor %g1, %g3, %o5 146362306a36Sopenharmony_ci MOVXTOD_O5_F0 146462306a36Sopenharmony_ci xor %g2, %g7, %o5 146562306a36Sopenharmony_ci MOVXTOD_O5_F2 146662306a36Sopenharmony_ci add %g7, 1, %g7 146762306a36Sopenharmony_ci add %g3, 1, %o5 146862306a36Sopenharmony_ci movrz %g7, %o5, %g3 146962306a36Sopenharmony_ci ENCRYPT_192(8, 0, 2, 4, 6) 147062306a36Sopenharmony_ci ldd [%o1 + 0x00], %f4 147162306a36Sopenharmony_ci ldd [%o1 + 0x08], %f6 147262306a36Sopenharmony_ci fxor %f4, %f0, %f4 147362306a36Sopenharmony_ci fxor %f6, %f2, %f6 147462306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 147562306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 147662306a36Sopenharmony_ci11: stx %g3, [%o4 + 0x00] 147762306a36Sopenharmony_ci retl 147862306a36Sopenharmony_ci stx %g7, [%o4 + 0x08] 147962306a36Sopenharmony_ciENDPROC(aes_sparc64_ctr_crypt_192) 148062306a36Sopenharmony_ci 148162306a36Sopenharmony_ci .align 32 148262306a36Sopenharmony_ciENTRY(aes_sparc64_ctr_crypt_256) 148362306a36Sopenharmony_ci /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ 148462306a36Sopenharmony_ci ldx [%o4 + 0x00], %g3 148562306a36Sopenharmony_ci ldx [%o4 + 0x08], %g7 148662306a36Sopenharmony_ci subcc %o3, 0x10, %o3 148762306a36Sopenharmony_ci ldx [%o0 + 0x00], %g1 148862306a36Sopenharmony_ci be 10f 148962306a36Sopenharmony_ci ldx [%o0 + 0x08], %g2 149062306a36Sopenharmony_ci1: xor %g1, %g3, %o5 149162306a36Sopenharmony_ci MOVXTOD_O5_F0 149262306a36Sopenharmony_ci xor %g2, %g7, %o5 149362306a36Sopenharmony_ci MOVXTOD_O5_F2 149462306a36Sopenharmony_ci add %g7, 1, %g7 149562306a36Sopenharmony_ci add %g3, 1, %o5 149662306a36Sopenharmony_ci movrz %g7, %o5, %g3 149762306a36Sopenharmony_ci xor %g1, %g3, %o5 149862306a36Sopenharmony_ci MOVXTOD_O5_F4 149962306a36Sopenharmony_ci xor %g2, %g7, %o5 150062306a36Sopenharmony_ci MOVXTOD_O5_F6 150162306a36Sopenharmony_ci add %g7, 1, %g7 150262306a36Sopenharmony_ci add %g3, 1, %o5 150362306a36Sopenharmony_ci movrz %g7, %o5, %g3 150462306a36Sopenharmony_ci ENCRYPT_256_2(8, 0, 2, 4, 6) 150562306a36Sopenharmony_ci ldd [%o1 + 0x00], %f56 150662306a36Sopenharmony_ci ldd [%o1 + 0x08], %f58 150762306a36Sopenharmony_ci ldd [%o1 + 0x10], %f60 150862306a36Sopenharmony_ci ldd [%o1 + 0x18], %f62 150962306a36Sopenharmony_ci fxor %f56, %f0, %f56 151062306a36Sopenharmony_ci fxor %f58, %f2, %f58 151162306a36Sopenharmony_ci fxor %f60, %f4, %f60 151262306a36Sopenharmony_ci fxor %f62, %f6, %f62 151362306a36Sopenharmony_ci std %f56, [%o2 + 0x00] 151462306a36Sopenharmony_ci std %f58, [%o2 + 0x08] 151562306a36Sopenharmony_ci std %f60, [%o2 + 0x10] 151662306a36Sopenharmony_ci std %f62, [%o2 + 0x18] 151762306a36Sopenharmony_ci subcc %o3, 0x20, %o3 151862306a36Sopenharmony_ci add %o1, 0x20, %o1 151962306a36Sopenharmony_ci brgz %o3, 1b 152062306a36Sopenharmony_ci add %o2, 0x20, %o2 152162306a36Sopenharmony_ci brlz,pt %o3, 11f 152262306a36Sopenharmony_ci nop 152362306a36Sopenharmony_ci10: ldd [%o0 + 0xd0], %f56 152462306a36Sopenharmony_ci ldd [%o0 + 0xd8], %f58 152562306a36Sopenharmony_ci ldd [%o0 + 0xe0], %f60 152662306a36Sopenharmony_ci ldd [%o0 + 0xe8], %f62 152762306a36Sopenharmony_ci xor %g1, %g3, %o5 152862306a36Sopenharmony_ci MOVXTOD_O5_F0 152962306a36Sopenharmony_ci xor %g2, %g7, %o5 153062306a36Sopenharmony_ci MOVXTOD_O5_F2 153162306a36Sopenharmony_ci add %g7, 1, %g7 153262306a36Sopenharmony_ci add %g3, 1, %o5 153362306a36Sopenharmony_ci movrz %g7, %o5, %g3 153462306a36Sopenharmony_ci ENCRYPT_256(8, 0, 2, 4, 6) 153562306a36Sopenharmony_ci ldd [%o1 + 0x00], %f4 153662306a36Sopenharmony_ci ldd [%o1 + 0x08], %f6 153762306a36Sopenharmony_ci fxor %f4, %f0, %f4 153862306a36Sopenharmony_ci fxor %f6, %f2, %f6 153962306a36Sopenharmony_ci std %f4, [%o2 + 0x00] 154062306a36Sopenharmony_ci std %f6, [%o2 + 0x08] 154162306a36Sopenharmony_ci11: stx %g3, [%o4 + 0x00] 154262306a36Sopenharmony_ci retl 154362306a36Sopenharmony_ci stx %g7, [%o4 + 0x08] 154462306a36Sopenharmony_ciENDPROC(aes_sparc64_ctr_crypt_256) 1545