1 1.1 christos #include <sparc_arch.h> 2 1.1 christos 3 1.1 christos #ifdef __arch64__ 4 1.1 christos .register %g2,#scratch 5 1.1 christos .register %g3,#scratch 6 1.1 christos #endif 7 1.1 christos 8 1.1 christos #ifdef __PIC__ 9 1.1 christos SPARC_PIC_THUNK(%g1) 10 1.1 christos #endif 11 1.1 christos 12 1.1 christos .globl bn_GF2m_mul_2x2 13 1.1 christos .align 16 14 1.1 christos bn_GF2m_mul_2x2: 15 1.1 christos SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5) 16 1.1 christos ld [%g1+0],%g1 ! OPENSSL_sparcv9cap_P[0] 17 1.1 christos 18 1.1 christos andcc %g1, SPARCV9_VIS3, %g0 19 1.1 christos bz,pn %icc,.Lsoftware 20 1.1 christos nop 21 1.1 christos 22 1.1 christos sllx %o1, 32, %o1 23 1.1 christos sllx %o3, 32, %o3 24 1.1 christos or %o2, %o1, %o1 25 1.1 christos or %o4, %o3, %o3 26 1.1 christos .word 0x95b262ab ! xmulx %o1, %o3, %o2 27 1.1 christos .word 0x99b262cb ! xmulxhi %o1, %o3, %o4 28 1.1 christos srlx %o2, 32, %o1 ! 13 cycles later 29 1.1 christos st %o2, [%o0+0] 30 1.1 christos st %o1, [%o0+4] 31 1.1 christos srlx %o4, 32, %o3 32 1.1 christos st %o4, [%o0+8] 33 1.1 christos retl 34 1.1 christos st %o3, [%o0+12] 35 1.1 christos 36 1.1 christos .align 16 37 1.1 christos .Lsoftware: 38 1.1 christos save %sp,-STACK_FRAME-128,%sp 39 1.1 christos 40 1.1 christos sllx %i1,32,%g1 41 1.1 christos mov -1,%o4 42 1.1 christos sllx %i3,32,%o7 43 1.1 christos or %i2,%g1,%g1 44 1.1 christos srlx %o4,1,%o5 ! 0x7fff... 45 1.1 christos or %i4,%o7,%o7 46 1.1 christos srlx %o4,2,%o4 ! 0x3fff... 47 1.1 christos add %sp,STACK_BIAS+STACK_FRAME,%l0 48 1.1 christos 49 1.1 christos sllx %g1,2,%o2 50 1.1 christos mov %g1,%o0 51 1.1 christos sllx %g1,1,%o1 52 1.1 christos 53 1.1 christos srax %o2,63,%g5 ! broadcast 61st bit 54 1.1 christos and %o5,%o2,%o2 ! (a<<2)&0x7fff... 55 1.1 christos srlx %o5,2,%o5 56 1.1 christos srax %o1,63,%g4 ! broadcast 62nd bit 57 1.1 christos and %o4,%o1,%o1 ! (a<<1)&0x3fff... 58 1.1 christos srax %o0,63,%g1 ! broadcast 63rd bit 59 1.1 christos and %o5,%o0,%o0 ! (a<<0)&0x1fff... 60 1.1 christos 61 1.1 christos sllx %o0,3,%o3 62 1.1 christos and %o7,%g1,%g1 63 1.1 christos and %o7,%g4,%g4 64 1.1 christos and %o7,%g5,%g5 65 1.1 christos 66 1.1 christos stx %g0,[%l0+0*8] ! tab[0]=0 67 1.1 christos xor %o0,%o1,%o4 68 1.1 christos stx %o0,[%l0+1*8] ! tab[1]=a1 69 1.1 christos stx %o1,[%l0+2*8] ! tab[2]=a2 70 1.1 christos xor %o2,%o3,%o5 71 1.1 christos stx %o4,[%l0+3*8] ! tab[3]=a1^a2 72 1.1 christos xor %o2,%o0,%o0 73 1.1 christos 74 1.1 christos stx %o2,[%l0+4*8] ! tab[4]=a4 75 1.1 christos xor %o2,%o1,%o1 76 1.1 christos stx %o0,[%l0+5*8] ! tab[5]=a1^a4 77 1.1 christos xor %o2,%o4,%o4 78 1.1 christos stx %o1,[%l0+6*8] ! tab[6]=a2^a4 79 1.1 christos xor %o5,%o0,%o0 80 1.1 christos stx %o4,[%l0+7*8] ! tab[7]=a1^a2^a4 81 1.1 christos xor %o5,%o1,%o1 82 1.1 christos 83 1.1 christos stx %o3,[%l0+8*8] ! tab[8]=a8 84 1.1 christos xor %o5,%o4,%o4 85 1.1 christos stx %o0,[%l0+9*8] ! tab[9]=a1^a8 86 1.1 christos xor %o2,%o0,%o0 87 1.1 christos stx %o1,[%l0+10*8] ! tab[10]=a2^a8 88 1.1 christos xor %o2,%o1,%o1 89 1.1 christos stx %o4,[%l0+11*8] ! tab[11]=a1^a2^a8 90 1.1 christos 91 1.1 christos xor %o2,%o4,%o4 92 1.1 christos stx %o5,[%l0+12*8] ! tab[12]=a4^a8 93 1.1 christos srlx %g1,1,%o3 94 1.1 christos stx %o0,[%l0+13*8] ! tab[13]=a1^a4^a8 95 1.1 christos sllx %g1,63,%g1 96 1.1 christos stx %o1,[%l0+14*8] ! tab[14]=a2^a4^a8 97 1.1 christos srlx %g4,2,%g2 98 1.1 christos stx %o4,[%l0+15*8] ! tab[15]=a1^a2^a4^a8 99 1.1 christos 100 1.1 christos sllx %g4,62,%o0 101 1.1 christos sllx %o7,3,%g4 102 1.1 christos srlx %g5,3,%g3 103 1.1 christos and %g4,120,%g4 104 1.1 christos sllx %g5,61,%o1 105 1.1 christos ldx [%l0+%g4],%g4 106 1.1 christos srlx %o7,4-3,%g5 107 1.1 christos xor %g2,%o3,%o3 108 1.1 christos and %g5,120,%g5 109 1.1 christos xor %o0,%g1,%g1 110 1.1 christos ldx [%l0+%g5],%g5 111 1.1 christos xor %g3,%o3,%o3 112 1.1 christos 113 1.1 christos xor %g4,%g1,%g1 114 1.1 christos srlx %o7,8-3,%g4 115 1.1 christos xor %o1,%g1,%g1 116 1.1 christos and %g4,120,%g4 117 1.1 christos sllx %g5,4,%g2 118 1.1 christos ldx [%l0+%g4],%g4 119 1.1 christos srlx %g5,60,%g3 120 1.1 christos xor %g2,%g1,%g1 121 1.1 christos srlx %o7,12-3,%g5 122 1.1 christos xor %g3,%o3,%o3 123 1.1 christos and %g5,120,%g5 124 1.1 christos sllx %g4,8,%g3 125 1.1 christos ldx [%l0+%g5],%g5 126 1.1 christos srlx %g4,56,%g2 127 1.1 christos xor %g3,%g1,%g1 128 1.1 christos srlx %o7,16-3,%g4 129 1.1 christos xor %g2,%o3,%o3 130 1.1 christos and %g4,120,%g4 131 1.1 christos sllx %g5,12,%g2 132 1.1 christos ldx [%l0+%g4],%g4 133 1.1 christos srlx %g5,52,%g3 134 1.1 christos xor %g2,%g1,%g1 135 1.1 christos srlx %o7,20-3,%g5 136 1.1 christos xor %g3,%o3,%o3 137 1.1 christos and %g5,120,%g5 138 1.1 christos sllx %g4,16,%g3 139 1.1 christos ldx [%l0+%g5],%g5 140 1.1 christos srlx %g4,48,%g2 141 1.1 christos xor %g3,%g1,%g1 142 1.1 christos srlx %o7,24-3,%g4 143 1.1 christos xor %g2,%o3,%o3 144 1.1 christos and %g4,120,%g4 145 1.1 christos sllx %g5,20,%g2 146 1.1 christos ldx [%l0+%g4],%g4 147 1.1 christos srlx %g5,44,%g3 148 1.1 christos xor %g2,%g1,%g1 149 1.1 christos srlx %o7,28-3,%g5 150 1.1 christos xor %g3,%o3,%o3 151 1.1 christos and %g5,120,%g5 152 1.1 christos sllx %g4,24,%g3 153 1.1 christos ldx [%l0+%g5],%g5 154 1.1 christos srlx %g4,40,%g2 155 1.1 christos xor %g3,%g1,%g1 156 1.1 christos srlx %o7,32-3,%g4 157 1.1 christos xor %g2,%o3,%o3 158 1.1 christos and %g4,120,%g4 159 1.1 christos sllx %g5,28,%g2 160 1.1 christos ldx [%l0+%g4],%g4 161 1.1 christos srlx %g5,36,%g3 162 1.1 christos xor %g2,%g1,%g1 163 1.1 christos srlx %o7,36-3,%g5 164 1.1 christos xor %g3,%o3,%o3 165 1.1 christos and %g5,120,%g5 166 1.1 christos sllx %g4,32,%g3 167 1.1 christos ldx [%l0+%g5],%g5 168 1.1 christos srlx %g4,32,%g2 169 1.1 christos xor %g3,%g1,%g1 170 1.1 christos srlx %o7,40-3,%g4 171 1.1 christos xor %g2,%o3,%o3 172 1.1 christos and %g4,120,%g4 173 1.1 christos sllx %g5,36,%g2 174 1.1 christos ldx [%l0+%g4],%g4 175 1.1 christos srlx %g5,28,%g3 176 1.1 christos xor %g2,%g1,%g1 177 1.1 christos srlx %o7,44-3,%g5 178 1.1 christos xor %g3,%o3,%o3 179 1.1 christos and %g5,120,%g5 180 1.1 christos sllx %g4,40,%g3 181 1.1 christos ldx [%l0+%g5],%g5 182 1.1 christos srlx %g4,24,%g2 183 1.1 christos xor %g3,%g1,%g1 184 1.1 christos srlx %o7,48-3,%g4 185 1.1 christos xor %g2,%o3,%o3 186 1.1 christos and %g4,120,%g4 187 1.1 christos sllx %g5,44,%g2 188 1.1 christos ldx [%l0+%g4],%g4 189 1.1 christos srlx %g5,20,%g3 190 1.1 christos xor %g2,%g1,%g1 191 1.1 christos srlx %o7,52-3,%g5 192 1.1 christos xor %g3,%o3,%o3 193 1.1 christos and %g5,120,%g5 194 1.1 christos sllx %g4,48,%g3 195 1.1 christos ldx [%l0+%g5],%g5 196 1.1 christos srlx %g4,16,%g2 197 1.1 christos xor %g3,%g1,%g1 198 1.1 christos srlx %o7,56-3,%g4 199 1.1 christos xor %g2,%o3,%o3 200 1.1 christos and %g4,120,%g4 201 1.1 christos sllx %g5,52,%g2 202 1.1 christos ldx [%l0+%g4],%g4 203 1.1 christos srlx %g5,12,%g3 204 1.1 christos xor %g2,%g1,%g1 205 1.1 christos srlx %o7,60-3,%g5 206 1.1 christos xor %g3,%o3,%o3 207 1.1 christos and %g5,120,%g5 208 1.1 christos sllx %g4,56,%g3 209 1.1 christos ldx [%l0+%g5],%g5 210 1.1 christos srlx %g4,8,%g2 211 1.1 christos xor %g3,%g1,%g1 212 1.1 christos 213 1.1 christos sllx %g5,60,%g3 214 1.1 christos xor %g2,%o3,%o3 215 1.1 christos srlx %g5,4,%g2 216 1.1 christos xor %g3,%g1,%g1 217 1.1 christos xor %g2,%o3,%o3 218 1.1 christos 219 1.1 christos srlx %g1,32,%i1 220 1.1 christos st %g1,[%i0+0] 221 1.1 christos st %i1,[%i0+4] 222 1.1 christos srlx %o3,32,%i2 223 1.1 christos st %o3,[%i0+8] 224 1.1 christos st %i2,[%i0+12] 225 1.1 christos 226 1.1 christos ret 227 1.1 christos restore 228 1.1 christos .type bn_GF2m_mul_2x2,#function 229 1.1 christos .size bn_GF2m_mul_2x2,.-bn_GF2m_mul_2x2 230 1.1 christos .asciz "GF(2^m) Multiplication for SPARCv9, CRYPTOGAMS by <appro (at) openssl.org>" 231 1.1 christos .align 4 232