1*0a6a1f1dSLionel Sambuc.section ".text",#alloc,#execinstr 2*0a6a1f1dSLionel Sambuc 3*0a6a1f1dSLionel Sambuc.align 64 4*0a6a1f1dSLionel Sambucrem_4bit: 5*0a6a1f1dSLionel Sambuc .long 0,0,471859200,0,943718400,0,610271232,0 6*0a6a1f1dSLionel Sambuc .long 1887436800,0,1822425088,0,1220542464,0,1423966208,0 7*0a6a1f1dSLionel Sambuc .long 3774873600,0,4246732800,0,3644850176,0,3311403008,0 8*0a6a1f1dSLionel Sambuc .long 2441084928,0,2376073216,0,2847932416,0,3051356160,0 9*0a6a1f1dSLionel Sambuc.type rem_4bit,#object 10*0a6a1f1dSLionel Sambuc.size rem_4bit,(.-rem_4bit) 11*0a6a1f1dSLionel Sambuc 12*0a6a1f1dSLionel Sambuc.globl gcm_ghash_4bit 13*0a6a1f1dSLionel Sambuc.align 32 14*0a6a1f1dSLionel Sambucgcm_ghash_4bit: 15*0a6a1f1dSLionel Sambuc save %sp,-112,%sp 16*0a6a1f1dSLionel Sambuc ldub [%i2+15],%l1 17*0a6a1f1dSLionel Sambuc ldub [%i0+15],%l2 18*0a6a1f1dSLionel Sambuc ldub [%i0+14],%l3 19*0a6a1f1dSLionel Sambuc add %i3,%i2,%i3 20*0a6a1f1dSLionel Sambuc add %i1,8,%l6 21*0a6a1f1dSLionel Sambuc 22*0a6a1f1dSLionel Sambuc1: call .+8 23*0a6a1f1dSLionel Sambuc add %o7,rem_4bit-1b,%l4 24*0a6a1f1dSLionel Sambuc 25*0a6a1f1dSLionel Sambuc.Louter: 26*0a6a1f1dSLionel Sambuc xor %l2,%l1,%l1 27*0a6a1f1dSLionel Sambuc and %l1,0xf0,%l0 28*0a6a1f1dSLionel Sambuc and %l1,0x0f,%l1 29*0a6a1f1dSLionel Sambuc sll %l1,4,%l1 30*0a6a1f1dSLionel Sambuc ldx [%l6+%l1],%o1 31*0a6a1f1dSLionel Sambuc ldx [%i1+%l1],%o0 32*0a6a1f1dSLionel Sambuc 33*0a6a1f1dSLionel Sambuc ldub [%i2+14],%l1 34*0a6a1f1dSLionel Sambuc 35*0a6a1f1dSLionel Sambuc ldx [%l6+%l0],%o3 36*0a6a1f1dSLionel Sambuc and %o1,0xf,%l5 37*0a6a1f1dSLionel Sambuc ldx [%i1+%l0],%o2 38*0a6a1f1dSLionel Sambuc sll %l5,3,%l5 39*0a6a1f1dSLionel Sambuc ldx [%l4+%l5],%o4 40*0a6a1f1dSLionel Sambuc srlx %o1,4,%o1 41*0a6a1f1dSLionel Sambuc mov 13,%l7 42*0a6a1f1dSLionel Sambuc sllx %o0,60,%o5 43*0a6a1f1dSLionel Sambuc xor %o3,%o1,%o1 44*0a6a1f1dSLionel Sambuc srlx %o0,4,%o0 45*0a6a1f1dSLionel Sambuc xor %o1,%o5,%o1 46*0a6a1f1dSLionel Sambuc 47*0a6a1f1dSLionel Sambuc xor %l3,%l1,%l1 48*0a6a1f1dSLionel Sambuc and %o1,0xf,%l5 49*0a6a1f1dSLionel Sambuc and %l1,0xf0,%l0 50*0a6a1f1dSLionel Sambuc and %l1,0x0f,%l1 51*0a6a1f1dSLionel Sambuc ba .Lghash_inner 52*0a6a1f1dSLionel Sambuc sll %l1,4,%l1 53*0a6a1f1dSLionel Sambuc.align 32 54*0a6a1f1dSLionel Sambuc.Lghash_inner: 55*0a6a1f1dSLionel Sambuc ldx [%l6+%l1],%o3 56*0a6a1f1dSLionel Sambuc sll %l5,3,%l5 57*0a6a1f1dSLionel Sambuc xor %o2,%o0,%o0 58*0a6a1f1dSLionel Sambuc ldx [%i1+%l1],%o2 59*0a6a1f1dSLionel Sambuc srlx %o1,4,%o1 60*0a6a1f1dSLionel Sambuc xor %o4,%o0,%o0 61*0a6a1f1dSLionel Sambuc ldx [%l4+%l5],%o4 62*0a6a1f1dSLionel Sambuc sllx %o0,60,%o5 63*0a6a1f1dSLionel Sambuc xor %o3,%o1,%o1 64*0a6a1f1dSLionel Sambuc ldub [%i2+%l7],%l1 65*0a6a1f1dSLionel Sambuc srlx %o0,4,%o0 66*0a6a1f1dSLionel Sambuc xor %o1,%o5,%o1 67*0a6a1f1dSLionel Sambuc ldub [%i0+%l7],%l3 68*0a6a1f1dSLionel Sambuc xor %o2,%o0,%o0 69*0a6a1f1dSLionel Sambuc and %o1,0xf,%l5 70*0a6a1f1dSLionel Sambuc 71*0a6a1f1dSLionel Sambuc ldx [%l6+%l0],%o3 72*0a6a1f1dSLionel Sambuc sll %l5,3,%l5 73*0a6a1f1dSLionel Sambuc xor %o4,%o0,%o0 74*0a6a1f1dSLionel Sambuc ldx [%i1+%l0],%o2 75*0a6a1f1dSLionel Sambuc srlx %o1,4,%o1 76*0a6a1f1dSLionel Sambuc ldx [%l4+%l5],%o4 77*0a6a1f1dSLionel Sambuc sllx %o0,60,%o5 78*0a6a1f1dSLionel Sambuc xor %l3,%l1,%l1 79*0a6a1f1dSLionel Sambuc srlx %o0,4,%o0 80*0a6a1f1dSLionel Sambuc and %l1,0xf0,%l0 81*0a6a1f1dSLionel Sambuc addcc %l7,-1,%l7 82*0a6a1f1dSLionel Sambuc xor %o1,%o5,%o1 83*0a6a1f1dSLionel Sambuc and %l1,0x0f,%l1 84*0a6a1f1dSLionel Sambuc xor %o3,%o1,%o1 85*0a6a1f1dSLionel Sambuc sll %l1,4,%l1 86*0a6a1f1dSLionel Sambuc blu .Lghash_inner 87*0a6a1f1dSLionel Sambuc and %o1,0xf,%l5 88*0a6a1f1dSLionel Sambuc 89*0a6a1f1dSLionel Sambuc ldx [%l6+%l1],%o3 90*0a6a1f1dSLionel Sambuc sll %l5,3,%l5 91*0a6a1f1dSLionel Sambuc xor %o2,%o0,%o0 92*0a6a1f1dSLionel Sambuc ldx [%i1+%l1],%o2 93*0a6a1f1dSLionel Sambuc srlx %o1,4,%o1 94*0a6a1f1dSLionel Sambuc xor %o4,%o0,%o0 95*0a6a1f1dSLionel Sambuc ldx [%l4+%l5],%o4 96*0a6a1f1dSLionel Sambuc sllx %o0,60,%o5 97*0a6a1f1dSLionel Sambuc xor %o3,%o1,%o1 98*0a6a1f1dSLionel Sambuc srlx %o0,4,%o0 99*0a6a1f1dSLionel Sambuc xor %o1,%o5,%o1 100*0a6a1f1dSLionel Sambuc xor %o2,%o0,%o0 101*0a6a1f1dSLionel Sambuc 102*0a6a1f1dSLionel Sambuc add %i2,16,%i2 103*0a6a1f1dSLionel Sambuc cmp %i2,%i3 104*0a6a1f1dSLionel Sambuc be,pn %icc,.Ldone 105*0a6a1f1dSLionel Sambuc and %o1,0xf,%l5 106*0a6a1f1dSLionel Sambuc 107*0a6a1f1dSLionel Sambuc ldx [%l6+%l0],%o3 108*0a6a1f1dSLionel Sambuc sll %l5,3,%l5 109*0a6a1f1dSLionel Sambuc xor %o4,%o0,%o0 110*0a6a1f1dSLionel Sambuc ldx [%i1+%l0],%o2 111*0a6a1f1dSLionel Sambuc srlx %o1,4,%o1 112*0a6a1f1dSLionel Sambuc ldx [%l4+%l5],%o4 113*0a6a1f1dSLionel Sambuc sllx %o0,60,%o5 114*0a6a1f1dSLionel Sambuc xor %o3,%o1,%o1 115*0a6a1f1dSLionel Sambuc ldub [%i2+15],%l1 116*0a6a1f1dSLionel Sambuc srlx %o0,4,%o0 117*0a6a1f1dSLionel Sambuc xor %o1,%o5,%o1 118*0a6a1f1dSLionel Sambuc xor %o2,%o0,%o0 119*0a6a1f1dSLionel Sambuc stx %o1,[%i0+8] 120*0a6a1f1dSLionel Sambuc xor %o4,%o0,%o0 121*0a6a1f1dSLionel Sambuc stx %o0,[%i0] 122*0a6a1f1dSLionel Sambuc srl %o1,8,%l3 123*0a6a1f1dSLionel Sambuc and %o1,0xff,%l2 124*0a6a1f1dSLionel Sambuc ba .Louter 125*0a6a1f1dSLionel Sambuc and %l3,0xff,%l3 126*0a6a1f1dSLionel Sambuc.align 32 127*0a6a1f1dSLionel Sambuc.Ldone: 128*0a6a1f1dSLionel Sambuc ldx [%l6+%l0],%o3 129*0a6a1f1dSLionel Sambuc sll %l5,3,%l5 130*0a6a1f1dSLionel Sambuc xor %o4,%o0,%o0 131*0a6a1f1dSLionel Sambuc ldx [%i1+%l0],%o2 132*0a6a1f1dSLionel Sambuc srlx %o1,4,%o1 133*0a6a1f1dSLionel Sambuc ldx [%l4+%l5],%o4 134*0a6a1f1dSLionel Sambuc sllx %o0,60,%o5 135*0a6a1f1dSLionel Sambuc xor %o3,%o1,%o1 136*0a6a1f1dSLionel Sambuc srlx %o0,4,%o0 137*0a6a1f1dSLionel Sambuc xor %o1,%o5,%o1 138*0a6a1f1dSLionel Sambuc xor %o2,%o0,%o0 139*0a6a1f1dSLionel Sambuc stx %o1,[%i0+8] 140*0a6a1f1dSLionel Sambuc xor %o4,%o0,%o0 141*0a6a1f1dSLionel Sambuc stx %o0,[%i0] 142*0a6a1f1dSLionel Sambuc 143*0a6a1f1dSLionel Sambuc ret 144*0a6a1f1dSLionel Sambuc restore 145*0a6a1f1dSLionel Sambuc.type gcm_ghash_4bit,#function 146*0a6a1f1dSLionel Sambuc.size gcm_ghash_4bit,(.-gcm_ghash_4bit) 147*0a6a1f1dSLionel Sambuc.globl gcm_gmult_4bit 148*0a6a1f1dSLionel Sambuc.align 32 149*0a6a1f1dSLionel Sambucgcm_gmult_4bit: 150*0a6a1f1dSLionel Sambuc save %sp,-112,%sp 151*0a6a1f1dSLionel Sambuc ldub [%i0+15],%l1 152*0a6a1f1dSLionel Sambuc add %i1,8,%l6 153*0a6a1f1dSLionel Sambuc 154*0a6a1f1dSLionel Sambuc1: call .+8 155*0a6a1f1dSLionel Sambuc add %o7,rem_4bit-1b,%l4 156*0a6a1f1dSLionel Sambuc 157*0a6a1f1dSLionel Sambuc and %l1,0xf0,%l0 158*0a6a1f1dSLionel Sambuc and %l1,0x0f,%l1 159*0a6a1f1dSLionel Sambuc sll %l1,4,%l1 160*0a6a1f1dSLionel Sambuc ldx [%l6+%l1],%o1 161*0a6a1f1dSLionel Sambuc ldx [%i1+%l1],%o0 162*0a6a1f1dSLionel Sambuc 163*0a6a1f1dSLionel Sambuc ldub [%i0+14],%l1 164*0a6a1f1dSLionel Sambuc 165*0a6a1f1dSLionel Sambuc ldx [%l6+%l0],%o3 166*0a6a1f1dSLionel Sambuc and %o1,0xf,%l5 167*0a6a1f1dSLionel Sambuc ldx [%i1+%l0],%o2 168*0a6a1f1dSLionel Sambuc sll %l5,3,%l5 169*0a6a1f1dSLionel Sambuc ldx [%l4+%l5],%o4 170*0a6a1f1dSLionel Sambuc srlx %o1,4,%o1 171*0a6a1f1dSLionel Sambuc mov 13,%l7 172*0a6a1f1dSLionel Sambuc sllx %o0,60,%o5 173*0a6a1f1dSLionel Sambuc xor %o3,%o1,%o1 174*0a6a1f1dSLionel Sambuc srlx %o0,4,%o0 175*0a6a1f1dSLionel Sambuc xor %o1,%o5,%o1 176*0a6a1f1dSLionel Sambuc 177*0a6a1f1dSLionel Sambuc and %o1,0xf,%l5 178*0a6a1f1dSLionel Sambuc and %l1,0xf0,%l0 179*0a6a1f1dSLionel Sambuc and %l1,0x0f,%l1 180*0a6a1f1dSLionel Sambuc ba .Lgmult_inner 181*0a6a1f1dSLionel Sambuc sll %l1,4,%l1 182*0a6a1f1dSLionel Sambuc.align 32 183*0a6a1f1dSLionel Sambuc.Lgmult_inner: 184*0a6a1f1dSLionel Sambuc ldx [%l6+%l1],%o3 185*0a6a1f1dSLionel Sambuc sll %l5,3,%l5 186*0a6a1f1dSLionel Sambuc xor %o2,%o0,%o0 187*0a6a1f1dSLionel Sambuc ldx [%i1+%l1],%o2 188*0a6a1f1dSLionel Sambuc srlx %o1,4,%o1 189*0a6a1f1dSLionel Sambuc xor %o4,%o0,%o0 190*0a6a1f1dSLionel Sambuc ldx [%l4+%l5],%o4 191*0a6a1f1dSLionel Sambuc sllx %o0,60,%o5 192*0a6a1f1dSLionel Sambuc xor %o3,%o1,%o1 193*0a6a1f1dSLionel Sambuc ldub [%i0+%l7],%l1 194*0a6a1f1dSLionel Sambuc srlx %o0,4,%o0 195*0a6a1f1dSLionel Sambuc xor %o1,%o5,%o1 196*0a6a1f1dSLionel Sambuc xor %o2,%o0,%o0 197*0a6a1f1dSLionel Sambuc and %o1,0xf,%l5 198*0a6a1f1dSLionel Sambuc 199*0a6a1f1dSLionel Sambuc ldx [%l6+%l0],%o3 200*0a6a1f1dSLionel Sambuc sll %l5,3,%l5 201*0a6a1f1dSLionel Sambuc xor %o4,%o0,%o0 202*0a6a1f1dSLionel Sambuc ldx [%i1+%l0],%o2 203*0a6a1f1dSLionel Sambuc srlx %o1,4,%o1 204*0a6a1f1dSLionel Sambuc ldx [%l4+%l5],%o4 205*0a6a1f1dSLionel Sambuc sllx %o0,60,%o5 206*0a6a1f1dSLionel Sambuc srlx %o0,4,%o0 207*0a6a1f1dSLionel Sambuc and %l1,0xf0,%l0 208*0a6a1f1dSLionel Sambuc addcc %l7,-1,%l7 209*0a6a1f1dSLionel Sambuc xor %o1,%o5,%o1 210*0a6a1f1dSLionel Sambuc and %l1,0x0f,%l1 211*0a6a1f1dSLionel Sambuc xor %o3,%o1,%o1 212*0a6a1f1dSLionel Sambuc sll %l1,4,%l1 213*0a6a1f1dSLionel Sambuc blu .Lgmult_inner 214*0a6a1f1dSLionel Sambuc and %o1,0xf,%l5 215*0a6a1f1dSLionel Sambuc 216*0a6a1f1dSLionel Sambuc ldx [%l6+%l1],%o3 217*0a6a1f1dSLionel Sambuc sll %l5,3,%l5 218*0a6a1f1dSLionel Sambuc xor %o2,%o0,%o0 219*0a6a1f1dSLionel Sambuc ldx [%i1+%l1],%o2 220*0a6a1f1dSLionel Sambuc srlx %o1,4,%o1 221*0a6a1f1dSLionel Sambuc xor %o4,%o0,%o0 222*0a6a1f1dSLionel Sambuc ldx [%l4+%l5],%o4 223*0a6a1f1dSLionel Sambuc sllx %o0,60,%o5 224*0a6a1f1dSLionel Sambuc xor %o3,%o1,%o1 225*0a6a1f1dSLionel Sambuc srlx %o0,4,%o0 226*0a6a1f1dSLionel Sambuc xor %o1,%o5,%o1 227*0a6a1f1dSLionel Sambuc xor %o2,%o0,%o0 228*0a6a1f1dSLionel Sambuc and %o1,0xf,%l5 229*0a6a1f1dSLionel Sambuc 230*0a6a1f1dSLionel Sambuc ldx [%l6+%l0],%o3 231*0a6a1f1dSLionel Sambuc sll %l5,3,%l5 232*0a6a1f1dSLionel Sambuc xor %o4,%o0,%o0 233*0a6a1f1dSLionel Sambuc ldx [%i1+%l0],%o2 234*0a6a1f1dSLionel Sambuc srlx %o1,4,%o1 235*0a6a1f1dSLionel Sambuc ldx [%l4+%l5],%o4 236*0a6a1f1dSLionel Sambuc sllx %o0,60,%o5 237*0a6a1f1dSLionel Sambuc xor %o3,%o1,%o1 238*0a6a1f1dSLionel Sambuc srlx %o0,4,%o0 239*0a6a1f1dSLionel Sambuc xor %o1,%o5,%o1 240*0a6a1f1dSLionel Sambuc xor %o2,%o0,%o0 241*0a6a1f1dSLionel Sambuc stx %o1,[%i0+8] 242*0a6a1f1dSLionel Sambuc xor %o4,%o0,%o0 243*0a6a1f1dSLionel Sambuc stx %o0,[%i0] 244*0a6a1f1dSLionel Sambuc 245*0a6a1f1dSLionel Sambuc ret 246*0a6a1f1dSLionel Sambuc restore 247*0a6a1f1dSLionel Sambuc.type gcm_gmult_4bit,#function 248*0a6a1f1dSLionel Sambuc.size gcm_gmult_4bit,(.-gcm_gmult_4bit) 249*0a6a1f1dSLionel Sambuc.asciz "GHASH for SPARCv9, CRYPTOGAMS by <appro@openssl.org>" 250*0a6a1f1dSLionel Sambuc.align 4 251