1*1dcdf01fSchristos#include "sparc_arch.h" 2*1dcdf01fSchristos 360662d10Schristos.text 460662d10Schristos 560662d10Schristos.globl cmll_t4_encrypt 660662d10Schristos.align 32 760662d10Schristoscmll_t4_encrypt: 860662d10Schristos andcc %o0, 7, %g1 ! is input aligned? 960662d10Schristos andn %o0, 7, %o0 1060662d10Schristos 1160662d10Schristos ldx [%o2 + 0], %g4 1260662d10Schristos ldx [%o2 + 8], %g5 1360662d10Schristos 1460662d10Schristos ldx [%o0 + 0], %o4 1560662d10Schristos bz,pt %icc, 1f 1660662d10Schristos ldx [%o0 + 8], %o5 1760662d10Schristos ldx [%o0 + 16], %o0 1860662d10Schristos sll %g1, 3, %g1 1960662d10Schristos sub %g0, %g1, %o3 2060662d10Schristos sllx %o4, %g1, %o4 2160662d10Schristos sllx %o5, %g1, %g1 2260662d10Schristos srlx %o5, %o3, %o5 2360662d10Schristos srlx %o0, %o3, %o3 2460662d10Schristos or %o5, %o4, %o4 2560662d10Schristos or %o3, %g1, %o5 2660662d10Schristos1: 2760662d10Schristos ld [%o2 + 272], %o3 ! grandRounds, 3 or 4 2860662d10Schristos ldd [%o2 + 16], %f12 2960662d10Schristos ldd [%o2 + 24], %f14 3060662d10Schristos xor %g4, %o4, %o4 3160662d10Schristos xor %g5, %o5, %o5 3260662d10Schristos ldd [%o2 + 32], %f16 3360662d10Schristos ldd [%o2 + 40], %f18 3460662d10Schristos .word 0x81b0230c !movxtod %o4,%f0 3560662d10Schristos .word 0x85b0230d !movxtod %o5,%f2 3660662d10Schristos ldd [%o2 + 48], %f20 3760662d10Schristos ldd [%o2 + 56], %f22 3860662d10Schristos sub %o3, 1, %o3 3960662d10Schristos ldd [%o2 + 64], %f24 4060662d10Schristos ldd [%o2 + 72], %f26 4160662d10Schristos add %o2, 80, %o2 4260662d10Schristos 4360662d10Schristos.Lenc: 4460662d10Schristos .word 0x84cb0182 !camellia_f %f12,%f2,%f0,%f2 4560662d10Schristos ldd [%o2 + 0], %f12 4660662d10Schristos sub %o3,1,%o3 4760662d10Schristos .word 0x80cb8580 !camellia_f %f14,%f0,%f2,%f0 4860662d10Schristos ldd [%o2 + 8], %f14 4960662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 5060662d10Schristos ldd [%o2 + 16], %f16 5160662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 5260662d10Schristos ldd [%o2 + 24], %f18 5360662d10Schristos .word 0x84cd0182 !camellia_f %f20,%f2,%f0,%f2 5460662d10Schristos ldd [%o2 + 32], %f20 5560662d10Schristos .word 0x80cd8580 !camellia_f %f22,%f0,%f2,%f0 5660662d10Schristos ldd [%o2 + 40], %f22 5760662d10Schristos .word 0x81b62780 !camellia_fl %f24,%f0,%f0 5860662d10Schristos ldd [%o2 + 48], %f24 5960662d10Schristos .word 0x85b6a7a2 !camellia_fli %f26,%f2,%f2 6060662d10Schristos ldd [%o2 + 56], %f26 6160662d10Schristos brnz,pt %o3, .Lenc 6260662d10Schristos add %o2, 64, %o2 6360662d10Schristos 6460662d10Schristos andcc %o1, 7, %o4 ! is output aligned? 6560662d10Schristos .word 0x84cb0182 !camellia_f %f12,%f2,%f0,%f2 6660662d10Schristos .word 0x80cb8580 !camellia_f %f14,%f0,%f2,%f0 6760662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 6860662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 6960662d10Schristos .word 0x88cd0182 !camellia_f %f20,%f2,%f0,%f4 7060662d10Schristos .word 0x84cd8980 !camellia_f %f22,%f0,%f4,%f2 7160662d10Schristos .word 0x81b60d84 !fxor %f24,%f4,%f0 7260662d10Schristos .word 0x85b68d82 !fxor %f26,%f2,%f2 7360662d10Schristos 7460662d10Schristos bnz,pn %icc, 2f 7560662d10Schristos nop 7660662d10Schristos 7760662d10Schristos std %f0, [%o1 + 0] 7860662d10Schristos retl 7960662d10Schristos std %f2, [%o1 + 8] 8060662d10Schristos 8160662d10Schristos2: .word 0x93b24340 !alignaddrl %o1,%g0,%o1 8260662d10Schristos mov 0xff, %o5 8360662d10Schristos srl %o5, %o4, %o5 8460662d10Schristos 8560662d10Schristos .word 0x89b00900 !faligndata %f0,%f0,%f4 8660662d10Schristos .word 0x8db00902 !faligndata %f0,%f2,%f6 8760662d10Schristos .word 0x91b08902 !faligndata %f2,%f2,%f8 8860662d10Schristos 8960662d10Schristos stda %f4, [%o1 + %o5]0xc0 ! partial store 9060662d10Schristos std %f6, [%o1 + 8] 9160662d10Schristos add %o1, 16, %o1 9260662d10Schristos orn %g0, %o5, %o5 9360662d10Schristos retl 9460662d10Schristos stda %f8, [%o1 + %o5]0xc0 ! partial store 9560662d10Schristos.type cmll_t4_encrypt,#function 9660662d10Schristos.size cmll_t4_encrypt,.-cmll_t4_encrypt 9760662d10Schristos 9860662d10Schristos.globl cmll_t4_decrypt 9960662d10Schristos.align 32 10060662d10Schristoscmll_t4_decrypt: 10160662d10Schristos ld [%o2 + 272], %o3 ! grandRounds, 3 or 4 10260662d10Schristos andcc %o0, 7, %g1 ! is input aligned? 10360662d10Schristos andn %o0, 7, %o0 10460662d10Schristos 10560662d10Schristos sll %o3, 6, %o3 10660662d10Schristos add %o3, %o2, %o2 10760662d10Schristos 10860662d10Schristos ldx [%o0 + 0], %o4 10960662d10Schristos bz,pt %icc, 1f 11060662d10Schristos ldx [%o0 + 8], %o5 11160662d10Schristos ldx [%o0 + 16], %o0 11260662d10Schristos sll %g1, 3, %g1 11360662d10Schristos sub %g0, %g1, %g4 11460662d10Schristos sllx %o4, %g1, %o4 11560662d10Schristos sllx %o5, %g1, %g1 11660662d10Schristos srlx %o5, %g4, %o5 11760662d10Schristos srlx %o0, %g4, %g4 11860662d10Schristos or %o5, %o4, %o4 11960662d10Schristos or %g4, %g1, %o5 12060662d10Schristos1: 12160662d10Schristos ldx [%o2 + 0], %g4 12260662d10Schristos ldx [%o2 + 8], %g5 12360662d10Schristos ldd [%o2 - 8], %f12 12460662d10Schristos ldd [%o2 - 16], %f14 12560662d10Schristos xor %g4, %o4, %o4 12660662d10Schristos xor %g5, %o5, %o5 12760662d10Schristos ldd [%o2 - 24], %f16 12860662d10Schristos ldd [%o2 - 32], %f18 12960662d10Schristos .word 0x81b0230c !movxtod %o4,%f0 13060662d10Schristos .word 0x85b0230d !movxtod %o5,%f2 13160662d10Schristos ldd [%o2 - 40], %f20 13260662d10Schristos ldd [%o2 - 48], %f22 13360662d10Schristos sub %o3, 64, %o3 13460662d10Schristos ldd [%o2 - 56], %f24 13560662d10Schristos ldd [%o2 - 64], %f26 13660662d10Schristos sub %o2, 64, %o2 13760662d10Schristos 13860662d10Schristos.Ldec: 13960662d10Schristos .word 0x84cb0182 !camellia_f %f12,%f2,%f0,%f2 14060662d10Schristos ldd [%o2 - 8], %f12 14160662d10Schristos sub %o3, 64, %o3 14260662d10Schristos .word 0x80cb8580 !camellia_f %f14,%f0,%f2,%f0 14360662d10Schristos ldd [%o2 - 16], %f14 14460662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 14560662d10Schristos ldd [%o2 - 24], %f16 14660662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 14760662d10Schristos ldd [%o2 - 32], %f18 14860662d10Schristos .word 0x84cd0182 !camellia_f %f20,%f2,%f0,%f2 14960662d10Schristos ldd [%o2 - 40], %f20 15060662d10Schristos .word 0x80cd8580 !camellia_f %f22,%f0,%f2,%f0 15160662d10Schristos ldd [%o2 - 48], %f22 15260662d10Schristos .word 0x81b62780 !camellia_fl %f24,%f0,%f0 15360662d10Schristos ldd [%o2 - 56], %f24 15460662d10Schristos .word 0x85b6a7a2 !camellia_fli %f26,%f2,%f2 15560662d10Schristos ldd [%o2 - 64], %f26 15660662d10Schristos brnz,pt %o3, .Ldec 15760662d10Schristos sub %o2, 64, %o2 15860662d10Schristos 15960662d10Schristos andcc %o1, 7, %o4 ! is output aligned? 16060662d10Schristos .word 0x84cb0182 !camellia_f %f12,%f2,%f0,%f2 16160662d10Schristos .word 0x80cb8580 !camellia_f %f14,%f0,%f2,%f0 16260662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 16360662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 16460662d10Schristos .word 0x88cd0182 !camellia_f %f20,%f2,%f0,%f4 16560662d10Schristos .word 0x84cd8980 !camellia_f %f22,%f0,%f4,%f2 16660662d10Schristos .word 0x81b68d84 !fxor %f26,%f4,%f0 16760662d10Schristos .word 0x85b60d82 !fxor %f24,%f2,%f2 16860662d10Schristos 16960662d10Schristos bnz,pn %icc, 2f 17060662d10Schristos nop 17160662d10Schristos 17260662d10Schristos std %f0, [%o1 + 0] 17360662d10Schristos retl 17460662d10Schristos std %f2, [%o1 + 8] 17560662d10Schristos 17660662d10Schristos2: .word 0x93b24340 !alignaddrl %o1,%g0,%o1 17760662d10Schristos mov 0xff, %o5 17860662d10Schristos srl %o5, %o4, %o5 17960662d10Schristos 18060662d10Schristos .word 0x89b00900 !faligndata %f0,%f0,%f4 18160662d10Schristos .word 0x8db00902 !faligndata %f0,%f2,%f6 18260662d10Schristos .word 0x91b08902 !faligndata %f2,%f2,%f8 18360662d10Schristos 18460662d10Schristos stda %f4, [%o1 + %o5]0xc0 ! partial store 18560662d10Schristos std %f6, [%o1 + 8] 18660662d10Schristos add %o1, 16, %o1 18760662d10Schristos orn %g0, %o5, %o5 18860662d10Schristos retl 18960662d10Schristos stda %f8, [%o1 + %o5]0xc0 ! partial store 19060662d10Schristos.type cmll_t4_decrypt,#function 19160662d10Schristos.size cmll_t4_decrypt,.-cmll_t4_decrypt 19260662d10Schristos.globl cmll_t4_set_key 19360662d10Schristos.align 32 19460662d10Schristoscmll_t4_set_key: 19560662d10Schristos and %o0, 7, %o3 19660662d10Schristos .word 0x91b20300 !alignaddr %o0,%g0,%o0 19760662d10Schristos cmp %o1, 192 19860662d10Schristos ldd [%o0 + 0], %f0 19960662d10Schristos bl,pt %icc,.L128 20060662d10Schristos ldd [%o0 + 8], %f2 20160662d10Schristos 20260662d10Schristos be,pt %icc,.L192 20360662d10Schristos ldd [%o0 + 16], %f4 20460662d10Schristos 20560662d10Schristos brz,pt %o3, .L256aligned 20660662d10Schristos ldd [%o0 + 24], %f6 20760662d10Schristos 20860662d10Schristos ldd [%o0 + 32], %f8 20960662d10Schristos .word 0x81b00902 !faligndata %f0,%f2,%f0 21060662d10Schristos .word 0x85b08904 !faligndata %f2,%f4,%f2 21160662d10Schristos .word 0x89b10906 !faligndata %f4,%f6,%f4 21260662d10Schristos b .L256aligned 21360662d10Schristos .word 0x8db18908 !faligndata %f6,%f8,%f6 21460662d10Schristos 21560662d10Schristos.align 16 21660662d10Schristos.L192: 21760662d10Schristos brz,a,pt %o3, .L256aligned 21860662d10Schristos .word 0x8db00cc4 !fnot2 %f0,%f4,%f6 21960662d10Schristos 22060662d10Schristos ldd [%o0 + 24], %f6 22160662d10Schristos nop 22260662d10Schristos .word 0x81b00902 !faligndata %f0,%f2,%f0 22360662d10Schristos .word 0x85b08904 !faligndata %f2,%f4,%f2 22460662d10Schristos .word 0x89b10906 !faligndata %f4,%f6,%f4 22560662d10Schristos .word 0x8db00cc4 !fnot2 %f0,%f4,%f6 22660662d10Schristos 22760662d10Schristos.L256aligned: 22860662d10Schristos std %f0, [%o2 + 0] ! k[0, 1] 22960662d10Schristos .word 0xb9b00f00 !fsrc2 %f0,%f0,%f28 23060662d10Schristos std %f2, [%o2 + 8] ! k[2, 3] 23160662d10Schristos .word 0xbdb00f02 !fsrc2 %f0,%f2,%f30 23260662d10Schristos .word 0x81b10d80 !fxor %f4,%f0,%f0 23360662d10Schristos b .L128key 23460662d10Schristos .word 0x85b18d82 !fxor %f6,%f2,%f2 23560662d10Schristos 23660662d10Schristos.align 16 23760662d10Schristos.L128: 23860662d10Schristos brz,pt %o3, .L128aligned 23960662d10Schristos nop 24060662d10Schristos 24160662d10Schristos ldd [%o0 + 16], %f4 24260662d10Schristos nop 24360662d10Schristos .word 0x81b00902 !faligndata %f0,%f2,%f0 24460662d10Schristos .word 0x85b08904 !faligndata %f2,%f4,%f2 24560662d10Schristos 24660662d10Schristos.L128aligned: 24760662d10Schristos std %f0, [%o2 + 0] ! k[0, 1] 24860662d10Schristos .word 0xb9b00f00 !fsrc2 %f0,%f0,%f28 24960662d10Schristos std %f2, [%o2 + 8] ! k[2, 3] 25060662d10Schristos .word 0xbdb00f02 !fsrc2 %f0,%f2,%f30 25160662d10Schristos 25260662d10Schristos.L128key: 25360662d10Schristos mov %o7, %o5 25460662d10Schristos1: call .+8 25560662d10Schristos add %o7, SIGMA-1b, %o4 25660662d10Schristos mov %o5, %o7 25760662d10Schristos 25860662d10Schristos ldd [%o4 + 0], %f16 25960662d10Schristos ldd [%o4 + 8], %f18 26060662d10Schristos ldd [%o4 + 16], %f20 26160662d10Schristos ldd [%o4 + 24], %f22 26260662d10Schristos 26360662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 26460662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 26560662d10Schristos .word 0x81b70d80 !fxor %f28,%f0,%f0 26660662d10Schristos .word 0x85b78d82 !fxor %f30,%f2,%f2 26760662d10Schristos .word 0x84cd0182 !camellia_f %f20,%f2,%f0,%f2 26860662d10Schristos .word 0x80cd8580 !camellia_f %f22,%f0,%f2,%f0 26960662d10Schristos 27060662d10Schristos bge,pn %icc, .L256key 27160662d10Schristos nop 27260662d10Schristos std %f0, [%o2 + 0x10] ! k[ 4, 5] 27360662d10Schristos std %f2, [%o2 + 0x18] ! k[ 6, 7] 27460662d10Schristos 27560662d10Schristos .word 0x99b02200 !movdtox %f0,%o4 27660662d10Schristos .word 0x9bb02202 !movdtox %f2,%o5 27760662d10Schristos srlx %o4, 64-15, %g4 27860662d10Schristos sllx %o4, 15, %o4 27960662d10Schristos srlx %o5, 64-15, %g5 28060662d10Schristos sllx %o5, 15, %o5 28160662d10Schristos or %o4, %g5, %o4 28260662d10Schristos or %o5, %g4, %o5 28360662d10Schristos stx %o4, [%o2 + 0x30] ! k[12, 13] 28460662d10Schristos stx %o5, [%o2 + 0x38] ! k[14, 15] 28560662d10Schristos srlx %o4, 64-15, %g4 28660662d10Schristos sllx %o4, 15, %o4 28760662d10Schristos srlx %o5, 64-15, %g5 28860662d10Schristos sllx %o5, 15, %o5 28960662d10Schristos or %o4, %g5, %o4 29060662d10Schristos or %o5, %g4, %o5 29160662d10Schristos stx %o4, [%o2 + 0x40] ! k[16, 17] 29260662d10Schristos stx %o5, [%o2 + 0x48] ! k[18, 19] 29360662d10Schristos srlx %o4, 64-15, %g4 29460662d10Schristos sllx %o4, 15, %o4 29560662d10Schristos srlx %o5, 64-15, %g5 29660662d10Schristos sllx %o5, 15, %o5 29760662d10Schristos or %o4, %g5, %o4 29860662d10Schristos or %o5, %g4, %o5 29960662d10Schristos stx %o4, [%o2 + 0x60] ! k[24, 25] 30060662d10Schristos srlx %o4, 64-15, %g4 30160662d10Schristos sllx %o4, 15, %o4 30260662d10Schristos srlx %o5, 64-15, %g5 30360662d10Schristos sllx %o5, 15, %o5 30460662d10Schristos or %o4, %g5, %o4 30560662d10Schristos or %o5, %g4, %o5 30660662d10Schristos stx %o4, [%o2 + 0x70] ! k[28, 29] 30760662d10Schristos stx %o5, [%o2 + 0x78] ! k[30, 31] 30860662d10Schristos srlx %o4, 64-34, %g4 30960662d10Schristos sllx %o4, 34, %o4 31060662d10Schristos srlx %o5, 64-34, %g5 31160662d10Schristos sllx %o5, 34, %o5 31260662d10Schristos or %o4, %g5, %o4 31360662d10Schristos or %o5, %g4, %o5 31460662d10Schristos stx %o4, [%o2 + 0xa0] ! k[40, 41] 31560662d10Schristos stx %o5, [%o2 + 0xa8] ! k[42, 43] 31660662d10Schristos srlx %o4, 64-17, %g4 31760662d10Schristos sllx %o4, 17, %o4 31860662d10Schristos srlx %o5, 64-17, %g5 31960662d10Schristos sllx %o5, 17, %o5 32060662d10Schristos or %o4, %g5, %o4 32160662d10Schristos or %o5, %g4, %o5 32260662d10Schristos stx %o4, [%o2 + 0xc0] ! k[48, 49] 32360662d10Schristos stx %o5, [%o2 + 0xc8] ! k[50, 51] 32460662d10Schristos 32560662d10Schristos .word 0x99b0221c !movdtox %f28,%o4 ! k[ 0, 1] 32660662d10Schristos .word 0x9bb0221e !movdtox %f30,%o5 ! k[ 2, 3] 32760662d10Schristos srlx %o4, 64-15, %g4 32860662d10Schristos sllx %o4, 15, %o4 32960662d10Schristos srlx %o5, 64-15, %g5 33060662d10Schristos sllx %o5, 15, %o5 33160662d10Schristos or %o4, %g5, %o4 33260662d10Schristos or %o5, %g4, %o5 33360662d10Schristos stx %o4, [%o2 + 0x20] ! k[ 8, 9] 33460662d10Schristos stx %o5, [%o2 + 0x28] ! k[10, 11] 33560662d10Schristos srlx %o4, 64-30, %g4 33660662d10Schristos sllx %o4, 30, %o4 33760662d10Schristos srlx %o5, 64-30, %g5 33860662d10Schristos sllx %o5, 30, %o5 33960662d10Schristos or %o4, %g5, %o4 34060662d10Schristos or %o5, %g4, %o5 34160662d10Schristos stx %o4, [%o2 + 0x50] ! k[20, 21] 34260662d10Schristos stx %o5, [%o2 + 0x58] ! k[22, 23] 34360662d10Schristos srlx %o4, 64-15, %g4 34460662d10Schristos sllx %o4, 15, %o4 34560662d10Schristos srlx %o5, 64-15, %g5 34660662d10Schristos sllx %o5, 15, %o5 34760662d10Schristos or %o4, %g5, %o4 34860662d10Schristos or %o5, %g4, %o5 34960662d10Schristos stx %o5, [%o2 + 0x68] ! k[26, 27] 35060662d10Schristos srlx %o4, 64-17, %g4 35160662d10Schristos sllx %o4, 17, %o4 35260662d10Schristos srlx %o5, 64-17, %g5 35360662d10Schristos sllx %o5, 17, %o5 35460662d10Schristos or %o4, %g5, %o4 35560662d10Schristos or %o5, %g4, %o5 35660662d10Schristos stx %o4, [%o2 + 0x80] ! k[32, 33] 35760662d10Schristos stx %o5, [%o2 + 0x88] ! k[34, 35] 35860662d10Schristos srlx %o4, 64-17, %g4 35960662d10Schristos sllx %o4, 17, %o4 36060662d10Schristos srlx %o5, 64-17, %g5 36160662d10Schristos sllx %o5, 17, %o5 36260662d10Schristos or %o4, %g5, %o4 36360662d10Schristos or %o5, %g4, %o5 36460662d10Schristos stx %o4, [%o2 + 0x90] ! k[36, 37] 36560662d10Schristos stx %o5, [%o2 + 0x98] ! k[38, 39] 36660662d10Schristos srlx %o4, 64-17, %g4 36760662d10Schristos sllx %o4, 17, %o4 36860662d10Schristos srlx %o5, 64-17, %g5 36960662d10Schristos sllx %o5, 17, %o5 37060662d10Schristos or %o4, %g5, %o4 37160662d10Schristos or %o5, %g4, %o5 37260662d10Schristos stx %o4, [%o2 + 0xb0] ! k[44, 45] 37360662d10Schristos stx %o5, [%o2 + 0xb8] ! k[46, 47] 37460662d10Schristos 37560662d10Schristos mov 3, %o3 37660662d10Schristos st %o3, [%o2 + 0x110] 37760662d10Schristos retl 37860662d10Schristos xor %o0, %o0, %o0 37960662d10Schristos 38060662d10Schristos.align 16 38160662d10Schristos.L256key: 38260662d10Schristos ldd [%o4 + 32], %f24 38360662d10Schristos ldd [%o4 + 40], %f26 38460662d10Schristos 38560662d10Schristos std %f0, [%o2 + 0x30] ! k[12, 13] 38660662d10Schristos std %f2, [%o2 + 0x38] ! k[14, 15] 38760662d10Schristos 38860662d10Schristos .word 0x81b10d80 !fxor %f4,%f0,%f0 38960662d10Schristos .word 0x85b18d82 !fxor %f6,%f2,%f2 39060662d10Schristos .word 0x84ce0182 !camellia_f %f24,%f2,%f0,%f2 39160662d10Schristos .word 0x80ce8580 !camellia_f %f26,%f0,%f2,%f0 39260662d10Schristos 39360662d10Schristos std %f0, [%o2 + 0x10] ! k[ 4, 5] 39460662d10Schristos std %f2, [%o2 + 0x18] ! k[ 6, 7] 39560662d10Schristos 39660662d10Schristos .word 0x99b02200 !movdtox %f0,%o4 39760662d10Schristos .word 0x9bb02202 !movdtox %f2,%o5 39860662d10Schristos srlx %o4, 64-30, %g4 39960662d10Schristos sllx %o4, 30, %o4 40060662d10Schristos srlx %o5, 64-30, %g5 40160662d10Schristos sllx %o5, 30, %o5 40260662d10Schristos or %o4, %g5, %o4 40360662d10Schristos or %o5, %g4, %o5 40460662d10Schristos stx %o4, [%o2 + 0x50] ! k[20, 21] 40560662d10Schristos stx %o5, [%o2 + 0x58] ! k[22, 23] 40660662d10Schristos srlx %o4, 64-30, %g4 40760662d10Schristos sllx %o4, 30, %o4 40860662d10Schristos srlx %o5, 64-30, %g5 40960662d10Schristos sllx %o5, 30, %o5 41060662d10Schristos or %o4, %g5, %o4 41160662d10Schristos or %o5, %g4, %o5 41260662d10Schristos stx %o4, [%o2 + 0xa0] ! k[40, 41] 41360662d10Schristos stx %o5, [%o2 + 0xa8] ! k[42, 43] 41460662d10Schristos srlx %o4, 64-51, %g4 41560662d10Schristos sllx %o4, 51, %o4 41660662d10Schristos srlx %o5, 64-51, %g5 41760662d10Schristos sllx %o5, 51, %o5 41860662d10Schristos or %o4, %g5, %o4 41960662d10Schristos or %o5, %g4, %o5 42060662d10Schristos stx %o4, [%o2 + 0x100] ! k[64, 65] 42160662d10Schristos stx %o5, [%o2 + 0x108] ! k[66, 67] 42260662d10Schristos 42360662d10Schristos .word 0x99b02204 !movdtox %f4,%o4 ! k[ 8, 9] 42460662d10Schristos .word 0x9bb02206 !movdtox %f6,%o5 ! k[10, 11] 42560662d10Schristos srlx %o4, 64-15, %g4 42660662d10Schristos sllx %o4, 15, %o4 42760662d10Schristos srlx %o5, 64-15, %g5 42860662d10Schristos sllx %o5, 15, %o5 42960662d10Schristos or %o4, %g5, %o4 43060662d10Schristos or %o5, %g4, %o5 43160662d10Schristos stx %o4, [%o2 + 0x20] ! k[ 8, 9] 43260662d10Schristos stx %o5, [%o2 + 0x28] ! k[10, 11] 43360662d10Schristos srlx %o4, 64-15, %g4 43460662d10Schristos sllx %o4, 15, %o4 43560662d10Schristos srlx %o5, 64-15, %g5 43660662d10Schristos sllx %o5, 15, %o5 43760662d10Schristos or %o4, %g5, %o4 43860662d10Schristos or %o5, %g4, %o5 43960662d10Schristos stx %o4, [%o2 + 0x40] ! k[16, 17] 44060662d10Schristos stx %o5, [%o2 + 0x48] ! k[18, 19] 44160662d10Schristos srlx %o4, 64-30, %g4 44260662d10Schristos sllx %o4, 30, %o4 44360662d10Schristos srlx %o5, 64-30, %g5 44460662d10Schristos sllx %o5, 30, %o5 44560662d10Schristos or %o4, %g5, %o4 44660662d10Schristos or %o5, %g4, %o5 44760662d10Schristos stx %o4, [%o2 + 0x90] ! k[36, 37] 44860662d10Schristos stx %o5, [%o2 + 0x98] ! k[38, 39] 44960662d10Schristos srlx %o4, 64-34, %g4 45060662d10Schristos sllx %o4, 34, %o4 45160662d10Schristos srlx %o5, 64-34, %g5 45260662d10Schristos sllx %o5, 34, %o5 45360662d10Schristos or %o4, %g5, %o4 45460662d10Schristos or %o5, %g4, %o5 45560662d10Schristos stx %o4, [%o2 + 0xd0] ! k[52, 53] 45660662d10Schristos stx %o5, [%o2 + 0xd8] ! k[54, 55] 45760662d10Schristos ldx [%o2 + 0x30], %o4 ! k[12, 13] 45860662d10Schristos ldx [%o2 + 0x38], %o5 ! k[14, 15] 45960662d10Schristos srlx %o4, 64-15, %g4 46060662d10Schristos sllx %o4, 15, %o4 46160662d10Schristos srlx %o5, 64-15, %g5 46260662d10Schristos sllx %o5, 15, %o5 46360662d10Schristos or %o4, %g5, %o4 46460662d10Schristos or %o5, %g4, %o5 46560662d10Schristos stx %o4, [%o2 + 0x30] ! k[12, 13] 46660662d10Schristos stx %o5, [%o2 + 0x38] ! k[14, 15] 46760662d10Schristos srlx %o4, 64-30, %g4 46860662d10Schristos sllx %o4, 30, %o4 46960662d10Schristos srlx %o5, 64-30, %g5 47060662d10Schristos sllx %o5, 30, %o5 47160662d10Schristos or %o4, %g5, %o4 47260662d10Schristos or %o5, %g4, %o5 47360662d10Schristos stx %o4, [%o2 + 0x70] ! k[28, 29] 47460662d10Schristos stx %o5, [%o2 + 0x78] ! k[30, 31] 47560662d10Schristos srlx %o4, 32, %g4 47660662d10Schristos srlx %o5, 32, %g5 47760662d10Schristos st %o4, [%o2 + 0xc0] ! k[48] 47860662d10Schristos st %g5, [%o2 + 0xc4] ! k[49] 47960662d10Schristos st %o5, [%o2 + 0xc8] ! k[50] 48060662d10Schristos st %g4, [%o2 + 0xcc] ! k[51] 48160662d10Schristos srlx %o4, 64-49, %g4 48260662d10Schristos sllx %o4, 49, %o4 48360662d10Schristos srlx %o5, 64-49, %g5 48460662d10Schristos sllx %o5, 49, %o5 48560662d10Schristos or %o4, %g5, %o4 48660662d10Schristos or %o5, %g4, %o5 48760662d10Schristos stx %o4, [%o2 + 0xe0] ! k[56, 57] 48860662d10Schristos stx %o5, [%o2 + 0xe8] ! k[58, 59] 48960662d10Schristos 49060662d10Schristos .word 0x99b0221c !movdtox %f28,%o4 ! k[ 0, 1] 49160662d10Schristos .word 0x9bb0221e !movdtox %f30,%o5 ! k[ 2, 3] 49260662d10Schristos srlx %o4, 64-45, %g4 49360662d10Schristos sllx %o4, 45, %o4 49460662d10Schristos srlx %o5, 64-45, %g5 49560662d10Schristos sllx %o5, 45, %o5 49660662d10Schristos or %o4, %g5, %o4 49760662d10Schristos or %o5, %g4, %o5 49860662d10Schristos stx %o4, [%o2 + 0x60] ! k[24, 25] 49960662d10Schristos stx %o5, [%o2 + 0x68] ! k[26, 27] 50060662d10Schristos srlx %o4, 64-15, %g4 50160662d10Schristos sllx %o4, 15, %o4 50260662d10Schristos srlx %o5, 64-15, %g5 50360662d10Schristos sllx %o5, 15, %o5 50460662d10Schristos or %o4, %g5, %o4 50560662d10Schristos or %o5, %g4, %o5 50660662d10Schristos stx %o4, [%o2 + 0x80] ! k[32, 33] 50760662d10Schristos stx %o5, [%o2 + 0x88] ! k[34, 35] 50860662d10Schristos srlx %o4, 64-17, %g4 50960662d10Schristos sllx %o4, 17, %o4 51060662d10Schristos srlx %o5, 64-17, %g5 51160662d10Schristos sllx %o5, 17, %o5 51260662d10Schristos or %o4, %g5, %o4 51360662d10Schristos or %o5, %g4, %o5 51460662d10Schristos stx %o4, [%o2 + 0xb0] ! k[44, 45] 51560662d10Schristos stx %o5, [%o2 + 0xb8] ! k[46, 47] 51660662d10Schristos srlx %o4, 64-34, %g4 51760662d10Schristos sllx %o4, 34, %o4 51860662d10Schristos srlx %o5, 64-34, %g5 51960662d10Schristos sllx %o5, 34, %o5 52060662d10Schristos or %o4, %g5, %o4 52160662d10Schristos or %o5, %g4, %o5 52260662d10Schristos stx %o4, [%o2 + 0xf0] ! k[60, 61] 52360662d10Schristos stx %o5, [%o2 + 0xf8] ! k[62, 63] 52460662d10Schristos 52560662d10Schristos mov 4, %o3 52660662d10Schristos st %o3, [%o2 + 0x110] 52760662d10Schristos retl 52860662d10Schristos xor %o0, %o0, %o0 52960662d10Schristos.type cmll_t4_set_key,#function 53060662d10Schristos.size cmll_t4_set_key,.-cmll_t4_set_key 53160662d10Schristos.align 32 53260662d10SchristosSIGMA: 53360662d10Schristos .long 0xa09e667f, 0x3bcc908b, 0xb67ae858, 0x4caa73b2 53460662d10Schristos .long 0xc6ef372f, 0xe94f82be, 0x54ff53a5, 0xf1d36f1c 53560662d10Schristos .long 0x10e527fa, 0xde682d1d, 0xb05688c2, 0xb3e6c1fd 53660662d10Schristos.type SIGMA,#object 53760662d10Schristos.size SIGMA,.-SIGMA 53860662d10Schristos.asciz "Camellia for SPARC T4, David S. Miller, Andy Polyakov" 53960662d10Schristos.align 32 54060662d10Schristos_cmll128_load_enckey: 54160662d10Schristos ldx [%i3 + 0], %g4 54260662d10Schristos ldx [%i3 + 8], %g5 54360662d10Schristos ldd [%i3 + 16], %f16 54460662d10Schristos ldd [%i3 + 24], %f18 54560662d10Schristos ldd [%i3 + 32], %f20 54660662d10Schristos ldd [%i3 + 40], %f22 54760662d10Schristos ldd [%i3 + 48], %f24 54860662d10Schristos ldd [%i3 + 56], %f26 54960662d10Schristos ldd [%i3 + 64], %f28 55060662d10Schristos ldd [%i3 + 72], %f30 55160662d10Schristos ldd [%i3 + 80], %f32 55260662d10Schristos ldd [%i3 + 88], %f34 55360662d10Schristos ldd [%i3 + 96], %f36 55460662d10Schristos ldd [%i3 + 104], %f38 55560662d10Schristos ldd [%i3 + 112], %f40 55660662d10Schristos ldd [%i3 + 120], %f42 55760662d10Schristos ldd [%i3 + 128], %f44 55860662d10Schristos ldd [%i3 + 136], %f46 55960662d10Schristos ldd [%i3 + 144], %f48 56060662d10Schristos ldd [%i3 + 152], %f50 56160662d10Schristos ldd [%i3 + 160], %f52 56260662d10Schristos ldd [%i3 + 168], %f54 56360662d10Schristos ldd [%i3 + 176], %f56 56460662d10Schristos ldd [%i3 + 184], %f58 56560662d10Schristos ldd [%i3 + 192], %f60 56660662d10Schristos ldd [%i3 + 200], %f62 56760662d10Schristos retl 56860662d10Schristos nop 56960662d10Schristos.type _cmll128_load_enckey,#function 57060662d10Schristos.size _cmll128_load_enckey,.-_cmll128_load_enckey 57160662d10Schristos_cmll256_load_enckey=_cmll128_load_enckey 57260662d10Schristos 57360662d10Schristos.align 32 57460662d10Schristos_cmll256_load_deckey: 57560662d10Schristos ldd [%i3 + 64], %f62 57660662d10Schristos ldd [%i3 + 72], %f60 57760662d10Schristos b .Load_deckey 57860662d10Schristos add %i3, 64, %i3 57960662d10Schristos_cmll128_load_deckey: 58060662d10Schristos ldd [%i3 + 0], %f60 58160662d10Schristos ldd [%i3 + 8], %f62 58260662d10Schristos.Load_deckey: 58360662d10Schristos ldd [%i3 + 16], %f58 58460662d10Schristos ldd [%i3 + 24], %f56 58560662d10Schristos ldd [%i3 + 32], %f54 58660662d10Schristos ldd [%i3 + 40], %f52 58760662d10Schristos ldd [%i3 + 48], %f50 58860662d10Schristos ldd [%i3 + 56], %f48 58960662d10Schristos ldd [%i3 + 64], %f46 59060662d10Schristos ldd [%i3 + 72], %f44 59160662d10Schristos ldd [%i3 + 80], %f42 59260662d10Schristos ldd [%i3 + 88], %f40 59360662d10Schristos ldd [%i3 + 96], %f38 59460662d10Schristos ldd [%i3 + 104], %f36 59560662d10Schristos ldd [%i3 + 112], %f34 59660662d10Schristos ldd [%i3 + 120], %f32 59760662d10Schristos ldd [%i3 + 128], %f30 59860662d10Schristos ldd [%i3 + 136], %f28 59960662d10Schristos ldd [%i3 + 144], %f26 60060662d10Schristos ldd [%i3 + 152], %f24 60160662d10Schristos ldd [%i3 + 160], %f22 60260662d10Schristos ldd [%i3 + 168], %f20 60360662d10Schristos ldd [%i3 + 176], %f18 60460662d10Schristos ldd [%i3 + 184], %f16 60560662d10Schristos ldx [%i3 + 192], %g4 60660662d10Schristos retl 60760662d10Schristos ldx [%i3 + 200], %g5 60860662d10Schristos.type _cmll256_load_deckey,#function 60960662d10Schristos.size _cmll256_load_deckey,.-_cmll256_load_deckey 61060662d10Schristos 61160662d10Schristos.align 32 61260662d10Schristos_cmll128_encrypt_1x: 61360662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 61460662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 61560662d10Schristos .word 0x84cd0182 !camellia_f %f20,%f2,%f0,%f2 61660662d10Schristos .word 0x80cd8580 !camellia_f %f22,%f0,%f2,%f0 61760662d10Schristos .word 0x84ce0182 !camellia_f %f24,%f2,%f0,%f2 61860662d10Schristos .word 0x80ce8580 !camellia_f %f26,%f0,%f2,%f0 61960662d10Schristos .word 0x81b72780 !camellia_fl %f28,%f0,%f0 62060662d10Schristos .word 0x85b7a7a2 !camellia_fli %f30,%f2,%f2 62160662d10Schristos .word 0x84c84182 !camellia_f %f32,%f2,%f0,%f2 62260662d10Schristos .word 0x80c8c580 !camellia_f %f34,%f0,%f2,%f0 62360662d10Schristos .word 0x84c94182 !camellia_f %f36,%f2,%f0,%f2 62460662d10Schristos .word 0x80c9c580 !camellia_f %f38,%f0,%f2,%f0 62560662d10Schristos .word 0x84ca4182 !camellia_f %f40,%f2,%f0,%f2 62660662d10Schristos .word 0x80cac580 !camellia_f %f42,%f0,%f2,%f0 62760662d10Schristos .word 0x81b36780 !camellia_fl %f44,%f0,%f0 62860662d10Schristos .word 0x85b3e7a2 !camellia_fli %f46,%f2,%f2 62960662d10Schristos .word 0x84cc4182 !camellia_f %f48,%f2,%f0,%f2 63060662d10Schristos .word 0x80ccc580 !camellia_f %f50,%f0,%f2,%f0 63160662d10Schristos .word 0x84cd4182 !camellia_f %f52,%f2,%f0,%f2 63260662d10Schristos .word 0x80cdc580 !camellia_f %f54,%f0,%f2,%f0 63360662d10Schristos .word 0x88ce4182 !camellia_f %f56,%f2,%f0,%f4 63460662d10Schristos .word 0x84cec980 !camellia_f %f58,%f0,%f4,%f2 63560662d10Schristos .word 0x81b74d84 !fxor %f60,%f4,%f0 63660662d10Schristos retl 63760662d10Schristos .word 0x85b7cd82 !fxor %f62,%f2,%f2 63860662d10Schristos.type _cmll128_encrypt_1x,#function 63960662d10Schristos.size _cmll128_encrypt_1x,.-_cmll128_encrypt_1x 64060662d10Schristos_cmll128_decrypt_1x=_cmll128_encrypt_1x 64160662d10Schristos 64260662d10Schristos.align 32 64360662d10Schristos_cmll128_encrypt_2x: 64460662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 64560662d10Schristos .word 0x8ccc0986 !camellia_f %f16,%f6,%f4,%f6 64660662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 64760662d10Schristos .word 0x88cc8d84 !camellia_f %f18,%f4,%f6,%f4 64860662d10Schristos .word 0x84cd0182 !camellia_f %f20,%f2,%f0,%f2 64960662d10Schristos .word 0x8ccd0986 !camellia_f %f20,%f6,%f4,%f6 65060662d10Schristos .word 0x80cd8580 !camellia_f %f22,%f0,%f2,%f0 65160662d10Schristos .word 0x88cd8d84 !camellia_f %f22,%f4,%f6,%f4 65260662d10Schristos .word 0x84ce0182 !camellia_f %f24,%f2,%f0,%f2 65360662d10Schristos .word 0x8cce0986 !camellia_f %f24,%f6,%f4,%f6 65460662d10Schristos .word 0x80ce8580 !camellia_f %f26,%f0,%f2,%f0 65560662d10Schristos .word 0x88ce8d84 !camellia_f %f26,%f4,%f6,%f4 65660662d10Schristos .word 0x81b72780 !camellia_fl %f28,%f0,%f0 65760662d10Schristos .word 0x89b72784 !camellia_fl %f28,%f4,%f4 65860662d10Schristos .word 0x85b7a7a2 !camellia_fli %f30,%f2,%f2 65960662d10Schristos .word 0x8db7a7a6 !camellia_fli %f30,%f6,%f6 66060662d10Schristos .word 0x84c84182 !camellia_f %f32,%f2,%f0,%f2 66160662d10Schristos .word 0x8cc84986 !camellia_f %f32,%f6,%f4,%f6 66260662d10Schristos .word 0x80c8c580 !camellia_f %f34,%f0,%f2,%f0 66360662d10Schristos .word 0x88c8cd84 !camellia_f %f34,%f4,%f6,%f4 66460662d10Schristos .word 0x84c94182 !camellia_f %f36,%f2,%f0,%f2 66560662d10Schristos .word 0x8cc94986 !camellia_f %f36,%f6,%f4,%f6 66660662d10Schristos .word 0x80c9c580 !camellia_f %f38,%f0,%f2,%f0 66760662d10Schristos .word 0x88c9cd84 !camellia_f %f38,%f4,%f6,%f4 66860662d10Schristos .word 0x84ca4182 !camellia_f %f40,%f2,%f0,%f2 66960662d10Schristos .word 0x8cca4986 !camellia_f %f40,%f6,%f4,%f6 67060662d10Schristos .word 0x80cac580 !camellia_f %f42,%f0,%f2,%f0 67160662d10Schristos .word 0x88cacd84 !camellia_f %f42,%f4,%f6,%f4 67260662d10Schristos .word 0x81b36780 !camellia_fl %f44,%f0,%f0 67360662d10Schristos .word 0x89b36784 !camellia_fl %f44,%f4,%f4 67460662d10Schristos .word 0x85b3e7a2 !camellia_fli %f46,%f2,%f2 67560662d10Schristos .word 0x8db3e7a6 !camellia_fli %f46,%f6,%f6 67660662d10Schristos .word 0x84cc4182 !camellia_f %f48,%f2,%f0,%f2 67760662d10Schristos .word 0x8ccc4986 !camellia_f %f48,%f6,%f4,%f6 67860662d10Schristos .word 0x80ccc580 !camellia_f %f50,%f0,%f2,%f0 67960662d10Schristos .word 0x88cccd84 !camellia_f %f50,%f4,%f6,%f4 68060662d10Schristos .word 0x84cd4182 !camellia_f %f52,%f2,%f0,%f2 68160662d10Schristos .word 0x8ccd4986 !camellia_f %f52,%f6,%f4,%f6 68260662d10Schristos .word 0x80cdc580 !camellia_f %f54,%f0,%f2,%f0 68360662d10Schristos .word 0x88cdcd84 !camellia_f %f54,%f4,%f6,%f4 68460662d10Schristos .word 0x90ce4182 !camellia_f %f56,%f2,%f0,%f8 68560662d10Schristos .word 0x94ce4986 !camellia_f %f56,%f6,%f4,%f10 68660662d10Schristos .word 0x84ced180 !camellia_f %f58,%f0,%f8,%f2 68760662d10Schristos .word 0x8cced584 !camellia_f %f58,%f4,%f10,%f6 68860662d10Schristos .word 0x81b74d88 !fxor %f60,%f8,%f0 68960662d10Schristos .word 0x89b74d8a !fxor %f60,%f10,%f4 69060662d10Schristos .word 0x85b7cd82 !fxor %f62,%f2,%f2 69160662d10Schristos retl 69260662d10Schristos .word 0x8db7cd86 !fxor %f62,%f6,%f6 69360662d10Schristos.type _cmll128_encrypt_2x,#function 69460662d10Schristos.size _cmll128_encrypt_2x,.-_cmll128_encrypt_2x 69560662d10Schristos_cmll128_decrypt_2x=_cmll128_encrypt_2x 69660662d10Schristos 69760662d10Schristos.align 32 69860662d10Schristos_cmll256_encrypt_1x: 69960662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 70060662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 70160662d10Schristos ldd [%i3 + 208], %f16 70260662d10Schristos ldd [%i3 + 216], %f18 70360662d10Schristos .word 0x84cd0182 !camellia_f %f20,%f2,%f0,%f2 70460662d10Schristos .word 0x80cd8580 !camellia_f %f22,%f0,%f2,%f0 70560662d10Schristos ldd [%i3 + 224], %f20 70660662d10Schristos ldd [%i3 + 232], %f22 70760662d10Schristos .word 0x84ce0182 !camellia_f %f24,%f2,%f0,%f2 70860662d10Schristos .word 0x80ce8580 !camellia_f %f26,%f0,%f2,%f0 70960662d10Schristos ldd [%i3 + 240], %f24 71060662d10Schristos ldd [%i3 + 248], %f26 71160662d10Schristos .word 0x81b72780 !camellia_fl %f28,%f0,%f0 71260662d10Schristos .word 0x85b7a7a2 !camellia_fli %f30,%f2,%f2 71360662d10Schristos ldd [%i3 + 256], %f28 71460662d10Schristos ldd [%i3 + 264], %f30 71560662d10Schristos .word 0x84c84182 !camellia_f %f32,%f2,%f0,%f2 71660662d10Schristos .word 0x80c8c580 !camellia_f %f34,%f0,%f2,%f0 71760662d10Schristos .word 0x84c94182 !camellia_f %f36,%f2,%f0,%f2 71860662d10Schristos .word 0x80c9c580 !camellia_f %f38,%f0,%f2,%f0 71960662d10Schristos .word 0x84ca4182 !camellia_f %f40,%f2,%f0,%f2 72060662d10Schristos .word 0x80cac580 !camellia_f %f42,%f0,%f2,%f0 72160662d10Schristos .word 0x81b36780 !camellia_fl %f44,%f0,%f0 72260662d10Schristos .word 0x85b3e7a2 !camellia_fli %f46,%f2,%f2 72360662d10Schristos .word 0x84cc4182 !camellia_f %f48,%f2,%f0,%f2 72460662d10Schristos .word 0x80ccc580 !camellia_f %f50,%f0,%f2,%f0 72560662d10Schristos .word 0x84cd4182 !camellia_f %f52,%f2,%f0,%f2 72660662d10Schristos .word 0x80cdc580 !camellia_f %f54,%f0,%f2,%f0 72760662d10Schristos .word 0x84ce4182 !camellia_f %f56,%f2,%f0,%f2 72860662d10Schristos .word 0x80cec580 !camellia_f %f58,%f0,%f2,%f0 72960662d10Schristos .word 0x81b76780 !camellia_fl %f60,%f0,%f0 73060662d10Schristos .word 0x85b7e7a2 !camellia_fli %f62,%f2,%f2 73160662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 73260662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 73360662d10Schristos ldd [%i3 + 16], %f16 73460662d10Schristos ldd [%i3 + 24], %f18 73560662d10Schristos .word 0x84cd0182 !camellia_f %f20,%f2,%f0,%f2 73660662d10Schristos .word 0x80cd8580 !camellia_f %f22,%f0,%f2,%f0 73760662d10Schristos ldd [%i3 + 32], %f20 73860662d10Schristos ldd [%i3 + 40], %f22 73960662d10Schristos .word 0x88ce0182 !camellia_f %f24,%f2,%f0,%f4 74060662d10Schristos .word 0x84ce8980 !camellia_f %f26,%f0,%f4,%f2 74160662d10Schristos ldd [%i3 + 48], %f24 74260662d10Schristos ldd [%i3 + 56], %f26 74360662d10Schristos .word 0x81b70d84 !fxor %f28,%f4,%f0 74460662d10Schristos .word 0x85b78d82 !fxor %f30,%f2,%f2 74560662d10Schristos ldd [%i3 + 64], %f28 74660662d10Schristos retl 74760662d10Schristos ldd [%i3 + 72], %f30 74860662d10Schristos.type _cmll256_encrypt_1x,#function 74960662d10Schristos.size _cmll256_encrypt_1x,.-_cmll256_encrypt_1x 75060662d10Schristos 75160662d10Schristos.align 32 75260662d10Schristos_cmll256_encrypt_2x: 75360662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 75460662d10Schristos .word 0x8ccc0986 !camellia_f %f16,%f6,%f4,%f6 75560662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 75660662d10Schristos .word 0x88cc8d84 !camellia_f %f18,%f4,%f6,%f4 75760662d10Schristos ldd [%i3 + 208], %f16 75860662d10Schristos ldd [%i3 + 216], %f18 75960662d10Schristos .word 0x84cd0182 !camellia_f %f20,%f2,%f0,%f2 76060662d10Schristos .word 0x8ccd0986 !camellia_f %f20,%f6,%f4,%f6 76160662d10Schristos .word 0x80cd8580 !camellia_f %f22,%f0,%f2,%f0 76260662d10Schristos .word 0x88cd8d84 !camellia_f %f22,%f4,%f6,%f4 76360662d10Schristos ldd [%i3 + 224], %f20 76460662d10Schristos ldd [%i3 + 232], %f22 76560662d10Schristos .word 0x84ce0182 !camellia_f %f24,%f2,%f0,%f2 76660662d10Schristos .word 0x8cce0986 !camellia_f %f24,%f6,%f4,%f6 76760662d10Schristos .word 0x80ce8580 !camellia_f %f26,%f0,%f2,%f0 76860662d10Schristos .word 0x88ce8d84 !camellia_f %f26,%f4,%f6,%f4 76960662d10Schristos ldd [%i3 + 240], %f24 77060662d10Schristos ldd [%i3 + 248], %f26 77160662d10Schristos .word 0x81b72780 !camellia_fl %f28,%f0,%f0 77260662d10Schristos .word 0x89b72784 !camellia_fl %f28,%f4,%f4 77360662d10Schristos .word 0x85b7a7a2 !camellia_fli %f30,%f2,%f2 77460662d10Schristos .word 0x8db7a7a6 !camellia_fli %f30,%f6,%f6 77560662d10Schristos ldd [%i3 + 256], %f28 77660662d10Schristos ldd [%i3 + 264], %f30 77760662d10Schristos .word 0x84c84182 !camellia_f %f32,%f2,%f0,%f2 77860662d10Schristos .word 0x8cc84986 !camellia_f %f32,%f6,%f4,%f6 77960662d10Schristos .word 0x80c8c580 !camellia_f %f34,%f0,%f2,%f0 78060662d10Schristos .word 0x88c8cd84 !camellia_f %f34,%f4,%f6,%f4 78160662d10Schristos .word 0x84c94182 !camellia_f %f36,%f2,%f0,%f2 78260662d10Schristos .word 0x8cc94986 !camellia_f %f36,%f6,%f4,%f6 78360662d10Schristos .word 0x80c9c580 !camellia_f %f38,%f0,%f2,%f0 78460662d10Schristos .word 0x88c9cd84 !camellia_f %f38,%f4,%f6,%f4 78560662d10Schristos .word 0x84ca4182 !camellia_f %f40,%f2,%f0,%f2 78660662d10Schristos .word 0x8cca4986 !camellia_f %f40,%f6,%f4,%f6 78760662d10Schristos .word 0x80cac580 !camellia_f %f42,%f0,%f2,%f0 78860662d10Schristos .word 0x88cacd84 !camellia_f %f42,%f4,%f6,%f4 78960662d10Schristos .word 0x81b36780 !camellia_fl %f44,%f0,%f0 79060662d10Schristos .word 0x89b36784 !camellia_fl %f44,%f4,%f4 79160662d10Schristos .word 0x85b3e7a2 !camellia_fli %f46,%f2,%f2 79260662d10Schristos .word 0x8db3e7a6 !camellia_fli %f46,%f6,%f6 79360662d10Schristos .word 0x84cc4182 !camellia_f %f48,%f2,%f0,%f2 79460662d10Schristos .word 0x8ccc4986 !camellia_f %f48,%f6,%f4,%f6 79560662d10Schristos .word 0x80ccc580 !camellia_f %f50,%f0,%f2,%f0 79660662d10Schristos .word 0x88cccd84 !camellia_f %f50,%f4,%f6,%f4 79760662d10Schristos .word 0x84cd4182 !camellia_f %f52,%f2,%f0,%f2 79860662d10Schristos .word 0x8ccd4986 !camellia_f %f52,%f6,%f4,%f6 79960662d10Schristos .word 0x80cdc580 !camellia_f %f54,%f0,%f2,%f0 80060662d10Schristos .word 0x88cdcd84 !camellia_f %f54,%f4,%f6,%f4 80160662d10Schristos .word 0x84ce4182 !camellia_f %f56,%f2,%f0,%f2 80260662d10Schristos .word 0x8cce4986 !camellia_f %f56,%f6,%f4,%f6 80360662d10Schristos .word 0x80cec580 !camellia_f %f58,%f0,%f2,%f0 80460662d10Schristos .word 0x88cecd84 !camellia_f %f58,%f4,%f6,%f4 80560662d10Schristos .word 0x81b76780 !camellia_fl %f60,%f0,%f0 80660662d10Schristos .word 0x89b76784 !camellia_fl %f60,%f4,%f4 80760662d10Schristos .word 0x85b7e7a2 !camellia_fli %f62,%f2,%f2 80860662d10Schristos .word 0x8db7e7a6 !camellia_fli %f62,%f6,%f6 80960662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 81060662d10Schristos .word 0x8ccc0986 !camellia_f %f16,%f6,%f4,%f6 81160662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 81260662d10Schristos .word 0x88cc8d84 !camellia_f %f18,%f4,%f6,%f4 81360662d10Schristos ldd [%i3 + 16], %f16 81460662d10Schristos ldd [%i3 + 24], %f18 81560662d10Schristos .word 0x84cd0182 !camellia_f %f20,%f2,%f0,%f2 81660662d10Schristos .word 0x8ccd0986 !camellia_f %f20,%f6,%f4,%f6 81760662d10Schristos .word 0x80cd8580 !camellia_f %f22,%f0,%f2,%f0 81860662d10Schristos .word 0x88cd8d84 !camellia_f %f22,%f4,%f6,%f4 81960662d10Schristos ldd [%i3 + 32], %f20 82060662d10Schristos ldd [%i3 + 40], %f22 82160662d10Schristos .word 0x90ce0182 !camellia_f %f24,%f2,%f0,%f8 82260662d10Schristos .word 0x94ce0986 !camellia_f %f24,%f6,%f4,%f10 82360662d10Schristos .word 0x84ce9180 !camellia_f %f26,%f0,%f8,%f2 82460662d10Schristos .word 0x8cce9584 !camellia_f %f26,%f4,%f10,%f6 82560662d10Schristos ldd [%i3 + 48], %f24 82660662d10Schristos ldd [%i3 + 56], %f26 82760662d10Schristos .word 0x81b70d88 !fxor %f28,%f8,%f0 82860662d10Schristos .word 0x89b70d8a !fxor %f28,%f10,%f4 82960662d10Schristos .word 0x85b78d82 !fxor %f30,%f2,%f2 83060662d10Schristos .word 0x8db78d86 !fxor %f30,%f6,%f6 83160662d10Schristos ldd [%i3 + 64], %f28 83260662d10Schristos retl 83360662d10Schristos ldd [%i3 + 72], %f30 83460662d10Schristos.type _cmll256_encrypt_2x,#function 83560662d10Schristos.size _cmll256_encrypt_2x,.-_cmll256_encrypt_2x 83660662d10Schristos 83760662d10Schristos.align 32 83860662d10Schristos_cmll256_decrypt_1x: 83960662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 84060662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 84160662d10Schristos ldd [%i3 - 8], %f16 84260662d10Schristos ldd [%i3 - 16], %f18 84360662d10Schristos .word 0x84cd0182 !camellia_f %f20,%f2,%f0,%f2 84460662d10Schristos .word 0x80cd8580 !camellia_f %f22,%f0,%f2,%f0 84560662d10Schristos ldd [%i3 - 24], %f20 84660662d10Schristos ldd [%i3 - 32], %f22 84760662d10Schristos .word 0x84ce0182 !camellia_f %f24,%f2,%f0,%f2 84860662d10Schristos .word 0x80ce8580 !camellia_f %f26,%f0,%f2,%f0 84960662d10Schristos ldd [%i3 - 40], %f24 85060662d10Schristos ldd [%i3 - 48], %f26 85160662d10Schristos .word 0x81b72780 !camellia_fl %f28,%f0,%f0 85260662d10Schristos .word 0x85b7a7a2 !camellia_fli %f30,%f2,%f2 85360662d10Schristos ldd [%i3 - 56], %f28 85460662d10Schristos ldd [%i3 - 64], %f30 85560662d10Schristos .word 0x84c84182 !camellia_f %f32,%f2,%f0,%f2 85660662d10Schristos .word 0x80c8c580 !camellia_f %f34,%f0,%f2,%f0 85760662d10Schristos .word 0x84c94182 !camellia_f %f36,%f2,%f0,%f2 85860662d10Schristos .word 0x80c9c580 !camellia_f %f38,%f0,%f2,%f0 85960662d10Schristos .word 0x84ca4182 !camellia_f %f40,%f2,%f0,%f2 86060662d10Schristos .word 0x80cac580 !camellia_f %f42,%f0,%f2,%f0 86160662d10Schristos .word 0x81b36780 !camellia_fl %f44,%f0,%f0 86260662d10Schristos .word 0x85b3e7a2 !camellia_fli %f46,%f2,%f2 86360662d10Schristos .word 0x84cc4182 !camellia_f %f48,%f2,%f0,%f2 86460662d10Schristos .word 0x80ccc580 !camellia_f %f50,%f0,%f2,%f0 86560662d10Schristos .word 0x84cd4182 !camellia_f %f52,%f2,%f0,%f2 86660662d10Schristos .word 0x80cdc580 !camellia_f %f54,%f0,%f2,%f0 86760662d10Schristos .word 0x84ce4182 !camellia_f %f56,%f2,%f0,%f2 86860662d10Schristos .word 0x80cec580 !camellia_f %f58,%f0,%f2,%f0 86960662d10Schristos .word 0x81b76780 !camellia_fl %f60,%f0,%f0 87060662d10Schristos .word 0x85b7e7a2 !camellia_fli %f62,%f2,%f2 87160662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 87260662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 87360662d10Schristos ldd [%i3 + 184], %f16 87460662d10Schristos ldd [%i3 + 176], %f18 87560662d10Schristos .word 0x84cd0182 !camellia_f %f20,%f2,%f0,%f2 87660662d10Schristos .word 0x80cd8580 !camellia_f %f22,%f0,%f2,%f0 87760662d10Schristos ldd [%i3 + 168], %f20 87860662d10Schristos ldd [%i3 + 160], %f22 87960662d10Schristos .word 0x88ce0182 !camellia_f %f24,%f2,%f0,%f4 88060662d10Schristos .word 0x84ce8980 !camellia_f %f26,%f0,%f4,%f2 88160662d10Schristos ldd [%i3 + 152], %f24 88260662d10Schristos ldd [%i3 + 144], %f26 88360662d10Schristos .word 0x81b78d84 !fxor %f30,%f4,%f0 88460662d10Schristos .word 0x85b70d82 !fxor %f28,%f2,%f2 88560662d10Schristos ldd [%i3 + 136], %f28 88660662d10Schristos retl 88760662d10Schristos ldd [%i3 + 128], %f30 88860662d10Schristos.type _cmll256_decrypt_1x,#function 88960662d10Schristos.size _cmll256_decrypt_1x,.-_cmll256_decrypt_1x 89060662d10Schristos 89160662d10Schristos.align 32 89260662d10Schristos_cmll256_decrypt_2x: 89360662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 89460662d10Schristos .word 0x8ccc0986 !camellia_f %f16,%f6,%f4,%f6 89560662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 89660662d10Schristos .word 0x88cc8d84 !camellia_f %f18,%f4,%f6,%f4 89760662d10Schristos ldd [%i3 - 8], %f16 89860662d10Schristos ldd [%i3 - 16], %f18 89960662d10Schristos .word 0x84cd0182 !camellia_f %f20,%f2,%f0,%f2 90060662d10Schristos .word 0x8ccd0986 !camellia_f %f20,%f6,%f4,%f6 90160662d10Schristos .word 0x80cd8580 !camellia_f %f22,%f0,%f2,%f0 90260662d10Schristos .word 0x88cd8d84 !camellia_f %f22,%f4,%f6,%f4 90360662d10Schristos ldd [%i3 - 24], %f20 90460662d10Schristos ldd [%i3 - 32], %f22 90560662d10Schristos .word 0x84ce0182 !camellia_f %f24,%f2,%f0,%f2 90660662d10Schristos .word 0x8cce0986 !camellia_f %f24,%f6,%f4,%f6 90760662d10Schristos .word 0x80ce8580 !camellia_f %f26,%f0,%f2,%f0 90860662d10Schristos .word 0x88ce8d84 !camellia_f %f26,%f4,%f6,%f4 90960662d10Schristos ldd [%i3 - 40], %f24 91060662d10Schristos ldd [%i3 - 48], %f26 91160662d10Schristos .word 0x81b72780 !camellia_fl %f28,%f0,%f0 91260662d10Schristos .word 0x89b72784 !camellia_fl %f28,%f4,%f4 91360662d10Schristos .word 0x85b7a7a2 !camellia_fli %f30,%f2,%f2 91460662d10Schristos .word 0x8db7a7a6 !camellia_fli %f30,%f6,%f6 91560662d10Schristos ldd [%i3 - 56], %f28 91660662d10Schristos ldd [%i3 - 64], %f30 91760662d10Schristos .word 0x84c84182 !camellia_f %f32,%f2,%f0,%f2 91860662d10Schristos .word 0x8cc84986 !camellia_f %f32,%f6,%f4,%f6 91960662d10Schristos .word 0x80c8c580 !camellia_f %f34,%f0,%f2,%f0 92060662d10Schristos .word 0x88c8cd84 !camellia_f %f34,%f4,%f6,%f4 92160662d10Schristos .word 0x84c94182 !camellia_f %f36,%f2,%f0,%f2 92260662d10Schristos .word 0x8cc94986 !camellia_f %f36,%f6,%f4,%f6 92360662d10Schristos .word 0x80c9c580 !camellia_f %f38,%f0,%f2,%f0 92460662d10Schristos .word 0x88c9cd84 !camellia_f %f38,%f4,%f6,%f4 92560662d10Schristos .word 0x84ca4182 !camellia_f %f40,%f2,%f0,%f2 92660662d10Schristos .word 0x8cca4986 !camellia_f %f40,%f6,%f4,%f6 92760662d10Schristos .word 0x80cac580 !camellia_f %f42,%f0,%f2,%f0 92860662d10Schristos .word 0x88cacd84 !camellia_f %f42,%f4,%f6,%f4 92960662d10Schristos .word 0x81b36780 !camellia_fl %f44,%f0,%f0 93060662d10Schristos .word 0x89b36784 !camellia_fl %f44,%f4,%f4 93160662d10Schristos .word 0x85b3e7a2 !camellia_fli %f46,%f2,%f2 93260662d10Schristos .word 0x8db3e7a6 !camellia_fli %f46,%f6,%f6 93360662d10Schristos .word 0x84cc4182 !camellia_f %f48,%f2,%f0,%f2 93460662d10Schristos .word 0x8ccc4986 !camellia_f %f48,%f6,%f4,%f6 93560662d10Schristos .word 0x80ccc580 !camellia_f %f50,%f0,%f2,%f0 93660662d10Schristos .word 0x88cccd84 !camellia_f %f50,%f4,%f6,%f4 93760662d10Schristos .word 0x84cd4182 !camellia_f %f52,%f2,%f0,%f2 93860662d10Schristos .word 0x8ccd4986 !camellia_f %f52,%f6,%f4,%f6 93960662d10Schristos .word 0x80cdc580 !camellia_f %f54,%f0,%f2,%f0 94060662d10Schristos .word 0x88cdcd84 !camellia_f %f54,%f4,%f6,%f4 94160662d10Schristos .word 0x84ce4182 !camellia_f %f56,%f2,%f0,%f2 94260662d10Schristos .word 0x8cce4986 !camellia_f %f56,%f6,%f4,%f6 94360662d10Schristos .word 0x80cec580 !camellia_f %f58,%f0,%f2,%f0 94460662d10Schristos .word 0x88cecd84 !camellia_f %f58,%f4,%f6,%f4 94560662d10Schristos .word 0x81b76780 !camellia_fl %f60,%f0,%f0 94660662d10Schristos .word 0x89b76784 !camellia_fl %f60,%f4,%f4 94760662d10Schristos .word 0x85b7e7a2 !camellia_fli %f62,%f2,%f2 94860662d10Schristos .word 0x8db7e7a6 !camellia_fli %f62,%f6,%f6 94960662d10Schristos .word 0x84cc0182 !camellia_f %f16,%f2,%f0,%f2 95060662d10Schristos .word 0x8ccc0986 !camellia_f %f16,%f6,%f4,%f6 95160662d10Schristos .word 0x80cc8580 !camellia_f %f18,%f0,%f2,%f0 95260662d10Schristos .word 0x88cc8d84 !camellia_f %f18,%f4,%f6,%f4 95360662d10Schristos ldd [%i3 + 184], %f16 95460662d10Schristos ldd [%i3 + 176], %f18 95560662d10Schristos .word 0x84cd0182 !camellia_f %f20,%f2,%f0,%f2 95660662d10Schristos .word 0x8ccd0986 !camellia_f %f20,%f6,%f4,%f6 95760662d10Schristos .word 0x80cd8580 !camellia_f %f22,%f0,%f2,%f0 95860662d10Schristos .word 0x88cd8d84 !camellia_f %f22,%f4,%f6,%f4 95960662d10Schristos ldd [%i3 + 168], %f20 96060662d10Schristos ldd [%i3 + 160], %f22 96160662d10Schristos .word 0x90ce0182 !camellia_f %f24,%f2,%f0,%f8 96260662d10Schristos .word 0x94ce0986 !camellia_f %f24,%f6,%f4,%f10 96360662d10Schristos .word 0x84ce9180 !camellia_f %f26,%f0,%f8,%f2 96460662d10Schristos .word 0x8cce9584 !camellia_f %f26,%f4,%f10,%f6 96560662d10Schristos ldd [%i3 + 152], %f24 96660662d10Schristos ldd [%i3 + 144], %f26 96760662d10Schristos .word 0x81b78d88 !fxor %f30,%f8,%f0 96860662d10Schristos .word 0x89b78d8a !fxor %f30,%f10,%f4 96960662d10Schristos .word 0x85b70d82 !fxor %f28,%f2,%f2 97060662d10Schristos .word 0x8db70d86 !fxor %f28,%f6,%f6 97160662d10Schristos ldd [%i3 + 136], %f28 97260662d10Schristos retl 97360662d10Schristos ldd [%i3 + 128], %f30 97460662d10Schristos.type _cmll256_decrypt_2x,#function 97560662d10Schristos.size _cmll256_decrypt_2x,.-_cmll256_decrypt_2x 97660662d10Schristos.globl cmll128_t4_cbc_encrypt 97760662d10Schristos.align 32 97860662d10Schristoscmll128_t4_cbc_encrypt: 979*1dcdf01fSchristos save %sp, -STACK_FRAME, %sp 98060662d10Schristos cmp %i2, 0 981*1dcdf01fSchristos be,pn SIZE_T_CC, .L128_cbc_enc_abort 98260662d10Schristos srln %i2, 0, %i2 ! needed on v8+, "nop" on v9 98360662d10Schristos sub %i0, %i1, %l5 ! %i0!=%i1 98460662d10Schristos ld [%i4 + 0], %f0 98560662d10Schristos ld [%i4 + 4], %f1 98660662d10Schristos ld [%i4 + 8], %f2 98760662d10Schristos ld [%i4 + 12], %f3 98860662d10Schristos prefetch [%i0], 20 98960662d10Schristos prefetch [%i0 + 63], 20 99060662d10Schristos call _cmll128_load_enckey 99160662d10Schristos and %i0, 7, %l0 99260662d10Schristos andn %i0, 7, %i0 99360662d10Schristos sll %l0, 3, %l0 99460662d10Schristos mov 64, %l1 99560662d10Schristos mov 0xff, %l3 99660662d10Schristos sub %l1, %l0, %l1 99760662d10Schristos and %i1, 7, %l2 99860662d10Schristos cmp %i2, 127 99960662d10Schristos movrnz %l2, 0, %l5 ! if ( %i1&7 || 1000*1dcdf01fSchristos movleu SIZE_T_CC, 0, %l5 ! %i2<128 || 100160662d10Schristos brnz,pn %l5, .L128cbc_enc_blk ! %i0==%i1) 100260662d10Schristos srl %l3, %l2, %l3 100360662d10Schristos 100460662d10Schristos .word 0xb3b64340 !alignaddrl %i1,%g0,%i1 100560662d10Schristos srlx %i2, 4, %i2 100660662d10Schristos prefetch [%i1], 22 100760662d10Schristos 100860662d10Schristos.L128_cbc_enc_loop: 100960662d10Schristos ldx [%i0 + 0], %o0 101060662d10Schristos brz,pt %l0, 4f 101160662d10Schristos ldx [%i0 + 8], %o1 101260662d10Schristos 101360662d10Schristos ldx [%i0 + 16], %o2 101460662d10Schristos sllx %o0, %l0, %o0 101560662d10Schristos srlx %o1, %l1, %g1 101660662d10Schristos sllx %o1, %l0, %o1 101760662d10Schristos or %g1, %o0, %o0 101860662d10Schristos srlx %o2, %l1, %o2 101960662d10Schristos or %o2, %o1, %o1 102060662d10Schristos4: 102160662d10Schristos xor %g4, %o0, %o0 ! ^= rk[0] 102260662d10Schristos xor %g5, %o1, %o1 102360662d10Schristos .word 0x99b02308 !movxtod %o0,%f12 102460662d10Schristos .word 0x9db02309 !movxtod %o1,%f14 102560662d10Schristos 102660662d10Schristos .word 0x81b30d80 !fxor %f12,%f0,%f0 ! ^= ivec 102760662d10Schristos .word 0x85b38d82 !fxor %f14,%f2,%f2 102860662d10Schristos prefetch [%i1 + 63], 22 102960662d10Schristos prefetch [%i0 + 16+63], 20 103060662d10Schristos call _cmll128_encrypt_1x 103160662d10Schristos add %i0, 16, %i0 103260662d10Schristos 103360662d10Schristos brnz,pn %l2, 2f 103460662d10Schristos sub %i2, 1, %i2 103560662d10Schristos 103660662d10Schristos std %f0, [%i1 + 0] 103760662d10Schristos std %f2, [%i1 + 8] 103860662d10Schristos brnz,pt %i2, .L128_cbc_enc_loop 103960662d10Schristos add %i1, 16, %i1 104060662d10Schristos st %f0, [%i4 + 0] 104160662d10Schristos st %f1, [%i4 + 4] 104260662d10Schristos st %f2, [%i4 + 8] 104360662d10Schristos st %f3, [%i4 + 12] 104460662d10Schristos.L128_cbc_enc_abort: 104560662d10Schristos ret 104660662d10Schristos restore 104760662d10Schristos 104860662d10Schristos.align 16 104960662d10Schristos2: ldxa [%i0]0x82, %o0 ! avoid read-after-write hazard 105060662d10Schristos ! and ~3x deterioration 105160662d10Schristos ! in inp==out case 105260662d10Schristos .word 0x89b00900 !faligndata %f0,%f0,%f4 ! handle unaligned output 105360662d10Schristos .word 0x8db00902 !faligndata %f0,%f2,%f6 105460662d10Schristos .word 0x91b08902 !faligndata %f2,%f2,%f8 105560662d10Schristos 105660662d10Schristos stda %f4, [%i1 + %l3]0xc0 ! partial store 105760662d10Schristos std %f6, [%i1 + 8] 105860662d10Schristos add %i1, 16, %i1 105960662d10Schristos orn %g0, %l3, %l3 106060662d10Schristos stda %f8, [%i1 + %l3]0xc0 ! partial store 106160662d10Schristos 106260662d10Schristos brnz,pt %i2, .L128_cbc_enc_loop+4 106360662d10Schristos orn %g0, %l3, %l3 106460662d10Schristos st %f0, [%i4 + 0] 106560662d10Schristos st %f1, [%i4 + 4] 106660662d10Schristos st %f2, [%i4 + 8] 106760662d10Schristos st %f3, [%i4 + 12] 106860662d10Schristos ret 106960662d10Schristos restore 107060662d10Schristos 107160662d10Schristos!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 107260662d10Schristos.align 32 107360662d10Schristos.L128cbc_enc_blk: 107460662d10Schristos add %i1, %i2, %l5 107560662d10Schristos and %l5, 63, %l5 ! tail 107660662d10Schristos sub %i2, %l5, %i2 107760662d10Schristos add %l5, 15, %l5 ! round up to 16n 107860662d10Schristos srlx %i2, 4, %i2 107960662d10Schristos srl %l5, 4, %l5 108060662d10Schristos 108160662d10Schristos.L128_cbc_enc_blk_loop: 108260662d10Schristos ldx [%i0 + 0], %o0 108360662d10Schristos brz,pt %l0, 5f 108460662d10Schristos ldx [%i0 + 8], %o1 108560662d10Schristos 108660662d10Schristos ldx [%i0 + 16], %o2 108760662d10Schristos sllx %o0, %l0, %o0 108860662d10Schristos srlx %o1, %l1, %g1 108960662d10Schristos sllx %o1, %l0, %o1 109060662d10Schristos or %g1, %o0, %o0 109160662d10Schristos srlx %o2, %l1, %o2 109260662d10Schristos or %o2, %o1, %o1 109360662d10Schristos5: 109460662d10Schristos xor %g4, %o0, %o0 ! ^= rk[0] 109560662d10Schristos xor %g5, %o1, %o1 109660662d10Schristos .word 0x99b02308 !movxtod %o0,%f12 109760662d10Schristos .word 0x9db02309 !movxtod %o1,%f14 109860662d10Schristos 109960662d10Schristos .word 0x81b30d80 !fxor %f12,%f0,%f0 ! ^= ivec 110060662d10Schristos .word 0x85b38d82 !fxor %f14,%f2,%f2 110160662d10Schristos prefetch [%i0 + 16+63], 20 110260662d10Schristos call _cmll128_encrypt_1x 110360662d10Schristos add %i0, 16, %i0 110460662d10Schristos sub %i2, 1, %i2 110560662d10Schristos 110660662d10Schristos stda %f0, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 110760662d10Schristos add %i1, 8, %i1 110860662d10Schristos stda %f2, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 110960662d10Schristos brnz,pt %i2, .L128_cbc_enc_blk_loop 111060662d10Schristos add %i1, 8, %i1 111160662d10Schristos 111260662d10Schristos membar #StoreLoad|#StoreStore 111360662d10Schristos brnz,pt %l5, .L128_cbc_enc_loop 111460662d10Schristos mov %l5, %i2 111560662d10Schristos st %f0, [%i4 + 0] 111660662d10Schristos st %f1, [%i4 + 4] 111760662d10Schristos st %f2, [%i4 + 8] 111860662d10Schristos st %f3, [%i4 + 12] 111960662d10Schristos ret 112060662d10Schristos restore 112160662d10Schristos.type cmll128_t4_cbc_encrypt,#function 112260662d10Schristos.size cmll128_t4_cbc_encrypt,.-cmll128_t4_cbc_encrypt 112360662d10Schristos.globl cmll256_t4_cbc_encrypt 112460662d10Schristos.align 32 112560662d10Schristoscmll256_t4_cbc_encrypt: 1126*1dcdf01fSchristos save %sp, -STACK_FRAME, %sp 112760662d10Schristos cmp %i2, 0 1128*1dcdf01fSchristos be,pn SIZE_T_CC, .L256_cbc_enc_abort 112960662d10Schristos srln %i2, 0, %i2 ! needed on v8+, "nop" on v9 113060662d10Schristos sub %i0, %i1, %l5 ! %i0!=%i1 113160662d10Schristos ld [%i4 + 0], %f0 113260662d10Schristos ld [%i4 + 4], %f1 113360662d10Schristos ld [%i4 + 8], %f2 113460662d10Schristos ld [%i4 + 12], %f3 113560662d10Schristos prefetch [%i0], 20 113660662d10Schristos prefetch [%i0 + 63], 20 113760662d10Schristos call _cmll256_load_enckey 113860662d10Schristos and %i0, 7, %l0 113960662d10Schristos andn %i0, 7, %i0 114060662d10Schristos sll %l0, 3, %l0 114160662d10Schristos mov 64, %l1 114260662d10Schristos mov 0xff, %l3 114360662d10Schristos sub %l1, %l0, %l1 114460662d10Schristos and %i1, 7, %l2 114560662d10Schristos cmp %i2, 127 114660662d10Schristos movrnz %l2, 0, %l5 ! if ( %i1&7 || 1147*1dcdf01fSchristos movleu SIZE_T_CC, 0, %l5 ! %i2<128 || 114860662d10Schristos brnz,pn %l5, .L256cbc_enc_blk ! %i0==%i1) 114960662d10Schristos srl %l3, %l2, %l3 115060662d10Schristos 115160662d10Schristos .word 0xb3b64340 !alignaddrl %i1,%g0,%i1 115260662d10Schristos srlx %i2, 4, %i2 115360662d10Schristos prefetch [%i1], 22 115460662d10Schristos 115560662d10Schristos.L256_cbc_enc_loop: 115660662d10Schristos ldx [%i0 + 0], %o0 115760662d10Schristos brz,pt %l0, 4f 115860662d10Schristos ldx [%i0 + 8], %o1 115960662d10Schristos 116060662d10Schristos ldx [%i0 + 16], %o2 116160662d10Schristos sllx %o0, %l0, %o0 116260662d10Schristos srlx %o1, %l1, %g1 116360662d10Schristos sllx %o1, %l0, %o1 116460662d10Schristos or %g1, %o0, %o0 116560662d10Schristos srlx %o2, %l1, %o2 116660662d10Schristos or %o2, %o1, %o1 116760662d10Schristos4: 116860662d10Schristos xor %g4, %o0, %o0 ! ^= rk[0] 116960662d10Schristos xor %g5, %o1, %o1 117060662d10Schristos .word 0x99b02308 !movxtod %o0,%f12 117160662d10Schristos .word 0x9db02309 !movxtod %o1,%f14 117260662d10Schristos 117360662d10Schristos .word 0x81b30d80 !fxor %f12,%f0,%f0 ! ^= ivec 117460662d10Schristos .word 0x85b38d82 !fxor %f14,%f2,%f2 117560662d10Schristos prefetch [%i1 + 63], 22 117660662d10Schristos prefetch [%i0 + 16+63], 20 117760662d10Schristos call _cmll256_encrypt_1x 117860662d10Schristos add %i0, 16, %i0 117960662d10Schristos 118060662d10Schristos brnz,pn %l2, 2f 118160662d10Schristos sub %i2, 1, %i2 118260662d10Schristos 118360662d10Schristos std %f0, [%i1 + 0] 118460662d10Schristos std %f2, [%i1 + 8] 118560662d10Schristos brnz,pt %i2, .L256_cbc_enc_loop 118660662d10Schristos add %i1, 16, %i1 118760662d10Schristos st %f0, [%i4 + 0] 118860662d10Schristos st %f1, [%i4 + 4] 118960662d10Schristos st %f2, [%i4 + 8] 119060662d10Schristos st %f3, [%i4 + 12] 119160662d10Schristos.L256_cbc_enc_abort: 119260662d10Schristos ret 119360662d10Schristos restore 119460662d10Schristos 119560662d10Schristos.align 16 119660662d10Schristos2: ldxa [%i0]0x82, %o0 ! avoid read-after-write hazard 119760662d10Schristos ! and ~3x deterioration 119860662d10Schristos ! in inp==out case 119960662d10Schristos .word 0x89b00900 !faligndata %f0,%f0,%f4 ! handle unaligned output 120060662d10Schristos .word 0x8db00902 !faligndata %f0,%f2,%f6 120160662d10Schristos .word 0x91b08902 !faligndata %f2,%f2,%f8 120260662d10Schristos 120360662d10Schristos stda %f4, [%i1 + %l3]0xc0 ! partial store 120460662d10Schristos std %f6, [%i1 + 8] 120560662d10Schristos add %i1, 16, %i1 120660662d10Schristos orn %g0, %l3, %l3 120760662d10Schristos stda %f8, [%i1 + %l3]0xc0 ! partial store 120860662d10Schristos 120960662d10Schristos brnz,pt %i2, .L256_cbc_enc_loop+4 121060662d10Schristos orn %g0, %l3, %l3 121160662d10Schristos st %f0, [%i4 + 0] 121260662d10Schristos st %f1, [%i4 + 4] 121360662d10Schristos st %f2, [%i4 + 8] 121460662d10Schristos st %f3, [%i4 + 12] 121560662d10Schristos ret 121660662d10Schristos restore 121760662d10Schristos 121860662d10Schristos!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 121960662d10Schristos.align 32 122060662d10Schristos.L256cbc_enc_blk: 122160662d10Schristos add %i1, %i2, %l5 122260662d10Schristos and %l5, 63, %l5 ! tail 122360662d10Schristos sub %i2, %l5, %i2 122460662d10Schristos add %l5, 15, %l5 ! round up to 16n 122560662d10Schristos srlx %i2, 4, %i2 122660662d10Schristos srl %l5, 4, %l5 122760662d10Schristos 122860662d10Schristos.L256_cbc_enc_blk_loop: 122960662d10Schristos ldx [%i0 + 0], %o0 123060662d10Schristos brz,pt %l0, 5f 123160662d10Schristos ldx [%i0 + 8], %o1 123260662d10Schristos 123360662d10Schristos ldx [%i0 + 16], %o2 123460662d10Schristos sllx %o0, %l0, %o0 123560662d10Schristos srlx %o1, %l1, %g1 123660662d10Schristos sllx %o1, %l0, %o1 123760662d10Schristos or %g1, %o0, %o0 123860662d10Schristos srlx %o2, %l1, %o2 123960662d10Schristos or %o2, %o1, %o1 124060662d10Schristos5: 124160662d10Schristos xor %g4, %o0, %o0 ! ^= rk[0] 124260662d10Schristos xor %g5, %o1, %o1 124360662d10Schristos .word 0x99b02308 !movxtod %o0,%f12 124460662d10Schristos .word 0x9db02309 !movxtod %o1,%f14 124560662d10Schristos 124660662d10Schristos .word 0x81b30d80 !fxor %f12,%f0,%f0 ! ^= ivec 124760662d10Schristos .word 0x85b38d82 !fxor %f14,%f2,%f2 124860662d10Schristos prefetch [%i0 + 16+63], 20 124960662d10Schristos call _cmll256_encrypt_1x 125060662d10Schristos add %i0, 16, %i0 125160662d10Schristos sub %i2, 1, %i2 125260662d10Schristos 125360662d10Schristos stda %f0, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 125460662d10Schristos add %i1, 8, %i1 125560662d10Schristos stda %f2, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 125660662d10Schristos brnz,pt %i2, .L256_cbc_enc_blk_loop 125760662d10Schristos add %i1, 8, %i1 125860662d10Schristos 125960662d10Schristos membar #StoreLoad|#StoreStore 126060662d10Schristos brnz,pt %l5, .L256_cbc_enc_loop 126160662d10Schristos mov %l5, %i2 126260662d10Schristos st %f0, [%i4 + 0] 126360662d10Schristos st %f1, [%i4 + 4] 126460662d10Schristos st %f2, [%i4 + 8] 126560662d10Schristos st %f3, [%i4 + 12] 126660662d10Schristos ret 126760662d10Schristos restore 126860662d10Schristos.type cmll256_t4_cbc_encrypt,#function 126960662d10Schristos.size cmll256_t4_cbc_encrypt,.-cmll256_t4_cbc_encrypt 127060662d10Schristos.globl cmll128_t4_cbc_decrypt 127160662d10Schristos.align 32 127260662d10Schristoscmll128_t4_cbc_decrypt: 1273*1dcdf01fSchristos save %sp, -STACK_FRAME, %sp 127460662d10Schristos cmp %i2, 0 1275*1dcdf01fSchristos be,pn SIZE_T_CC, .L128_cbc_dec_abort 127660662d10Schristos srln %i2, 0, %i2 ! needed on v8+, "nop" on v9 127760662d10Schristos sub %i0, %i1, %l5 ! %i0!=%i1 127860662d10Schristos ld [%i4 + 0], %f12 ! load ivec 127960662d10Schristos ld [%i4 + 4], %f13 128060662d10Schristos ld [%i4 + 8], %f14 128160662d10Schristos ld [%i4 + 12], %f15 128260662d10Schristos prefetch [%i0], 20 128360662d10Schristos prefetch [%i0 + 63], 20 128460662d10Schristos call _cmll128_load_deckey 128560662d10Schristos and %i0, 7, %l0 128660662d10Schristos andn %i0, 7, %i0 128760662d10Schristos sll %l0, 3, %l0 128860662d10Schristos mov 64, %l1 128960662d10Schristos mov 0xff, %l3 129060662d10Schristos sub %l1, %l0, %l1 129160662d10Schristos and %i1, 7, %l2 129260662d10Schristos cmp %i2, 255 129360662d10Schristos movrnz %l2, 0, %l5 ! if ( %i1&7 || 1294*1dcdf01fSchristos movleu SIZE_T_CC, 0, %l5 ! %i2<256 || 129560662d10Schristos brnz,pn %l5, .L128cbc_dec_blk ! %i0==%i1) 129660662d10Schristos srl %l3, %l2, %l3 129760662d10Schristos 129860662d10Schristos andcc %i2, 16, %g0 ! is number of blocks even? 129960662d10Schristos srlx %i2, 4, %i2 130060662d10Schristos .word 0xb3b64340 !alignaddrl %i1,%g0,%i1 130160662d10Schristos bz %icc, .L128_cbc_dec_loop2x 130260662d10Schristos prefetch [%i1], 22 130360662d10Schristos.L128_cbc_dec_loop: 130460662d10Schristos ldx [%i0 + 0], %o0 130560662d10Schristos brz,pt %l0, 4f 130660662d10Schristos ldx [%i0 + 8], %o1 130760662d10Schristos 130860662d10Schristos ldx [%i0 + 16], %o2 130960662d10Schristos sllx %o0, %l0, %o0 131060662d10Schristos srlx %o1, %l1, %g1 131160662d10Schristos sllx %o1, %l0, %o1 131260662d10Schristos or %g1, %o0, %o0 131360662d10Schristos srlx %o2, %l1, %o2 131460662d10Schristos or %o2, %o1, %o1 131560662d10Schristos4: 131660662d10Schristos xor %g4, %o0, %o2 ! ^= rk[0] 131760662d10Schristos xor %g5, %o1, %o3 131860662d10Schristos .word 0x81b0230a !movxtod %o2,%f0 131960662d10Schristos .word 0x85b0230b !movxtod %o3,%f2 132060662d10Schristos 132160662d10Schristos prefetch [%i1 + 63], 22 132260662d10Schristos prefetch [%i0 + 16+63], 20 132360662d10Schristos call _cmll128_decrypt_1x 132460662d10Schristos add %i0, 16, %i0 132560662d10Schristos 132660662d10Schristos .word 0x81b30d80 !fxor %f12,%f0,%f0 ! ^= ivec 132760662d10Schristos .word 0x85b38d82 !fxor %f14,%f2,%f2 132860662d10Schristos .word 0x99b02308 !movxtod %o0,%f12 132960662d10Schristos .word 0x9db02309 !movxtod %o1,%f14 133060662d10Schristos 133160662d10Schristos brnz,pn %l2, 2f 133260662d10Schristos sub %i2, 1, %i2 133360662d10Schristos 133460662d10Schristos std %f0, [%i1 + 0] 133560662d10Schristos std %f2, [%i1 + 8] 133660662d10Schristos brnz,pt %i2, .L128_cbc_dec_loop2x 133760662d10Schristos add %i1, 16, %i1 133860662d10Schristos st %f12, [%i4 + 0] 133960662d10Schristos st %f13, [%i4 + 4] 134060662d10Schristos st %f14, [%i4 + 8] 134160662d10Schristos st %f15, [%i4 + 12] 134260662d10Schristos.L128_cbc_dec_abort: 134360662d10Schristos ret 134460662d10Schristos restore 134560662d10Schristos 134660662d10Schristos.align 16 134760662d10Schristos2: ldxa [%i0]0x82, %o0 ! avoid read-after-write hazard 134860662d10Schristos ! and ~3x deterioration 134960662d10Schristos ! in inp==out case 135060662d10Schristos .word 0x89b00900 !faligndata %f0,%f0,%f4 ! handle unaligned output 135160662d10Schristos .word 0x8db00902 !faligndata %f0,%f2,%f6 135260662d10Schristos .word 0x91b08902 !faligndata %f2,%f2,%f8 135360662d10Schristos 135460662d10Schristos stda %f4, [%i1 + %l3]0xc0 ! partial store 135560662d10Schristos std %f6, [%i1 + 8] 135660662d10Schristos add %i1, 16, %i1 135760662d10Schristos orn %g0, %l3, %l3 135860662d10Schristos stda %f8, [%i1 + %l3]0xc0 ! partial store 135960662d10Schristos 136060662d10Schristos brnz,pt %i2, .L128_cbc_dec_loop2x+4 136160662d10Schristos orn %g0, %l3, %l3 136260662d10Schristos st %f12, [%i4 + 0] 136360662d10Schristos st %f13, [%i4 + 4] 136460662d10Schristos st %f14, [%i4 + 8] 136560662d10Schristos st %f15, [%i4 + 12] 136660662d10Schristos ret 136760662d10Schristos restore 136860662d10Schristos 136960662d10Schristos!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 137060662d10Schristos.align 32 137160662d10Schristos.L128_cbc_dec_loop2x: 137260662d10Schristos ldx [%i0 + 0], %o0 137360662d10Schristos ldx [%i0 + 8], %o1 137460662d10Schristos ldx [%i0 + 16], %o2 137560662d10Schristos brz,pt %l0, 4f 137660662d10Schristos ldx [%i0 + 24], %o3 137760662d10Schristos 137860662d10Schristos ldx [%i0 + 32], %o4 137960662d10Schristos sllx %o0, %l0, %o0 138060662d10Schristos srlx %o1, %l1, %g1 138160662d10Schristos or %g1, %o0, %o0 138260662d10Schristos sllx %o1, %l0, %o1 138360662d10Schristos srlx %o2, %l1, %g1 138460662d10Schristos or %g1, %o1, %o1 138560662d10Schristos sllx %o2, %l0, %o2 138660662d10Schristos srlx %o3, %l1, %g1 138760662d10Schristos or %g1, %o2, %o2 138860662d10Schristos sllx %o3, %l0, %o3 138960662d10Schristos srlx %o4, %l1, %o4 139060662d10Schristos or %o4, %o3, %o3 139160662d10Schristos4: 139260662d10Schristos xor %g4, %o0, %o4 ! ^= rk[0] 139360662d10Schristos xor %g5, %o1, %o5 139460662d10Schristos .word 0x81b0230c !movxtod %o4,%f0 139560662d10Schristos .word 0x85b0230d !movxtod %o5,%f2 139660662d10Schristos xor %g4, %o2, %o4 139760662d10Schristos xor %g5, %o3, %o5 139860662d10Schristos .word 0x89b0230c !movxtod %o4,%f4 139960662d10Schristos .word 0x8db0230d !movxtod %o5,%f6 140060662d10Schristos 140160662d10Schristos prefetch [%i1 + 63], 22 140260662d10Schristos prefetch [%i0 + 32+63], 20 140360662d10Schristos call _cmll128_decrypt_2x 140460662d10Schristos add %i0, 32, %i0 140560662d10Schristos 140660662d10Schristos .word 0x91b02308 !movxtod %o0,%f8 140760662d10Schristos .word 0x95b02309 !movxtod %o1,%f10 140860662d10Schristos .word 0x81b30d80 !fxor %f12,%f0,%f0 ! ^= ivec 140960662d10Schristos .word 0x85b38d82 !fxor %f14,%f2,%f2 141060662d10Schristos .word 0x99b0230a !movxtod %o2,%f12 141160662d10Schristos .word 0x9db0230b !movxtod %o3,%f14 141260662d10Schristos .word 0x89b20d84 !fxor %f8,%f4,%f4 141360662d10Schristos .word 0x8db28d86 !fxor %f10,%f6,%f6 141460662d10Schristos 141560662d10Schristos brnz,pn %l2, 2f 141660662d10Schristos sub %i2, 2, %i2 141760662d10Schristos 141860662d10Schristos std %f0, [%i1 + 0] 141960662d10Schristos std %f2, [%i1 + 8] 142060662d10Schristos std %f4, [%i1 + 16] 142160662d10Schristos std %f6, [%i1 + 24] 142260662d10Schristos brnz,pt %i2, .L128_cbc_dec_loop2x 142360662d10Schristos add %i1, 32, %i1 142460662d10Schristos st %f12, [%i4 + 0] 142560662d10Schristos st %f13, [%i4 + 4] 142660662d10Schristos st %f14, [%i4 + 8] 142760662d10Schristos st %f15, [%i4 + 12] 142860662d10Schristos ret 142960662d10Schristos restore 143060662d10Schristos 143160662d10Schristos.align 16 143260662d10Schristos2: ldxa [%i0]0x82, %o0 ! avoid read-after-write hazard 143360662d10Schristos ! and ~3x deterioration 143460662d10Schristos ! in inp==out case 143560662d10Schristos .word 0x91b00900 !faligndata %f0,%f0,%f8 ! handle unaligned output 143660662d10Schristos .word 0x81b00902 !faligndata %f0,%f2,%f0 143760662d10Schristos .word 0x85b08904 !faligndata %f2,%f4,%f2 143860662d10Schristos .word 0x89b10906 !faligndata %f4,%f6,%f4 143960662d10Schristos .word 0x8db18906 !faligndata %f6,%f6,%f6 144060662d10Schristos stda %f8, [%i1 + %l3]0xc0 ! partial store 144160662d10Schristos std %f0, [%i1 + 8] 144260662d10Schristos std %f2, [%i1 + 16] 144360662d10Schristos std %f4, [%i1 + 24] 144460662d10Schristos add %i1, 32, %i1 144560662d10Schristos orn %g0, %l3, %l3 144660662d10Schristos stda %f6, [%i1 + %l3]0xc0 ! partial store 144760662d10Schristos 144860662d10Schristos brnz,pt %i2, .L128_cbc_dec_loop2x+4 144960662d10Schristos orn %g0, %l3, %l3 145060662d10Schristos st %f12, [%i4 + 0] 145160662d10Schristos st %f13, [%i4 + 4] 145260662d10Schristos st %f14, [%i4 + 8] 145360662d10Schristos st %f15, [%i4 + 12] 145460662d10Schristos ret 145560662d10Schristos restore 145660662d10Schristos 145760662d10Schristos!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 145860662d10Schristos.align 32 145960662d10Schristos.L128cbc_dec_blk: 146060662d10Schristos add %i1, %i2, %l5 146160662d10Schristos and %l5, 63, %l5 ! tail 146260662d10Schristos sub %i2, %l5, %i2 146360662d10Schristos add %l5, 15, %l5 ! round up to 16n 146460662d10Schristos srlx %i2, 4, %i2 146560662d10Schristos srl %l5, 4, %l5 146660662d10Schristos sub %i2, 1, %i2 146760662d10Schristos add %l5, 1, %l5 146860662d10Schristos 146960662d10Schristos.L128_cbc_dec_blk_loop2x: 147060662d10Schristos ldx [%i0 + 0], %o0 147160662d10Schristos ldx [%i0 + 8], %o1 147260662d10Schristos ldx [%i0 + 16], %o2 147360662d10Schristos brz,pt %l0, 5f 147460662d10Schristos ldx [%i0 + 24], %o3 147560662d10Schristos 147660662d10Schristos ldx [%i0 + 32], %o4 147760662d10Schristos sllx %o0, %l0, %o0 147860662d10Schristos srlx %o1, %l1, %g1 147960662d10Schristos or %g1, %o0, %o0 148060662d10Schristos sllx %o1, %l0, %o1 148160662d10Schristos srlx %o2, %l1, %g1 148260662d10Schristos or %g1, %o1, %o1 148360662d10Schristos sllx %o2, %l0, %o2 148460662d10Schristos srlx %o3, %l1, %g1 148560662d10Schristos or %g1, %o2, %o2 148660662d10Schristos sllx %o3, %l0, %o3 148760662d10Schristos srlx %o4, %l1, %o4 148860662d10Schristos or %o4, %o3, %o3 148960662d10Schristos5: 149060662d10Schristos xor %g4, %o0, %o4 ! ^= rk[0] 149160662d10Schristos xor %g5, %o1, %o5 149260662d10Schristos .word 0x81b0230c !movxtod %o4,%f0 149360662d10Schristos .word 0x85b0230d !movxtod %o5,%f2 149460662d10Schristos xor %g4, %o2, %o4 149560662d10Schristos xor %g5, %o3, %o5 149660662d10Schristos .word 0x89b0230c !movxtod %o4,%f4 149760662d10Schristos .word 0x8db0230d !movxtod %o5,%f6 149860662d10Schristos 149960662d10Schristos prefetch [%i0 + 32+63], 20 150060662d10Schristos call _cmll128_decrypt_2x 150160662d10Schristos add %i0, 32, %i0 150260662d10Schristos subcc %i2, 2, %i2 150360662d10Schristos 150460662d10Schristos .word 0x91b02308 !movxtod %o0,%f8 150560662d10Schristos .word 0x95b02309 !movxtod %o1,%f10 150660662d10Schristos .word 0x81b30d80 !fxor %f12,%f0,%f0 ! ^= ivec 150760662d10Schristos .word 0x85b38d82 !fxor %f14,%f2,%f2 150860662d10Schristos .word 0x99b0230a !movxtod %o2,%f12 150960662d10Schristos .word 0x9db0230b !movxtod %o3,%f14 151060662d10Schristos .word 0x89b20d84 !fxor %f8,%f4,%f4 151160662d10Schristos .word 0x8db28d86 !fxor %f10,%f6,%f6 151260662d10Schristos 151360662d10Schristos stda %f0, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 151460662d10Schristos add %i1, 8, %i1 151560662d10Schristos stda %f2, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 151660662d10Schristos add %i1, 8, %i1 151760662d10Schristos stda %f4, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 151860662d10Schristos add %i1, 8, %i1 151960662d10Schristos stda %f6, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 1520*1dcdf01fSchristos bgu,pt SIZE_T_CC, .L128_cbc_dec_blk_loop2x 152160662d10Schristos add %i1, 8, %i1 152260662d10Schristos 152360662d10Schristos add %l5, %i2, %i2 152460662d10Schristos andcc %i2, 1, %g0 ! is number of blocks even? 152560662d10Schristos membar #StoreLoad|#StoreStore 152660662d10Schristos bnz,pt %icc, .L128_cbc_dec_loop 152760662d10Schristos srl %i2, 0, %i2 152860662d10Schristos brnz,pn %i2, .L128_cbc_dec_loop2x 152960662d10Schristos nop 153060662d10Schristos st %f12, [%i4 + 0] ! write out ivec 153160662d10Schristos st %f13, [%i4 + 4] 153260662d10Schristos st %f14, [%i4 + 8] 153360662d10Schristos st %f15, [%i4 + 12] 153460662d10Schristos ret 153560662d10Schristos restore 153660662d10Schristos.type cmll128_t4_cbc_decrypt,#function 153760662d10Schristos.size cmll128_t4_cbc_decrypt,.-cmll128_t4_cbc_decrypt 153860662d10Schristos.globl cmll256_t4_cbc_decrypt 153960662d10Schristos.align 32 154060662d10Schristoscmll256_t4_cbc_decrypt: 1541*1dcdf01fSchristos save %sp, -STACK_FRAME, %sp 154260662d10Schristos cmp %i2, 0 1543*1dcdf01fSchristos be,pn SIZE_T_CC, .L256_cbc_dec_abort 154460662d10Schristos srln %i2, 0, %i2 ! needed on v8+, "nop" on v9 154560662d10Schristos sub %i0, %i1, %l5 ! %i0!=%i1 154660662d10Schristos ld [%i4 + 0], %f12 ! load ivec 154760662d10Schristos ld [%i4 + 4], %f13 154860662d10Schristos ld [%i4 + 8], %f14 154960662d10Schristos ld [%i4 + 12], %f15 155060662d10Schristos prefetch [%i0], 20 155160662d10Schristos prefetch [%i0 + 63], 20 155260662d10Schristos call _cmll256_load_deckey 155360662d10Schristos and %i0, 7, %l0 155460662d10Schristos andn %i0, 7, %i0 155560662d10Schristos sll %l0, 3, %l0 155660662d10Schristos mov 64, %l1 155760662d10Schristos mov 0xff, %l3 155860662d10Schristos sub %l1, %l0, %l1 155960662d10Schristos and %i1, 7, %l2 156060662d10Schristos cmp %i2, 255 156160662d10Schristos movrnz %l2, 0, %l5 ! if ( %i1&7 || 1562*1dcdf01fSchristos movleu SIZE_T_CC, 0, %l5 ! %i2<256 || 156360662d10Schristos brnz,pn %l5, .L256cbc_dec_blk ! %i0==%i1) 156460662d10Schristos srl %l3, %l2, %l3 156560662d10Schristos 156660662d10Schristos andcc %i2, 16, %g0 ! is number of blocks even? 156760662d10Schristos srlx %i2, 4, %i2 156860662d10Schristos .word 0xb3b64340 !alignaddrl %i1,%g0,%i1 156960662d10Schristos bz %icc, .L256_cbc_dec_loop2x 157060662d10Schristos prefetch [%i1], 22 157160662d10Schristos.L256_cbc_dec_loop: 157260662d10Schristos ldx [%i0 + 0], %o0 157360662d10Schristos brz,pt %l0, 4f 157460662d10Schristos ldx [%i0 + 8], %o1 157560662d10Schristos 157660662d10Schristos ldx [%i0 + 16], %o2 157760662d10Schristos sllx %o0, %l0, %o0 157860662d10Schristos srlx %o1, %l1, %g1 157960662d10Schristos sllx %o1, %l0, %o1 158060662d10Schristos or %g1, %o0, %o0 158160662d10Schristos srlx %o2, %l1, %o2 158260662d10Schristos or %o2, %o1, %o1 158360662d10Schristos4: 158460662d10Schristos xor %g4, %o0, %o2 ! ^= rk[0] 158560662d10Schristos xor %g5, %o1, %o3 158660662d10Schristos .word 0x81b0230a !movxtod %o2,%f0 158760662d10Schristos .word 0x85b0230b !movxtod %o3,%f2 158860662d10Schristos 158960662d10Schristos prefetch [%i1 + 63], 22 159060662d10Schristos prefetch [%i0 + 16+63], 20 159160662d10Schristos call _cmll256_decrypt_1x 159260662d10Schristos add %i0, 16, %i0 159360662d10Schristos 159460662d10Schristos .word 0x81b30d80 !fxor %f12,%f0,%f0 ! ^= ivec 159560662d10Schristos .word 0x85b38d82 !fxor %f14,%f2,%f2 159660662d10Schristos .word 0x99b02308 !movxtod %o0,%f12 159760662d10Schristos .word 0x9db02309 !movxtod %o1,%f14 159860662d10Schristos 159960662d10Schristos brnz,pn %l2, 2f 160060662d10Schristos sub %i2, 1, %i2 160160662d10Schristos 160260662d10Schristos std %f0, [%i1 + 0] 160360662d10Schristos std %f2, [%i1 + 8] 160460662d10Schristos brnz,pt %i2, .L256_cbc_dec_loop2x 160560662d10Schristos add %i1, 16, %i1 160660662d10Schristos st %f12, [%i4 + 0] 160760662d10Schristos st %f13, [%i4 + 4] 160860662d10Schristos st %f14, [%i4 + 8] 160960662d10Schristos st %f15, [%i4 + 12] 161060662d10Schristos.L256_cbc_dec_abort: 161160662d10Schristos ret 161260662d10Schristos restore 161360662d10Schristos 161460662d10Schristos.align 16 161560662d10Schristos2: ldxa [%i0]0x82, %o0 ! avoid read-after-write hazard 161660662d10Schristos ! and ~3x deterioration 161760662d10Schristos ! in inp==out case 161860662d10Schristos .word 0x89b00900 !faligndata %f0,%f0,%f4 ! handle unaligned output 161960662d10Schristos .word 0x8db00902 !faligndata %f0,%f2,%f6 162060662d10Schristos .word 0x91b08902 !faligndata %f2,%f2,%f8 162160662d10Schristos 162260662d10Schristos stda %f4, [%i1 + %l3]0xc0 ! partial store 162360662d10Schristos std %f6, [%i1 + 8] 162460662d10Schristos add %i1, 16, %i1 162560662d10Schristos orn %g0, %l3, %l3 162660662d10Schristos stda %f8, [%i1 + %l3]0xc0 ! partial store 162760662d10Schristos 162860662d10Schristos brnz,pt %i2, .L256_cbc_dec_loop2x+4 162960662d10Schristos orn %g0, %l3, %l3 163060662d10Schristos st %f12, [%i4 + 0] 163160662d10Schristos st %f13, [%i4 + 4] 163260662d10Schristos st %f14, [%i4 + 8] 163360662d10Schristos st %f15, [%i4 + 12] 163460662d10Schristos ret 163560662d10Schristos restore 163660662d10Schristos 163760662d10Schristos!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 163860662d10Schristos.align 32 163960662d10Schristos.L256_cbc_dec_loop2x: 164060662d10Schristos ldx [%i0 + 0], %o0 164160662d10Schristos ldx [%i0 + 8], %o1 164260662d10Schristos ldx [%i0 + 16], %o2 164360662d10Schristos brz,pt %l0, 4f 164460662d10Schristos ldx [%i0 + 24], %o3 164560662d10Schristos 164660662d10Schristos ldx [%i0 + 32], %o4 164760662d10Schristos sllx %o0, %l0, %o0 164860662d10Schristos srlx %o1, %l1, %g1 164960662d10Schristos or %g1, %o0, %o0 165060662d10Schristos sllx %o1, %l0, %o1 165160662d10Schristos srlx %o2, %l1, %g1 165260662d10Schristos or %g1, %o1, %o1 165360662d10Schristos sllx %o2, %l0, %o2 165460662d10Schristos srlx %o3, %l1, %g1 165560662d10Schristos or %g1, %o2, %o2 165660662d10Schristos sllx %o3, %l0, %o3 165760662d10Schristos srlx %o4, %l1, %o4 165860662d10Schristos or %o4, %o3, %o3 165960662d10Schristos4: 166060662d10Schristos xor %g4, %o0, %o4 ! ^= rk[0] 166160662d10Schristos xor %g5, %o1, %o5 166260662d10Schristos .word 0x81b0230c !movxtod %o4,%f0 166360662d10Schristos .word 0x85b0230d !movxtod %o5,%f2 166460662d10Schristos xor %g4, %o2, %o4 166560662d10Schristos xor %g5, %o3, %o5 166660662d10Schristos .word 0x89b0230c !movxtod %o4,%f4 166760662d10Schristos .word 0x8db0230d !movxtod %o5,%f6 166860662d10Schristos 166960662d10Schristos prefetch [%i1 + 63], 22 167060662d10Schristos prefetch [%i0 + 32+63], 20 167160662d10Schristos call _cmll256_decrypt_2x 167260662d10Schristos add %i0, 32, %i0 167360662d10Schristos 167460662d10Schristos .word 0x91b02308 !movxtod %o0,%f8 167560662d10Schristos .word 0x95b02309 !movxtod %o1,%f10 167660662d10Schristos .word 0x81b30d80 !fxor %f12,%f0,%f0 ! ^= ivec 167760662d10Schristos .word 0x85b38d82 !fxor %f14,%f2,%f2 167860662d10Schristos .word 0x99b0230a !movxtod %o2,%f12 167960662d10Schristos .word 0x9db0230b !movxtod %o3,%f14 168060662d10Schristos .word 0x89b20d84 !fxor %f8,%f4,%f4 168160662d10Schristos .word 0x8db28d86 !fxor %f10,%f6,%f6 168260662d10Schristos 168360662d10Schristos brnz,pn %l2, 2f 168460662d10Schristos sub %i2, 2, %i2 168560662d10Schristos 168660662d10Schristos std %f0, [%i1 + 0] 168760662d10Schristos std %f2, [%i1 + 8] 168860662d10Schristos std %f4, [%i1 + 16] 168960662d10Schristos std %f6, [%i1 + 24] 169060662d10Schristos brnz,pt %i2, .L256_cbc_dec_loop2x 169160662d10Schristos add %i1, 32, %i1 169260662d10Schristos st %f12, [%i4 + 0] 169360662d10Schristos st %f13, [%i4 + 4] 169460662d10Schristos st %f14, [%i4 + 8] 169560662d10Schristos st %f15, [%i4 + 12] 169660662d10Schristos ret 169760662d10Schristos restore 169860662d10Schristos 169960662d10Schristos.align 16 170060662d10Schristos2: ldxa [%i0]0x82, %o0 ! avoid read-after-write hazard 170160662d10Schristos ! and ~3x deterioration 170260662d10Schristos ! in inp==out case 170360662d10Schristos .word 0x91b00900 !faligndata %f0,%f0,%f8 ! handle unaligned output 170460662d10Schristos .word 0x81b00902 !faligndata %f0,%f2,%f0 170560662d10Schristos .word 0x85b08904 !faligndata %f2,%f4,%f2 170660662d10Schristos .word 0x89b10906 !faligndata %f4,%f6,%f4 170760662d10Schristos .word 0x8db18906 !faligndata %f6,%f6,%f6 170860662d10Schristos stda %f8, [%i1 + %l3]0xc0 ! partial store 170960662d10Schristos std %f0, [%i1 + 8] 171060662d10Schristos std %f2, [%i1 + 16] 171160662d10Schristos std %f4, [%i1 + 24] 171260662d10Schristos add %i1, 32, %i1 171360662d10Schristos orn %g0, %l3, %l3 171460662d10Schristos stda %f6, [%i1 + %l3]0xc0 ! partial store 171560662d10Schristos 171660662d10Schristos brnz,pt %i2, .L256_cbc_dec_loop2x+4 171760662d10Schristos orn %g0, %l3, %l3 171860662d10Schristos st %f12, [%i4 + 0] 171960662d10Schristos st %f13, [%i4 + 4] 172060662d10Schristos st %f14, [%i4 + 8] 172160662d10Schristos st %f15, [%i4 + 12] 172260662d10Schristos ret 172360662d10Schristos restore 172460662d10Schristos 172560662d10Schristos!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 172660662d10Schristos.align 32 172760662d10Schristos.L256cbc_dec_blk: 172860662d10Schristos add %i1, %i2, %l5 172960662d10Schristos and %l5, 63, %l5 ! tail 173060662d10Schristos sub %i2, %l5, %i2 173160662d10Schristos add %l5, 15, %l5 ! round up to 16n 173260662d10Schristos srlx %i2, 4, %i2 173360662d10Schristos srl %l5, 4, %l5 173460662d10Schristos sub %i2, 1, %i2 173560662d10Schristos add %l5, 1, %l5 173660662d10Schristos 173760662d10Schristos.L256_cbc_dec_blk_loop2x: 173860662d10Schristos ldx [%i0 + 0], %o0 173960662d10Schristos ldx [%i0 + 8], %o1 174060662d10Schristos ldx [%i0 + 16], %o2 174160662d10Schristos brz,pt %l0, 5f 174260662d10Schristos ldx [%i0 + 24], %o3 174360662d10Schristos 174460662d10Schristos ldx [%i0 + 32], %o4 174560662d10Schristos sllx %o0, %l0, %o0 174660662d10Schristos srlx %o1, %l1, %g1 174760662d10Schristos or %g1, %o0, %o0 174860662d10Schristos sllx %o1, %l0, %o1 174960662d10Schristos srlx %o2, %l1, %g1 175060662d10Schristos or %g1, %o1, %o1 175160662d10Schristos sllx %o2, %l0, %o2 175260662d10Schristos srlx %o3, %l1, %g1 175360662d10Schristos or %g1, %o2, %o2 175460662d10Schristos sllx %o3, %l0, %o3 175560662d10Schristos srlx %o4, %l1, %o4 175660662d10Schristos or %o4, %o3, %o3 175760662d10Schristos5: 175860662d10Schristos xor %g4, %o0, %o4 ! ^= rk[0] 175960662d10Schristos xor %g5, %o1, %o5 176060662d10Schristos .word 0x81b0230c !movxtod %o4,%f0 176160662d10Schristos .word 0x85b0230d !movxtod %o5,%f2 176260662d10Schristos xor %g4, %o2, %o4 176360662d10Schristos xor %g5, %o3, %o5 176460662d10Schristos .word 0x89b0230c !movxtod %o4,%f4 176560662d10Schristos .word 0x8db0230d !movxtod %o5,%f6 176660662d10Schristos 176760662d10Schristos prefetch [%i0 + 32+63], 20 176860662d10Schristos call _cmll256_decrypt_2x 176960662d10Schristos add %i0, 32, %i0 177060662d10Schristos subcc %i2, 2, %i2 177160662d10Schristos 177260662d10Schristos .word 0x91b02308 !movxtod %o0,%f8 177360662d10Schristos .word 0x95b02309 !movxtod %o1,%f10 177460662d10Schristos .word 0x81b30d80 !fxor %f12,%f0,%f0 ! ^= ivec 177560662d10Schristos .word 0x85b38d82 !fxor %f14,%f2,%f2 177660662d10Schristos .word 0x99b0230a !movxtod %o2,%f12 177760662d10Schristos .word 0x9db0230b !movxtod %o3,%f14 177860662d10Schristos .word 0x89b20d84 !fxor %f8,%f4,%f4 177960662d10Schristos .word 0x8db28d86 !fxor %f10,%f6,%f6 178060662d10Schristos 178160662d10Schristos stda %f0, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 178260662d10Schristos add %i1, 8, %i1 178360662d10Schristos stda %f2, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 178460662d10Schristos add %i1, 8, %i1 178560662d10Schristos stda %f4, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 178660662d10Schristos add %i1, 8, %i1 178760662d10Schristos stda %f6, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 1788*1dcdf01fSchristos bgu,pt SIZE_T_CC, .L256_cbc_dec_blk_loop2x 178960662d10Schristos add %i1, 8, %i1 179060662d10Schristos 179160662d10Schristos add %l5, %i2, %i2 179260662d10Schristos andcc %i2, 1, %g0 ! is number of blocks even? 179360662d10Schristos membar #StoreLoad|#StoreStore 179460662d10Schristos bnz,pt %icc, .L256_cbc_dec_loop 179560662d10Schristos srl %i2, 0, %i2 179660662d10Schristos brnz,pn %i2, .L256_cbc_dec_loop2x 179760662d10Schristos nop 179860662d10Schristos st %f12, [%i4 + 0] ! write out ivec 179960662d10Schristos st %f13, [%i4 + 4] 180060662d10Schristos st %f14, [%i4 + 8] 180160662d10Schristos st %f15, [%i4 + 12] 180260662d10Schristos ret 180360662d10Schristos restore 180460662d10Schristos.type cmll256_t4_cbc_decrypt,#function 180560662d10Schristos.size cmll256_t4_cbc_decrypt,.-cmll256_t4_cbc_decrypt 180660662d10Schristos.globl cmll128_t4_ctr32_encrypt 180760662d10Schristos.align 32 180860662d10Schristoscmll128_t4_ctr32_encrypt: 1809*1dcdf01fSchristos save %sp, -STACK_FRAME, %sp 181060662d10Schristos srln %i2, 0, %i2 ! needed on v8+, "nop" on v9 181160662d10Schristos 181260662d10Schristos prefetch [%i0], 20 181360662d10Schristos prefetch [%i0 + 63], 20 181460662d10Schristos call _cmll128_load_enckey 181560662d10Schristos sllx %i2, 4, %i2 181660662d10Schristos 181760662d10Schristos ld [%i4 + 0], %l4 ! counter 181860662d10Schristos ld [%i4 + 4], %l5 181960662d10Schristos ld [%i4 + 8], %l6 182060662d10Schristos ld [%i4 + 12], %l7 182160662d10Schristos 182260662d10Schristos sllx %l4, 32, %o5 182360662d10Schristos or %l5, %o5, %o5 182460662d10Schristos sllx %l6, 32, %g1 182560662d10Schristos xor %o5, %g4, %g4 ! ^= rk[0] 182660662d10Schristos xor %g1, %g5, %g5 182760662d10Schristos .word 0x9db02304 !movxtod %g4,%f14 ! most significant 64 bits 182860662d10Schristos 182960662d10Schristos sub %i0, %i1, %l5 ! %i0!=%i1 183060662d10Schristos and %i0, 7, %l0 183160662d10Schristos andn %i0, 7, %i0 183260662d10Schristos sll %l0, 3, %l0 183360662d10Schristos mov 64, %l1 183460662d10Schristos mov 0xff, %l3 183560662d10Schristos sub %l1, %l0, %l1 183660662d10Schristos and %i1, 7, %l2 183760662d10Schristos cmp %i2, 255 183860662d10Schristos movrnz %l2, 0, %l5 ! if ( %i1&7 || 1839*1dcdf01fSchristos movleu SIZE_T_CC, 0, %l5 ! %i2<256 || 184060662d10Schristos brnz,pn %l5, .L128_ctr32_blk ! %i0==%i1) 184160662d10Schristos srl %l3, %l2, %l3 184260662d10Schristos 184360662d10Schristos andcc %i2, 16, %g0 ! is number of blocks even? 184460662d10Schristos .word 0xb3b64340 !alignaddrl %i1,%g0,%i1 184560662d10Schristos bz %icc, .L128_ctr32_loop2x 184660662d10Schristos srlx %i2, 4, %i2 184760662d10Schristos.L128_ctr32_loop: 184860662d10Schristos ldx [%i0 + 0], %o0 184960662d10Schristos brz,pt %l0, 4f 185060662d10Schristos ldx [%i0 + 8], %o1 185160662d10Schristos 185260662d10Schristos ldx [%i0 + 16], %o2 185360662d10Schristos sllx %o0, %l0, %o0 185460662d10Schristos srlx %o1, %l1, %g1 185560662d10Schristos sllx %o1, %l0, %o1 185660662d10Schristos or %g1, %o0, %o0 185760662d10Schristos srlx %o2, %l1, %o2 185860662d10Schristos or %o2, %o1, %o1 185960662d10Schristos4: 186060662d10Schristos xor %g5, %l7, %g1 ! ^= rk[0] 186160662d10Schristos add %l7, 1, %l7 186260662d10Schristos .word 0x85b02301 !movxtod %g1,%f2 186360662d10Schristos srl %l7, 0, %l7 ! clruw 186460662d10Schristos prefetch [%i1 + 63], 22 186560662d10Schristos prefetch [%i0 + 16+63], 20 186660662d10Schristos .word 0x84cc1d82 !camellia_f %f16,%f2,%f14,%f2 186760662d10Schristos .word 0x80cc858e !camellia_f %f18,%f14,%f2,%f0 186860662d10Schristos call _cmll128_encrypt_1x+8 186960662d10Schristos add %i0, 16, %i0 187060662d10Schristos 187160662d10Schristos .word 0x95b02308 !movxtod %o0,%f10 187260662d10Schristos .word 0x99b02309 !movxtod %o1,%f12 187360662d10Schristos .word 0x81b28d80 !fxor %f10,%f0,%f0 ! ^= inp 187460662d10Schristos .word 0x85b30d82 !fxor %f12,%f2,%f2 187560662d10Schristos 187660662d10Schristos brnz,pn %l2, 2f 187760662d10Schristos sub %i2, 1, %i2 187860662d10Schristos 187960662d10Schristos std %f0, [%i1 + 0] 188060662d10Schristos std %f2, [%i1 + 8] 188160662d10Schristos brnz,pt %i2, .L128_ctr32_loop2x 188260662d10Schristos add %i1, 16, %i1 188360662d10Schristos 188460662d10Schristos ret 188560662d10Schristos restore 188660662d10Schristos 188760662d10Schristos.align 16 188860662d10Schristos2: ldxa [%i0]0x82, %o0 ! avoid read-after-write hazard 188960662d10Schristos ! and ~3x deterioration 189060662d10Schristos ! in inp==out case 189160662d10Schristos .word 0x89b00900 !faligndata %f0,%f0,%f4 ! handle unaligned output 189260662d10Schristos .word 0x8db00902 !faligndata %f0,%f2,%f6 189360662d10Schristos .word 0x91b08902 !faligndata %f2,%f2,%f8 189460662d10Schristos stda %f4, [%i1 + %l3]0xc0 ! partial store 189560662d10Schristos std %f6, [%i1 + 8] 189660662d10Schristos add %i1, 16, %i1 189760662d10Schristos orn %g0, %l3, %l3 189860662d10Schristos stda %f8, [%i1 + %l3]0xc0 ! partial store 189960662d10Schristos 190060662d10Schristos brnz,pt %i2, .L128_ctr32_loop2x+4 190160662d10Schristos orn %g0, %l3, %l3 190260662d10Schristos 190360662d10Schristos ret 190460662d10Schristos restore 190560662d10Schristos 190660662d10Schristos!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 190760662d10Schristos.align 32 190860662d10Schristos.L128_ctr32_loop2x: 190960662d10Schristos ldx [%i0 + 0], %o0 191060662d10Schristos ldx [%i0 + 8], %o1 191160662d10Schristos ldx [%i0 + 16], %o2 191260662d10Schristos brz,pt %l0, 4f 191360662d10Schristos ldx [%i0 + 24], %o3 191460662d10Schristos 191560662d10Schristos ldx [%i0 + 32], %o4 191660662d10Schristos sllx %o0, %l0, %o0 191760662d10Schristos srlx %o1, %l1, %g1 191860662d10Schristos or %g1, %o0, %o0 191960662d10Schristos sllx %o1, %l0, %o1 192060662d10Schristos srlx %o2, %l1, %g1 192160662d10Schristos or %g1, %o1, %o1 192260662d10Schristos sllx %o2, %l0, %o2 192360662d10Schristos srlx %o3, %l1, %g1 192460662d10Schristos or %g1, %o2, %o2 192560662d10Schristos sllx %o3, %l0, %o3 192660662d10Schristos srlx %o4, %l1, %o4 192760662d10Schristos or %o4, %o3, %o3 192860662d10Schristos4: 192960662d10Schristos xor %g5, %l7, %g1 ! ^= rk[0] 193060662d10Schristos add %l7, 1, %l7 193160662d10Schristos .word 0x85b02301 !movxtod %g1,%f2 193260662d10Schristos srl %l7, 0, %l7 ! clruw 193360662d10Schristos xor %g5, %l7, %g1 193460662d10Schristos add %l7, 1, %l7 193560662d10Schristos .word 0x8db02301 !movxtod %g1,%f6 193660662d10Schristos srl %l7, 0, %l7 ! clruw 193760662d10Schristos prefetch [%i1 + 63], 22 193860662d10Schristos prefetch [%i0 + 32+63], 20 193960662d10Schristos .word 0x84cc1d82 !camellia_f %f16,%f2,%f14,%f2 194060662d10Schristos .word 0x8ccc1d86 !camellia_f %f16,%f6,%f14,%f6 194160662d10Schristos .word 0x80cc858e !camellia_f %f18,%f14,%f2,%f0 194260662d10Schristos .word 0x88cc8d8e !camellia_f %f18,%f14,%f6,%f4 194360662d10Schristos call _cmll128_encrypt_2x+16 194460662d10Schristos add %i0, 32, %i0 194560662d10Schristos 194660662d10Schristos .word 0x91b02308 !movxtod %o0,%f8 194760662d10Schristos .word 0x95b02309 !movxtod %o1,%f10 194860662d10Schristos .word 0x99b0230a !movxtod %o2,%f12 194960662d10Schristos .word 0x81b20d80 !fxor %f8,%f0,%f0 ! ^= inp 195060662d10Schristos .word 0x91b0230b !movxtod %o3,%f8 195160662d10Schristos .word 0x85b28d82 !fxor %f10,%f2,%f2 195260662d10Schristos .word 0x89b30d84 !fxor %f12,%f4,%f4 195360662d10Schristos .word 0x8db20d86 !fxor %f8,%f6,%f6 195460662d10Schristos 195560662d10Schristos brnz,pn %l2, 2f 195660662d10Schristos sub %i2, 2, %i2 195760662d10Schristos 195860662d10Schristos std %f0, [%i1 + 0] 195960662d10Schristos std %f2, [%i1 + 8] 196060662d10Schristos std %f4, [%i1 + 16] 196160662d10Schristos std %f6, [%i1 + 24] 196260662d10Schristos brnz,pt %i2, .L128_ctr32_loop2x 196360662d10Schristos add %i1, 32, %i1 196460662d10Schristos 196560662d10Schristos ret 196660662d10Schristos restore 196760662d10Schristos 196860662d10Schristos.align 16 196960662d10Schristos2: ldxa [%i0]0x82, %o0 ! avoid read-after-write hazard 197060662d10Schristos ! and ~3x deterioration 197160662d10Schristos ! in inp==out case 197260662d10Schristos .word 0x91b00900 !faligndata %f0,%f0,%f8 ! handle unaligned output 197360662d10Schristos .word 0x81b00902 !faligndata %f0,%f2,%f0 197460662d10Schristos .word 0x85b08904 !faligndata %f2,%f4,%f2 197560662d10Schristos .word 0x89b10906 !faligndata %f4,%f6,%f4 197660662d10Schristos .word 0x8db18906 !faligndata %f6,%f6,%f6 197760662d10Schristos 197860662d10Schristos stda %f8, [%i1 + %l3]0xc0 ! partial store 197960662d10Schristos std %f0, [%i1 + 8] 198060662d10Schristos std %f2, [%i1 + 16] 198160662d10Schristos std %f4, [%i1 + 24] 198260662d10Schristos add %i1, 32, %i1 198360662d10Schristos orn %g0, %l3, %l3 198460662d10Schristos stda %f6, [%i1 + %l3]0xc0 ! partial store 198560662d10Schristos 198660662d10Schristos brnz,pt %i2, .L128_ctr32_loop2x+4 198760662d10Schristos orn %g0, %l3, %l3 198860662d10Schristos 198960662d10Schristos ret 199060662d10Schristos restore 199160662d10Schristos 199260662d10Schristos!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 199360662d10Schristos.align 32 199460662d10Schristos.L128_ctr32_blk: 199560662d10Schristos add %i1, %i2, %l5 199660662d10Schristos and %l5, 63, %l5 ! tail 199760662d10Schristos sub %i2, %l5, %i2 199860662d10Schristos add %l5, 15, %l5 ! round up to 16n 199960662d10Schristos srlx %i2, 4, %i2 200060662d10Schristos srl %l5, 4, %l5 200160662d10Schristos sub %i2, 1, %i2 200260662d10Schristos add %l5, 1, %l5 200360662d10Schristos 200460662d10Schristos.L128_ctr32_blk_loop2x: 200560662d10Schristos ldx [%i0 + 0], %o0 200660662d10Schristos ldx [%i0 + 8], %o1 200760662d10Schristos ldx [%i0 + 16], %o2 200860662d10Schristos brz,pt %l0, 5f 200960662d10Schristos ldx [%i0 + 24], %o3 201060662d10Schristos 201160662d10Schristos ldx [%i0 + 32], %o4 201260662d10Schristos sllx %o0, %l0, %o0 201360662d10Schristos srlx %o1, %l1, %g1 201460662d10Schristos or %g1, %o0, %o0 201560662d10Schristos sllx %o1, %l0, %o1 201660662d10Schristos srlx %o2, %l1, %g1 201760662d10Schristos or %g1, %o1, %o1 201860662d10Schristos sllx %o2, %l0, %o2 201960662d10Schristos srlx %o3, %l1, %g1 202060662d10Schristos or %g1, %o2, %o2 202160662d10Schristos sllx %o3, %l0, %o3 202260662d10Schristos srlx %o4, %l1, %o4 202360662d10Schristos or %o4, %o3, %o3 202460662d10Schristos5: 202560662d10Schristos xor %g5, %l7, %g1 ! ^= rk[0] 202660662d10Schristos add %l7, 1, %l7 202760662d10Schristos .word 0x85b02301 !movxtod %g1,%f2 202860662d10Schristos srl %l7, 0, %l7 ! clruw 202960662d10Schristos xor %g5, %l7, %g1 203060662d10Schristos add %l7, 1, %l7 203160662d10Schristos .word 0x8db02301 !movxtod %g1,%f6 203260662d10Schristos srl %l7, 0, %l7 ! clruw 203360662d10Schristos prefetch [%i0 + 32+63], 20 203460662d10Schristos .word 0x84cc1d82 !camellia_f %f16,%f2,%f14,%f2 203560662d10Schristos .word 0x8ccc1d86 !camellia_f %f16,%f6,%f14,%f6 203660662d10Schristos .word 0x80cc858e !camellia_f %f18,%f14,%f2,%f0 203760662d10Schristos .word 0x88cc8d8e !camellia_f %f18,%f14,%f6,%f4 203860662d10Schristos call _cmll128_encrypt_2x+16 203960662d10Schristos add %i0, 32, %i0 204060662d10Schristos subcc %i2, 2, %i2 204160662d10Schristos 204260662d10Schristos .word 0x91b02308 !movxtod %o0,%f8 204360662d10Schristos .word 0x95b02309 !movxtod %o1,%f10 204460662d10Schristos .word 0x99b0230a !movxtod %o2,%f12 204560662d10Schristos .word 0x81b20d80 !fxor %f8,%f0,%f0 ! ^= inp 204660662d10Schristos .word 0x91b0230b !movxtod %o3,%f8 204760662d10Schristos .word 0x85b28d82 !fxor %f10,%f2,%f2 204860662d10Schristos .word 0x89b30d84 !fxor %f12,%f4,%f4 204960662d10Schristos .word 0x8db20d86 !fxor %f8,%f6,%f6 205060662d10Schristos 205160662d10Schristos stda %f0, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 205260662d10Schristos add %i1, 8, %i1 205360662d10Schristos stda %f2, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 205460662d10Schristos add %i1, 8, %i1 205560662d10Schristos stda %f4, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 205660662d10Schristos add %i1, 8, %i1 205760662d10Schristos stda %f6, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 2058*1dcdf01fSchristos bgu,pt SIZE_T_CC, .L128_ctr32_blk_loop2x 205960662d10Schristos add %i1, 8, %i1 206060662d10Schristos 206160662d10Schristos add %l5, %i2, %i2 206260662d10Schristos andcc %i2, 1, %g0 ! is number of blocks even? 206360662d10Schristos membar #StoreLoad|#StoreStore 206460662d10Schristos bnz,pt %icc, .L128_ctr32_loop 206560662d10Schristos srl %i2, 0, %i2 206660662d10Schristos brnz,pn %i2, .L128_ctr32_loop2x 206760662d10Schristos nop 206860662d10Schristos 206960662d10Schristos ret 207060662d10Schristos restore 207160662d10Schristos.type cmll128_t4_ctr32_encrypt,#function 207260662d10Schristos.size cmll128_t4_ctr32_encrypt,.-cmll128_t4_ctr32_encrypt 207360662d10Schristos.globl cmll256_t4_ctr32_encrypt 207460662d10Schristos.align 32 207560662d10Schristoscmll256_t4_ctr32_encrypt: 2076*1dcdf01fSchristos save %sp, -STACK_FRAME, %sp 207760662d10Schristos srln %i2, 0, %i2 ! needed on v8+, "nop" on v9 207860662d10Schristos 207960662d10Schristos prefetch [%i0], 20 208060662d10Schristos prefetch [%i0 + 63], 20 208160662d10Schristos call _cmll256_load_enckey 208260662d10Schristos sllx %i2, 4, %i2 208360662d10Schristos 208460662d10Schristos ld [%i4 + 0], %l4 ! counter 208560662d10Schristos ld [%i4 + 4], %l5 208660662d10Schristos ld [%i4 + 8], %l6 208760662d10Schristos ld [%i4 + 12], %l7 208860662d10Schristos 208960662d10Schristos sllx %l4, 32, %o5 209060662d10Schristos or %l5, %o5, %o5 209160662d10Schristos sllx %l6, 32, %g1 209260662d10Schristos xor %o5, %g4, %g4 ! ^= rk[0] 209360662d10Schristos xor %g1, %g5, %g5 209460662d10Schristos .word 0x9db02304 !movxtod %g4,%f14 ! most significant 64 bits 209560662d10Schristos 209660662d10Schristos sub %i0, %i1, %l5 ! %i0!=%i1 209760662d10Schristos and %i0, 7, %l0 209860662d10Schristos andn %i0, 7, %i0 209960662d10Schristos sll %l0, 3, %l0 210060662d10Schristos mov 64, %l1 210160662d10Schristos mov 0xff, %l3 210260662d10Schristos sub %l1, %l0, %l1 210360662d10Schristos and %i1, 7, %l2 210460662d10Schristos cmp %i2, 255 210560662d10Schristos movrnz %l2, 0, %l5 ! if ( %i1&7 || 2106*1dcdf01fSchristos movleu SIZE_T_CC, 0, %l5 ! %i2<256 || 210760662d10Schristos brnz,pn %l5, .L256_ctr32_blk ! %i0==%i1) 210860662d10Schristos srl %l3, %l2, %l3 210960662d10Schristos 211060662d10Schristos andcc %i2, 16, %g0 ! is number of blocks even? 211160662d10Schristos .word 0xb3b64340 !alignaddrl %i1,%g0,%i1 211260662d10Schristos bz %icc, .L256_ctr32_loop2x 211360662d10Schristos srlx %i2, 4, %i2 211460662d10Schristos.L256_ctr32_loop: 211560662d10Schristos ldx [%i0 + 0], %o0 211660662d10Schristos brz,pt %l0, 4f 211760662d10Schristos ldx [%i0 + 8], %o1 211860662d10Schristos 211960662d10Schristos ldx [%i0 + 16], %o2 212060662d10Schristos sllx %o0, %l0, %o0 212160662d10Schristos srlx %o1, %l1, %g1 212260662d10Schristos sllx %o1, %l0, %o1 212360662d10Schristos or %g1, %o0, %o0 212460662d10Schristos srlx %o2, %l1, %o2 212560662d10Schristos or %o2, %o1, %o1 212660662d10Schristos4: 212760662d10Schristos xor %g5, %l7, %g1 ! ^= rk[0] 212860662d10Schristos add %l7, 1, %l7 212960662d10Schristos .word 0x85b02301 !movxtod %g1,%f2 213060662d10Schristos srl %l7, 0, %l7 ! clruw 213160662d10Schristos prefetch [%i1 + 63], 22 213260662d10Schristos prefetch [%i0 + 16+63], 20 213360662d10Schristos .word 0x84cc1d82 !camellia_f %f16,%f2,%f14,%f2 213460662d10Schristos .word 0x80cc858e !camellia_f %f18,%f14,%f2,%f0 213560662d10Schristos call _cmll256_encrypt_1x+8 213660662d10Schristos add %i0, 16, %i0 213760662d10Schristos 213860662d10Schristos .word 0x95b02308 !movxtod %o0,%f10 213960662d10Schristos .word 0x99b02309 !movxtod %o1,%f12 214060662d10Schristos .word 0x81b28d80 !fxor %f10,%f0,%f0 ! ^= inp 214160662d10Schristos .word 0x85b30d82 !fxor %f12,%f2,%f2 214260662d10Schristos 214360662d10Schristos brnz,pn %l2, 2f 214460662d10Schristos sub %i2, 1, %i2 214560662d10Schristos 214660662d10Schristos std %f0, [%i1 + 0] 214760662d10Schristos std %f2, [%i1 + 8] 214860662d10Schristos brnz,pt %i2, .L256_ctr32_loop2x 214960662d10Schristos add %i1, 16, %i1 215060662d10Schristos 215160662d10Schristos ret 215260662d10Schristos restore 215360662d10Schristos 215460662d10Schristos.align 16 215560662d10Schristos2: ldxa [%i0]0x82, %o0 ! avoid read-after-write hazard 215660662d10Schristos ! and ~3x deterioration 215760662d10Schristos ! in inp==out case 215860662d10Schristos .word 0x89b00900 !faligndata %f0,%f0,%f4 ! handle unaligned output 215960662d10Schristos .word 0x8db00902 !faligndata %f0,%f2,%f6 216060662d10Schristos .word 0x91b08902 !faligndata %f2,%f2,%f8 216160662d10Schristos stda %f4, [%i1 + %l3]0xc0 ! partial store 216260662d10Schristos std %f6, [%i1 + 8] 216360662d10Schristos add %i1, 16, %i1 216460662d10Schristos orn %g0, %l3, %l3 216560662d10Schristos stda %f8, [%i1 + %l3]0xc0 ! partial store 216660662d10Schristos 216760662d10Schristos brnz,pt %i2, .L256_ctr32_loop2x+4 216860662d10Schristos orn %g0, %l3, %l3 216960662d10Schristos 217060662d10Schristos ret 217160662d10Schristos restore 217260662d10Schristos 217360662d10Schristos!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 217460662d10Schristos.align 32 217560662d10Schristos.L256_ctr32_loop2x: 217660662d10Schristos ldx [%i0 + 0], %o0 217760662d10Schristos ldx [%i0 + 8], %o1 217860662d10Schristos ldx [%i0 + 16], %o2 217960662d10Schristos brz,pt %l0, 4f 218060662d10Schristos ldx [%i0 + 24], %o3 218160662d10Schristos 218260662d10Schristos ldx [%i0 + 32], %o4 218360662d10Schristos sllx %o0, %l0, %o0 218460662d10Schristos srlx %o1, %l1, %g1 218560662d10Schristos or %g1, %o0, %o0 218660662d10Schristos sllx %o1, %l0, %o1 218760662d10Schristos srlx %o2, %l1, %g1 218860662d10Schristos or %g1, %o1, %o1 218960662d10Schristos sllx %o2, %l0, %o2 219060662d10Schristos srlx %o3, %l1, %g1 219160662d10Schristos or %g1, %o2, %o2 219260662d10Schristos sllx %o3, %l0, %o3 219360662d10Schristos srlx %o4, %l1, %o4 219460662d10Schristos or %o4, %o3, %o3 219560662d10Schristos4: 219660662d10Schristos xor %g5, %l7, %g1 ! ^= rk[0] 219760662d10Schristos add %l7, 1, %l7 219860662d10Schristos .word 0x85b02301 !movxtod %g1,%f2 219960662d10Schristos srl %l7, 0, %l7 ! clruw 220060662d10Schristos xor %g5, %l7, %g1 220160662d10Schristos add %l7, 1, %l7 220260662d10Schristos .word 0x8db02301 !movxtod %g1,%f6 220360662d10Schristos srl %l7, 0, %l7 ! clruw 220460662d10Schristos prefetch [%i1 + 63], 22 220560662d10Schristos prefetch [%i0 + 32+63], 20 220660662d10Schristos .word 0x84cc1d82 !camellia_f %f16,%f2,%f14,%f2 220760662d10Schristos .word 0x8ccc1d86 !camellia_f %f16,%f6,%f14,%f6 220860662d10Schristos .word 0x80cc858e !camellia_f %f18,%f14,%f2,%f0 220960662d10Schristos .word 0x88cc8d8e !camellia_f %f18,%f14,%f6,%f4 221060662d10Schristos call _cmll256_encrypt_2x+16 221160662d10Schristos add %i0, 32, %i0 221260662d10Schristos 221360662d10Schristos .word 0x91b02308 !movxtod %o0,%f8 221460662d10Schristos .word 0x95b02309 !movxtod %o1,%f10 221560662d10Schristos .word 0x99b0230a !movxtod %o2,%f12 221660662d10Schristos .word 0x81b20d80 !fxor %f8,%f0,%f0 ! ^= inp 221760662d10Schristos .word 0x91b0230b !movxtod %o3,%f8 221860662d10Schristos .word 0x85b28d82 !fxor %f10,%f2,%f2 221960662d10Schristos .word 0x89b30d84 !fxor %f12,%f4,%f4 222060662d10Schristos .word 0x8db20d86 !fxor %f8,%f6,%f6 222160662d10Schristos 222260662d10Schristos brnz,pn %l2, 2f 222360662d10Schristos sub %i2, 2, %i2 222460662d10Schristos 222560662d10Schristos std %f0, [%i1 + 0] 222660662d10Schristos std %f2, [%i1 + 8] 222760662d10Schristos std %f4, [%i1 + 16] 222860662d10Schristos std %f6, [%i1 + 24] 222960662d10Schristos brnz,pt %i2, .L256_ctr32_loop2x 223060662d10Schristos add %i1, 32, %i1 223160662d10Schristos 223260662d10Schristos ret 223360662d10Schristos restore 223460662d10Schristos 223560662d10Schristos.align 16 223660662d10Schristos2: ldxa [%i0]0x82, %o0 ! avoid read-after-write hazard 223760662d10Schristos ! and ~3x deterioration 223860662d10Schristos ! in inp==out case 223960662d10Schristos .word 0x91b00900 !faligndata %f0,%f0,%f8 ! handle unaligned output 224060662d10Schristos .word 0x81b00902 !faligndata %f0,%f2,%f0 224160662d10Schristos .word 0x85b08904 !faligndata %f2,%f4,%f2 224260662d10Schristos .word 0x89b10906 !faligndata %f4,%f6,%f4 224360662d10Schristos .word 0x8db18906 !faligndata %f6,%f6,%f6 224460662d10Schristos 224560662d10Schristos stda %f8, [%i1 + %l3]0xc0 ! partial store 224660662d10Schristos std %f0, [%i1 + 8] 224760662d10Schristos std %f2, [%i1 + 16] 224860662d10Schristos std %f4, [%i1 + 24] 224960662d10Schristos add %i1, 32, %i1 225060662d10Schristos orn %g0, %l3, %l3 225160662d10Schristos stda %f6, [%i1 + %l3]0xc0 ! partial store 225260662d10Schristos 225360662d10Schristos brnz,pt %i2, .L256_ctr32_loop2x+4 225460662d10Schristos orn %g0, %l3, %l3 225560662d10Schristos 225660662d10Schristos ret 225760662d10Schristos restore 225860662d10Schristos 225960662d10Schristos!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 226060662d10Schristos.align 32 226160662d10Schristos.L256_ctr32_blk: 226260662d10Schristos add %i1, %i2, %l5 226360662d10Schristos and %l5, 63, %l5 ! tail 226460662d10Schristos sub %i2, %l5, %i2 226560662d10Schristos add %l5, 15, %l5 ! round up to 16n 226660662d10Schristos srlx %i2, 4, %i2 226760662d10Schristos srl %l5, 4, %l5 226860662d10Schristos sub %i2, 1, %i2 226960662d10Schristos add %l5, 1, %l5 227060662d10Schristos 227160662d10Schristos.L256_ctr32_blk_loop2x: 227260662d10Schristos ldx [%i0 + 0], %o0 227360662d10Schristos ldx [%i0 + 8], %o1 227460662d10Schristos ldx [%i0 + 16], %o2 227560662d10Schristos brz,pt %l0, 5f 227660662d10Schristos ldx [%i0 + 24], %o3 227760662d10Schristos 227860662d10Schristos ldx [%i0 + 32], %o4 227960662d10Schristos sllx %o0, %l0, %o0 228060662d10Schristos srlx %o1, %l1, %g1 228160662d10Schristos or %g1, %o0, %o0 228260662d10Schristos sllx %o1, %l0, %o1 228360662d10Schristos srlx %o2, %l1, %g1 228460662d10Schristos or %g1, %o1, %o1 228560662d10Schristos sllx %o2, %l0, %o2 228660662d10Schristos srlx %o3, %l1, %g1 228760662d10Schristos or %g1, %o2, %o2 228860662d10Schristos sllx %o3, %l0, %o3 228960662d10Schristos srlx %o4, %l1, %o4 229060662d10Schristos or %o4, %o3, %o3 229160662d10Schristos5: 229260662d10Schristos xor %g5, %l7, %g1 ! ^= rk[0] 229360662d10Schristos add %l7, 1, %l7 229460662d10Schristos .word 0x85b02301 !movxtod %g1,%f2 229560662d10Schristos srl %l7, 0, %l7 ! clruw 229660662d10Schristos xor %g5, %l7, %g1 229760662d10Schristos add %l7, 1, %l7 229860662d10Schristos .word 0x8db02301 !movxtod %g1,%f6 229960662d10Schristos srl %l7, 0, %l7 ! clruw 230060662d10Schristos prefetch [%i0 + 32+63], 20 230160662d10Schristos .word 0x84cc1d82 !camellia_f %f16,%f2,%f14,%f2 230260662d10Schristos .word 0x8ccc1d86 !camellia_f %f16,%f6,%f14,%f6 230360662d10Schristos .word 0x80cc858e !camellia_f %f18,%f14,%f2,%f0 230460662d10Schristos .word 0x88cc8d8e !camellia_f %f18,%f14,%f6,%f4 230560662d10Schristos call _cmll256_encrypt_2x+16 230660662d10Schristos add %i0, 32, %i0 230760662d10Schristos subcc %i2, 2, %i2 230860662d10Schristos 230960662d10Schristos .word 0x91b02308 !movxtod %o0,%f8 231060662d10Schristos .word 0x95b02309 !movxtod %o1,%f10 231160662d10Schristos .word 0x99b0230a !movxtod %o2,%f12 231260662d10Schristos .word 0x81b20d80 !fxor %f8,%f0,%f0 ! ^= inp 231360662d10Schristos .word 0x91b0230b !movxtod %o3,%f8 231460662d10Schristos .word 0x85b28d82 !fxor %f10,%f2,%f2 231560662d10Schristos .word 0x89b30d84 !fxor %f12,%f4,%f4 231660662d10Schristos .word 0x8db20d86 !fxor %f8,%f6,%f6 231760662d10Schristos 231860662d10Schristos stda %f0, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 231960662d10Schristos add %i1, 8, %i1 232060662d10Schristos stda %f2, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 232160662d10Schristos add %i1, 8, %i1 232260662d10Schristos stda %f4, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 232360662d10Schristos add %i1, 8, %i1 232460662d10Schristos stda %f6, [%i1]0xe2 ! ASI_BLK_INIT, T4-specific 2325*1dcdf01fSchristos bgu,pt SIZE_T_CC, .L256_ctr32_blk_loop2x 232660662d10Schristos add %i1, 8, %i1 232760662d10Schristos 232860662d10Schristos add %l5, %i2, %i2 232960662d10Schristos andcc %i2, 1, %g0 ! is number of blocks even? 233060662d10Schristos membar #StoreLoad|#StoreStore 233160662d10Schristos bnz,pt %icc, .L256_ctr32_loop 233260662d10Schristos srl %i2, 0, %i2 233360662d10Schristos brnz,pn %i2, .L256_ctr32_loop2x 233460662d10Schristos nop 233560662d10Schristos 233660662d10Schristos ret 233760662d10Schristos restore 233860662d10Schristos.type cmll256_t4_ctr32_encrypt,#function 233960662d10Schristos.size cmll256_t4_ctr32_encrypt,.-cmll256_t4_ctr32_encrypt 2340