1 1.4 christos #ifndef __ASSEMBLER__ 2 1.4 christos # define __ASSEMBLER__ 1 3 1.4 christos #endif 4 1.4 christos #include "crypto/sparc_arch.h" 5 1.1 christos 6 1.1 christos #ifdef __arch64__ 7 1.1 christos .register %g2,#scratch 8 1.1 christos .register %g3,#scratch 9 1.1 christos # define STPTR stx 10 1.1 christos # define SIZE_T 8 11 1.1 christos #else 12 1.1 christos # define STPTR st 13 1.1 christos # define SIZE_T 4 14 1.1 christos #endif 15 1.1 christos #define LOCALS (STACK_BIAS+STACK_FRAME) 16 1.1 christos 17 1.1 christos .section ".text",#alloc,#execinstr 18 1.1 christos 19 1.1 christos #ifdef __PIC__ 20 1.1 christos SPARC_PIC_THUNK(%g1) 21 1.1 christos #endif 22 1.1 christos 23 1.1 christos .globl poly1305_init 24 1.1 christos .align 32 25 1.1 christos poly1305_init: 26 1.1 christos save %sp,-STACK_FRAME-16,%sp 27 1.1 christos nop 28 1.1 christos 29 1.1 christos SPARC_LOAD_ADDRESS(OPENSSL_sparcv9cap_P,%g1) 30 1.1 christos ld [%g1],%g1 31 1.1 christos 32 1.1 christos and %g1,SPARCV9_FMADD|SPARCV9_VIS3,%g1 33 1.1 christos cmp %g1,SPARCV9_FMADD 34 1.1 christos be .Lpoly1305_init_fma 35 1.1 christos nop 36 1.1 christos 37 1.1 christos stx %g0,[%i0+0] 38 1.1 christos stx %g0,[%i0+8] ! zero hash value 39 1.1 christos brz,pn %i1,.Lno_key 40 1.1 christos stx %g0,[%i0+16] 41 1.1 christos 42 1.1 christos and %i1,7,%i5 ! alignment factor 43 1.1 christos andn %i1,7,%i1 44 1.1 christos sll %i5,3,%i5 ! *8 45 1.1 christos neg %i5,%i4 46 1.1 christos 47 1.1 christos sethi %hi(0x0ffffffc),%o4 48 1.1 christos set 8,%o1 49 1.1 christos or %o4,%lo(0x0ffffffc),%o4 50 1.1 christos set 16,%o2 51 1.1 christos sllx %o4,32,%o5 52 1.1 christos or %o4,%o5,%o5 ! 0x0ffffffc0ffffffc 53 1.1 christos or %o5,3,%o4 ! 0x0ffffffc0fffffff 54 1.1 christos 55 1.1 christos ldxa [%i1+%g0]0x88,%o0 ! load little-endian key 56 1.1 christos brz,pt %i5,.Lkey_aligned 57 1.1 christos ldxa [%i1+%o1]0x88,%o1 58 1.1 christos 59 1.1 christos ldxa [%i1+%o2]0x88,%o2 60 1.1 christos srlx %o0,%i5,%o0 61 1.1 christos sllx %o1,%i4,%o7 62 1.1 christos srlx %o1,%i5,%o1 63 1.1 christos or %o7,%o0,%o0 64 1.1 christos sllx %o2,%i4,%o2 65 1.1 christos or %o2,%o1,%o1 66 1.1 christos 67 1.1 christos .Lkey_aligned: 68 1.1 christos and %o4,%o0,%o0 69 1.1 christos and %o5,%o1,%o1 70 1.1 christos stx %o0,[%i0+32+0] ! store key 71 1.1 christos stx %o1,[%i0+32+8] 72 1.1 christos 73 1.1 christos andcc %g1,SPARCV9_VIS3,%g0 74 1.1 christos be .Lno_key 75 1.1 christos nop 76 1.1 christos 77 1.1 christos 1: call .+8 78 1.1 christos add %o7,poly1305_blocks_vis3-1b,%o7 79 1.1 christos 80 1.1 christos add %o7,poly1305_emit-poly1305_blocks_vis3,%o5 81 1.1 christos STPTR %o7,[%i2] 82 1.1 christos STPTR %o5,[%i2+SIZE_T] 83 1.1 christos 84 1.1 christos ret 85 1.1 christos restore %g0,1,%o0 ! return 1 86 1.1 christos 87 1.1 christos .Lno_key: 88 1.1 christos ret 89 1.1 christos restore %g0,%g0,%o0 ! return 0 90 1.1 christos .type poly1305_init,#function 91 1.1 christos .size poly1305_init,.-poly1305_init 92 1.1 christos 93 1.1 christos .globl poly1305_blocks 94 1.1 christos .align 32 95 1.1 christos poly1305_blocks: 96 1.1 christos save %sp,-STACK_FRAME,%sp 97 1.1 christos srln %i2,4,%i2 98 1.1 christos 99 1.1 christos brz,pn %i2,.Lno_data 100 1.1 christos nop 101 1.1 christos 102 1.1 christos ld [%i0+32+0],%l1 ! load key 103 1.1 christos ld [%i0+32+4],%l0 104 1.1 christos ld [%i0+32+8],%l3 105 1.1 christos ld [%i0+32+12],%l2 106 1.1 christos 107 1.1 christos ld [%i0+0],%o1 ! load hash value 108 1.1 christos ld [%i0+4],%o0 109 1.1 christos ld [%i0+8],%o3 110 1.1 christos ld [%i0+12],%o2 111 1.1 christos ld [%i0+16],%l7 112 1.1 christos 113 1.1 christos and %i1,7,%i5 ! alignment factor 114 1.1 christos andn %i1,7,%i1 115 1.1 christos set 8,%g2 116 1.1 christos sll %i5,3,%i5 ! *8 117 1.1 christos set 16,%g3 118 1.1 christos neg %i5,%i4 119 1.1 christos 120 1.1 christos srl %l1,2,%l4 121 1.1 christos srl %l2,2,%l5 122 1.1 christos add %l1,%l4,%l4 123 1.1 christos srl %l3,2,%l6 124 1.1 christos add %l2,%l5,%l5 125 1.1 christos add %l3,%l6,%l6 126 1.1 christos 127 1.1 christos .Loop: 128 1.1 christos ldxa [%i1+%g0]0x88,%g1 ! load little-endian input 129 1.1 christos brz,pt %i5,.Linp_aligned 130 1.1 christos ldxa [%i1+%g2]0x88,%g2 131 1.1 christos 132 1.1 christos ldxa [%i1+%g3]0x88,%g3 133 1.1 christos srlx %g1,%i5,%g1 134 1.1 christos sllx %g2,%i4,%o5 135 1.1 christos srlx %g2,%i5,%g2 136 1.1 christos or %o5,%g1,%g1 137 1.1 christos sllx %g3,%i4,%g3 138 1.1 christos or %g3,%g2,%g2 139 1.1 christos 140 1.1 christos .Linp_aligned: 141 1.1 christos srlx %g1,32,%o4 142 1.1 christos addcc %g1,%o0,%o0 ! accumulate input 143 1.1 christos srlx %g2,32,%o5 144 1.1 christos addccc %o4,%o1,%o1 145 1.1 christos addccc %g2,%o2,%o2 146 1.1 christos addccc %o5,%o3,%o3 147 1.1 christos addc %i3,%l7,%l7 148 1.1 christos 149 1.1 christos umul %l0,%o0,%g1 150 1.1 christos umul %l1,%o0,%g2 151 1.1 christos umul %l2,%o0,%g3 152 1.1 christos umul %l3,%o0,%g4 153 1.1 christos sub %i2,1,%i2 154 1.1 christos add %i1,16,%i1 155 1.1 christos 156 1.1 christos umul %l6,%o1,%o4 157 1.1 christos umul %l0,%o1,%o5 158 1.1 christos umul %l1,%o1,%o7 159 1.1 christos add %o4,%g1,%g1 160 1.1 christos add %o5,%g2,%g2 161 1.1 christos umul %l2,%o1,%o4 162 1.1 christos add %o7,%g3,%g3 163 1.1 christos add %o4,%g4,%g4 164 1.1 christos 165 1.1 christos umul %l5,%o2,%o5 166 1.1 christos umul %l6,%o2,%o7 167 1.1 christos umul %l0,%o2,%o4 168 1.1 christos add %o5,%g1,%g1 169 1.1 christos add %o7,%g2,%g2 170 1.1 christos umul %l1,%o2,%o5 171 1.1 christos add %o4,%g3,%g3 172 1.1 christos add %o5,%g4,%g4 173 1.1 christos 174 1.1 christos umul %l4,%o3,%o7 175 1.1 christos umul %l5,%o3,%o4 176 1.1 christos umul %l6,%o3,%o5 177 1.1 christos add %o7,%g1,%g1 178 1.1 christos add %o4,%g2,%g2 179 1.1 christos umul %l0,%o3,%o7 180 1.1 christos add %o5,%g3,%g3 181 1.1 christos add %o7,%g4,%g4 182 1.1 christos 183 1.1 christos umul %l4,%l7,%o4 184 1.1 christos umul %l5,%l7,%o5 185 1.1 christos umul %l6,%l7,%o7 186 1.1 christos umul %l0,%l7,%l7 187 1.1 christos add %o4,%g2,%g2 188 1.1 christos add %o5,%g3,%g3 189 1.1 christos srlx %g1,32,%o1 190 1.1 christos add %o7,%g4,%g4 191 1.1 christos srlx %g2,32,%o2 192 1.1 christos 193 1.1 christos addcc %g2,%o1,%o1 194 1.1 christos srlx %g3,32,%o3 195 1.1 christos set 8,%g2 196 1.1 christos addccc %g3,%o2,%o2 197 1.1 christos srlx %g4,32,%o4 198 1.1 christos set 16,%g3 199 1.1 christos addccc %g4,%o3,%o3 200 1.1 christos addc %o4,%l7,%l7 201 1.1 christos 202 1.1 christos srl %l7,2,%o4 ! final reduction step 203 1.1 christos andn %l7,3,%o5 204 1.1 christos and %l7,3,%l7 205 1.1 christos add %o5,%o4,%o4 206 1.1 christos 207 1.1 christos addcc %o4,%g1,%o0 208 1.1 christos addccc %g0,%o1,%o1 209 1.1 christos addccc %g0,%o2,%o2 210 1.1 christos addccc %g0,%o3,%o3 211 1.1 christos brnz,pt %i2,.Loop 212 1.1 christos addc %g0,%l7,%l7 213 1.1 christos 214 1.1 christos st %o1,[%i0+0] ! store hash value 215 1.1 christos st %o0,[%i0+4] 216 1.1 christos st %o3,[%i0+8] 217 1.1 christos st %o2,[%i0+12] 218 1.1 christos st %l7,[%i0+16] 219 1.1 christos 220 1.1 christos .Lno_data: 221 1.1 christos ret 222 1.1 christos restore 223 1.1 christos .type poly1305_blocks,#function 224 1.1 christos .size poly1305_blocks,.-poly1305_blocks 225 1.1 christos .align 32 226 1.1 christos poly1305_blocks_vis3: 227 1.1 christos save %sp,-STACK_FRAME,%sp 228 1.1 christos srln %i2,4,%i2 229 1.1 christos 230 1.1 christos brz,pn %i2,.Lno_data 231 1.1 christos nop 232 1.1 christos 233 1.1 christos ldx [%i0+32+0],%o3 ! load key 234 1.1 christos ldx [%i0+32+8],%o4 235 1.1 christos 236 1.1 christos ldx [%i0+0],%o0 ! load hash value 237 1.1 christos ldx [%i0+8],%o1 238 1.1 christos ld [%i0+16],%o2 239 1.1 christos 240 1.1 christos and %i1,7,%i5 ! alignment factor 241 1.1 christos andn %i1,7,%i1 242 1.1 christos set 8,%l1 243 1.1 christos sll %i5,3,%i5 ! *8 244 1.1 christos set 16,%l2 245 1.1 christos neg %i5,%i4 246 1.1 christos 247 1.1 christos srlx %o4,2,%o5 248 1.1 christos b .Loop_vis3 249 1.1 christos add %o4,%o5,%o5 250 1.1 christos 251 1.1 christos .Loop_vis3: 252 1.1 christos ldxa [%i1+%g0]0x88,%g1 ! load little-endian input 253 1.1 christos brz,pt %i5,.Linp_aligned_vis3 254 1.1 christos ldxa [%i1+%l1]0x88,%g2 255 1.1 christos 256 1.1 christos ldxa [%i1+%l2]0x88,%g3 257 1.1 christos srlx %g1,%i5,%g1 258 1.1 christos sllx %g2,%i4,%o7 259 1.1 christos srlx %g2,%i5,%g2 260 1.1 christos or %o7,%g1,%g1 261 1.1 christos sllx %g3,%i4,%g3 262 1.1 christos or %g3,%g2,%g2 263 1.1 christos 264 1.1 christos .Linp_aligned_vis3: 265 1.1 christos addcc %g1,%o0,%o0 ! accumulate input 266 1.1 christos sub %i2,1,%i2 267 1.1 christos .word 0x93b08269 !addxccc %g2,%o1,%o1 268 1.1 christos add %i1,16,%i1 269 1.1 christos 270 1.1 christos mulx %o3,%o0,%g1 ! r0*h0 271 1.1 christos .word 0x95b6c22a !addxc %i3,%o2,%o2 272 1.1 christos .word 0x85b2c2c8 !umulxhi %o3,%o0,%g2 273 1.1 christos mulx %o5,%o1,%g4 ! s1*h1 274 1.1 christos .word 0x9fb342c9 !umulxhi %o5,%o1,%o7 275 1.1 christos addcc %g4,%g1,%g1 276 1.1 christos mulx %o4,%o0,%g4 ! r1*h0 277 1.1 christos .word 0x85b3c222 !addxc %o7,%g2,%g2 278 1.1 christos .word 0x87b302c8 !umulxhi %o4,%o0,%g3 279 1.1 christos addcc %g4,%g2,%g2 280 1.1 christos mulx %o3,%o1,%g4 ! r0*h1 281 1.1 christos .word 0x87b00223 !addxc %g0,%g3,%g3 282 1.1 christos .word 0x9fb2c2c9 !umulxhi %o3,%o1,%o7 283 1.1 christos addcc %g4,%g2,%g2 284 1.1 christos mulx %o5,%o2,%g4 ! s1*h2 285 1.1 christos .word 0x87b3c223 !addxc %o7,%g3,%g3 286 1.1 christos mulx %o3,%o2,%o7 ! r0*h2 287 1.1 christos addcc %g4,%g2,%g2 288 1.1 christos .word 0x87b3c223 !addxc %o7,%g3,%g3 289 1.1 christos 290 1.1 christos srlx %g3,2,%g4 ! final reduction step 291 1.1 christos andn %g3,3,%o7 292 1.1 christos and %g3,3,%o2 293 1.1 christos add %o7,%g4,%g4 294 1.1 christos 295 1.1 christos addcc %g4,%g1,%o0 296 1.1 christos .word 0x93b00262 !addxccc %g0,%g2,%o1 297 1.1 christos brnz,pt %i2,.Loop_vis3 298 1.1 christos .word 0x95b0022a !addxc %g0,%o2,%o2 299 1.1 christos 300 1.1 christos stx %o0,[%i0+0] ! store hash value 301 1.1 christos stx %o1,[%i0+8] 302 1.1 christos st %o2,[%i0+16] 303 1.1 christos 304 1.1 christos ret 305 1.1 christos restore 306 1.1 christos .type poly1305_blocks_vis3,#function 307 1.1 christos .size poly1305_blocks_vis3,.-poly1305_blocks_vis3 308 1.1 christos .globl poly1305_emit 309 1.1 christos .align 32 310 1.1 christos poly1305_emit: 311 1.1 christos save %sp,-STACK_FRAME,%sp 312 1.1 christos 313 1.1 christos ld [%i0+0],%o1 ! load hash value 314 1.1 christos ld [%i0+4],%o0 315 1.1 christos ld [%i0+8],%o3 316 1.1 christos ld [%i0+12],%o2 317 1.1 christos ld [%i0+16],%l7 318 1.1 christos 319 1.1 christos addcc %o0,5,%l0 ! compare to modulus 320 1.1 christos addccc %o1,0,%l1 321 1.1 christos addccc %o2,0,%l2 322 1.1 christos addccc %o3,0,%l3 323 1.1 christos addc %l7,0,%l7 324 1.1 christos andcc %l7,4,%g0 ! did it carry/borrow? 325 1.1 christos 326 1.1 christos movnz %icc,%l0,%o0 327 1.1 christos ld [%i2+0],%l0 ! load nonce 328 1.1 christos movnz %icc,%l1,%o1 329 1.1 christos ld [%i2+4],%l1 330 1.1 christos movnz %icc,%l2,%o2 331 1.1 christos ld [%i2+8],%l2 332 1.1 christos movnz %icc,%l3,%o3 333 1.1 christos ld [%i2+12],%l3 334 1.1 christos 335 1.1 christos addcc %l0,%o0,%o0 ! accumulate nonce 336 1.1 christos addccc %l1,%o1,%o1 337 1.1 christos addccc %l2,%o2,%o2 338 1.1 christos addc %l3,%o3,%o3 339 1.1 christos 340 1.1 christos srl %o0,8,%l0 341 1.1 christos stb %o0,[%i1+0] ! store little-endian result 342 1.1 christos srl %o0,16,%l1 343 1.1 christos stb %l0,[%i1+1] 344 1.1 christos srl %o0,24,%l2 345 1.1 christos stb %l1,[%i1+2] 346 1.1 christos stb %l2,[%i1+3] 347 1.1 christos 348 1.1 christos srl %o1,8,%l0 349 1.1 christos stb %o1,[%i1+4] 350 1.1 christos srl %o1,16,%l1 351 1.1 christos stb %l0,[%i1+5] 352 1.1 christos srl %o1,24,%l2 353 1.1 christos stb %l1,[%i1+6] 354 1.1 christos stb %l2,[%i1+7] 355 1.1 christos 356 1.1 christos srl %o2,8,%l0 357 1.1 christos stb %o2,[%i1+8] 358 1.1 christos srl %o2,16,%l1 359 1.1 christos stb %l0,[%i1+9] 360 1.1 christos srl %o2,24,%l2 361 1.1 christos stb %l1,[%i1+10] 362 1.1 christos stb %l2,[%i1+11] 363 1.1 christos 364 1.1 christos srl %o3,8,%l0 365 1.1 christos stb %o3,[%i1+12] 366 1.1 christos srl %o3,16,%l1 367 1.1 christos stb %l0,[%i1+13] 368 1.1 christos srl %o3,24,%l2 369 1.1 christos stb %l1,[%i1+14] 370 1.1 christos stb %l2,[%i1+15] 371 1.1 christos 372 1.1 christos ret 373 1.1 christos restore 374 1.1 christos .type poly1305_emit,#function 375 1.1 christos .size poly1305_emit,.-poly1305_emit 376 1.1 christos .align 32 377 1.1 christos poly1305_init_fma: 378 1.1 christos save %sp,-STACK_FRAME-16,%sp 379 1.1 christos nop 380 1.1 christos 381 1.1 christos .Lpoly1305_init_fma: 382 1.1 christos 1: call .+8 383 1.1 christos add %o7,.Lconsts_fma-1b,%o7 384 1.1 christos 385 1.1 christos ldd [%o7+8*0],%f16 ! load constants 386 1.1 christos ldd [%o7+8*1],%f18 387 1.1 christos ldd [%o7+8*2],%f20 388 1.1 christos ldd [%o7+8*3],%f22 389 1.1 christos ldd [%o7+8*5],%f26 390 1.1 christos 391 1.1 christos std %f16,[%i0+8*0] ! initial hash value, biased 0 392 1.1 christos std %f18,[%i0+8*1] 393 1.1 christos std %f20,[%i0+8*2] 394 1.1 christos std %f22,[%i0+8*3] 395 1.1 christos 396 1.1 christos brz,pn %i1,.Lno_key_fma 397 1.1 christos nop 398 1.1 christos 399 1.1 christos stx %fsr,[%sp+LOCALS] ! save original %fsr 400 1.1 christos ldx [%o7+8*6],%fsr ! load new %fsr 401 1.1 christos 402 1.1 christos std %f16,[%i0+8*4] ! key "template" 403 1.1 christos std %f18,[%i0+8*5] 404 1.1 christos std %f20,[%i0+8*6] 405 1.1 christos std %f22,[%i0+8*7] 406 1.1 christos 407 1.1 christos and %i1,7,%l2 408 1.1 christos andn %i1,7,%i1 ! align pointer 409 1.1 christos mov 8,%l0 410 1.1 christos sll %l2,3,%l2 411 1.1 christos mov 16,%l1 412 1.1 christos neg %l2,%l3 413 1.1 christos 414 1.1 christos ldxa [%i1+%g0]0x88,%o0 ! load little-endian key 415 1.1 christos ldxa [%i1+%l0]0x88,%o2 416 1.1 christos 417 1.1 christos brz %l2,.Lkey_aligned_fma 418 1.1 christos sethi %hi(0xf0000000),%l0 ! 0xf0000000 419 1.1 christos 420 1.1 christos ldxa [%i1+%l1]0x88,%o4 421 1.1 christos 422 1.1 christos srlx %o0,%l2,%o0 ! align data 423 1.1 christos sllx %o2,%l3,%o1 424 1.1 christos srlx %o2,%l2,%o2 425 1.1 christos or %o1,%o0,%o0 426 1.1 christos sllx %o4,%l3,%o3 427 1.1 christos or %o3,%o2,%o2 428 1.1 christos 429 1.1 christos .Lkey_aligned_fma: 430 1.1 christos or %l0,3,%l1 ! 0xf0000003 431 1.1 christos srlx %o0,32,%o1 432 1.1 christos andn %o0,%l0,%o0 ! &=0x0fffffff 433 1.1 christos andn %o1,%l1,%o1 ! &=0x0ffffffc 434 1.1 christos srlx %o2,32,%o3 435 1.1 christos andn %o2,%l1,%o2 436 1.1 christos andn %o3,%l1,%o3 437 1.1 christos 438 1.1 christos st %o0,[%i0+36] ! fill "template" 439 1.1 christos st %o1,[%i0+44] 440 1.1 christos st %o2,[%i0+52] 441 1.1 christos st %o3,[%i0+60] 442 1.1 christos 443 1.1 christos ldd [%i0+8*4],%f0 ! load [biased] key 444 1.1 christos ldd [%i0+8*5],%f4 445 1.1 christos ldd [%i0+8*6],%f8 446 1.1 christos ldd [%i0+8*7],%f12 447 1.1 christos 448 1.1 christos fsubd %f0,%f16, %f0 ! r0 449 1.1 christos ldd [%o7+8*7],%f16 ! more constants 450 1.1 christos fsubd %f4,%f18,%f4 ! r1 451 1.1 christos ldd [%o7+8*8],%f18 452 1.1 christos fsubd %f8,%f20,%f8 ! r2 453 1.1 christos ldd [%o7+8*9],%f20 454 1.1 christos fsubd %f12,%f22,%f12 ! r3 455 1.1 christos ldd [%o7+8*10],%f22 456 1.1 christos 457 1.1 christos fmuld %f26,%f4,%f52 ! s1 458 1.1 christos fmuld %f26,%f8,%f40 ! s2 459 1.1 christos fmuld %f26,%f12,%f44 ! s3 460 1.1 christos 461 1.1 christos faddd %f0,%f16, %f2 462 1.1 christos faddd %f4,%f18,%f6 463 1.1 christos faddd %f8,%f20,%f10 464 1.1 christos faddd %f12,%f22,%f14 465 1.1 christos 466 1.1 christos fsubd %f2,%f16, %f2 467 1.1 christos ldd [%o7+8*11],%f16 ! more constants 468 1.1 christos fsubd %f6,%f18,%f6 469 1.1 christos ldd [%o7+8*12],%f18 470 1.1 christos fsubd %f10,%f20,%f10 471 1.1 christos ldd [%o7+8*13],%f20 472 1.1 christos fsubd %f14,%f22,%f14 473 1.1 christos 474 1.1 christos fsubd %f0,%f2,%f0 475 1.1 christos std %f2,[%i0+8*5] ! r0hi 476 1.1 christos fsubd %f4,%f6,%f4 477 1.1 christos std %f6,[%i0+8*7] ! r1hi 478 1.1 christos fsubd %f8,%f10,%f8 479 1.1 christos std %f10,[%i0+8*9] ! r2hi 480 1.1 christos fsubd %f12,%f14,%f12 481 1.1 christos std %f14,[%i0+8*11] ! r3hi 482 1.1 christos 483 1.1 christos faddd %f52,%f16, %f54 484 1.1 christos faddd %f40,%f18,%f42 485 1.1 christos faddd %f44,%f20,%f46 486 1.1 christos 487 1.1 christos fsubd %f54,%f16, %f54 488 1.1 christos fsubd %f42,%f18,%f42 489 1.1 christos fsubd %f46,%f20,%f46 490 1.1 christos 491 1.1 christos fsubd %f52,%f54,%f52 492 1.1 christos fsubd %f40,%f42,%f40 493 1.1 christos fsubd %f44,%f46,%f44 494 1.1 christos 495 1.1 christos ldx [%sp+LOCALS],%fsr ! restore %fsr 496 1.1 christos 497 1.1 christos std %f0,[%i0+8*4] ! r0lo 498 1.1 christos std %f4,[%i0+8*6] ! r1lo 499 1.1 christos std %f8,[%i0+8*8] ! r2lo 500 1.1 christos std %f12,[%i0+8*10] ! r3lo 501 1.1 christos 502 1.1 christos std %f54,[%i0+8*13] 503 1.1 christos std %f42,[%i0+8*15] 504 1.1 christos std %f46,[%i0+8*17] 505 1.1 christos 506 1.1 christos std %f52,[%i0+8*12] 507 1.1 christos std %f40,[%i0+8*14] 508 1.1 christos std %f44,[%i0+8*16] 509 1.1 christos 510 1.1 christos add %o7,poly1305_blocks_fma-.Lconsts_fma,%o0 511 1.1 christos add %o7,poly1305_emit_fma-.Lconsts_fma,%o1 512 1.1 christos STPTR %o0,[%i2] 513 1.1 christos STPTR %o1,[%i2+SIZE_T] 514 1.1 christos 515 1.1 christos ret 516 1.1 christos restore %g0,1,%o0 ! return 1 517 1.1 christos 518 1.1 christos .Lno_key_fma: 519 1.1 christos ret 520 1.1 christos restore %g0,%g0,%o0 ! return 0 521 1.1 christos .type poly1305_init_fma,#function 522 1.1 christos .size poly1305_init_fma,.-poly1305_init_fma 523 1.1 christos 524 1.1 christos .align 32 525 1.1 christos poly1305_blocks_fma: 526 1.1 christos save %sp,-STACK_FRAME-48,%sp 527 1.1 christos srln %i2,4,%i2 528 1.1 christos 529 1.1 christos brz,pn %i2,.Labort 530 1.1 christos sub %i2,1,%i2 531 1.1 christos 532 1.1 christos 1: call .+8 533 1.1 christos add %o7,.Lconsts_fma-1b,%o7 534 1.1 christos 535 1.1 christos ldd [%o7+8*0],%f16 ! load constants 536 1.1 christos ldd [%o7+8*1],%f18 537 1.1 christos ldd [%o7+8*2],%f20 538 1.1 christos ldd [%o7+8*3],%f22 539 1.1 christos ldd [%o7+8*4],%f24 540 1.1 christos ldd [%o7+8*5],%f26 541 1.1 christos 542 1.1 christos ldd [%i0+8*0],%f0 ! load [biased] hash value 543 1.1 christos ldd [%i0+8*1],%f4 544 1.1 christos ldd [%i0+8*2],%f8 545 1.1 christos ldd [%i0+8*3],%f12 546 1.1 christos 547 1.1 christos std %f16,[%sp+LOCALS+8*0] ! input "template" 548 1.1 christos sethi %hi((1023+52+96)<<20),%o3 549 1.1 christos std %f18,[%sp+LOCALS+8*1] 550 1.1 christos or %i3,%o3,%o3 551 1.1 christos std %f20,[%sp+LOCALS+8*2] 552 1.1 christos st %o3,[%sp+LOCALS+8*3] 553 1.1 christos 554 1.1 christos and %i1,7,%l2 555 1.1 christos andn %i1,7,%i1 ! align pointer 556 1.1 christos mov 8,%l0 557 1.1 christos sll %l2,3,%l2 558 1.1 christos mov 16,%l1 559 1.1 christos neg %l2,%l3 560 1.1 christos 561 1.1 christos ldxa [%i1+%g0]0x88,%o0 ! load little-endian input 562 1.1 christos brz %l2,.Linp_aligned_fma 563 1.1 christos ldxa [%i1+%l0]0x88,%o2 564 1.1 christos 565 1.1 christos ldxa [%i1+%l1]0x88,%o4 566 1.1 christos add %i1,8,%i1 567 1.1 christos 568 1.1 christos srlx %o0,%l2,%o0 ! align data 569 1.1 christos sllx %o2,%l3,%o1 570 1.1 christos srlx %o2,%l2,%o2 571 1.1 christos or %o1,%o0,%o0 572 1.1 christos sllx %o4,%l3,%o3 573 1.1 christos srlx %o4,%l2,%o4 ! pre-shift 574 1.1 christos or %o3,%o2,%o2 575 1.1 christos 576 1.1 christos .Linp_aligned_fma: 577 1.1 christos srlx %o0,32,%o1 578 1.1 christos movrz %i2,0,%l1 579 1.1 christos srlx %o2,32,%o3 580 1.1 christos add %l1,%i1,%i1 ! conditional advance 581 1.1 christos 582 1.1 christos st %o0,[%sp+LOCALS+8*0+4] ! fill "template" 583 1.1 christos st %o1,[%sp+LOCALS+8*1+4] 584 1.1 christos st %o2,[%sp+LOCALS+8*2+4] 585 1.1 christos st %o3,[%sp+LOCALS+8*3+4] 586 1.1 christos 587 1.1 christos ldd [%i0+8*4],%f28 ! load key 588 1.1 christos ldd [%i0+8*5],%f30 589 1.1 christos ldd [%i0+8*6],%f32 590 1.1 christos ldd [%i0+8*7],%f34 591 1.1 christos ldd [%i0+8*8],%f36 592 1.1 christos ldd [%i0+8*9],%f38 593 1.1 christos ldd [%i0+8*10],%f48 594 1.1 christos ldd [%i0+8*11],%f50 595 1.1 christos ldd [%i0+8*12],%f52 596 1.1 christos ldd [%i0+8*13],%f54 597 1.1 christos ldd [%i0+8*14],%f40 598 1.1 christos ldd [%i0+8*15],%f42 599 1.1 christos ldd [%i0+8*16],%f44 600 1.1 christos ldd [%i0+8*17],%f46 601 1.1 christos 602 1.1 christos stx %fsr,[%sp+LOCALS+8*4] ! save original %fsr 603 1.1 christos ldx [%o7+8*6],%fsr ! load new %fsr 604 1.1 christos 605 1.1 christos subcc %i2,1,%i2 606 1.1 christos movrz %i2,0,%l1 607 1.1 christos 608 1.1 christos ldd [%sp+LOCALS+8*0],%f56 ! load biased input 609 1.1 christos ldd [%sp+LOCALS+8*1],%f58 610 1.1 christos ldd [%sp+LOCALS+8*2],%f60 611 1.1 christos ldd [%sp+LOCALS+8*3],%f62 612 1.1 christos 613 1.1 christos fsubd %f0,%f16, %f0 ! de-bias hash value 614 1.1 christos fsubd %f4,%f18,%f4 615 1.1 christos ldxa [%i1+%g0]0x88,%o0 ! modulo-scheduled input load 616 1.1 christos fsubd %f8,%f20,%f8 617 1.1 christos fsubd %f12,%f22,%f12 618 1.1 christos ldxa [%i1+%l0]0x88,%o2 619 1.1 christos 620 1.1 christos fsubd %f56,%f16, %f56 ! de-bias input 621 1.1 christos fsubd %f58,%f18,%f58 622 1.1 christos fsubd %f60,%f20,%f60 623 1.1 christos fsubd %f62,%f22,%f62 624 1.1 christos 625 1.1 christos brz %l2,.Linp_aligned_fma2 626 1.1 christos add %l1,%i1,%i1 ! conditional advance 627 1.1 christos 628 1.1 christos sllx %o0,%l3,%o1 ! align data 629 1.1 christos srlx %o0,%l2,%o3 630 1.1 christos or %o1,%o4,%o0 631 1.1 christos sllx %o2,%l3,%o1 632 1.1 christos srlx %o2,%l2,%o4 ! pre-shift 633 1.1 christos or %o3,%o1,%o2 634 1.1 christos .Linp_aligned_fma2: 635 1.1 christos srlx %o0,32,%o1 636 1.1 christos srlx %o2,32,%o3 637 1.1 christos 638 1.1 christos faddd %f0,%f56,%f56 ! accumulate input 639 1.1 christos stw %o0,[%sp+LOCALS+8*0+4] 640 1.1 christos faddd %f4,%f58,%f58 641 1.1 christos stw %o1,[%sp+LOCALS+8*1+4] 642 1.1 christos faddd %f8,%f60,%f60 643 1.1 christos stw %o2,[%sp+LOCALS+8*2+4] 644 1.1 christos faddd %f12,%f62,%f62 645 1.1 christos stw %o3,[%sp+LOCALS+8*3+4] 646 1.1 christos 647 1.1 christos b .Lentry_fma 648 1.1 christos nop 649 1.1 christos 650 1.1 christos .align 16 651 1.1 christos .Loop_fma: 652 1.1 christos ldxa [%i1+%g0]0x88,%o0 ! modulo-scheduled input load 653 1.1 christos ldxa [%i1+%l0]0x88,%o2 654 1.1 christos movrz %i2,0,%l1 655 1.1 christos 656 1.1 christos faddd %f52,%f0,%f0 ! accumulate input 657 1.1 christos faddd %f54,%f2,%f2 658 1.1 christos faddd %f62,%f8,%f8 659 1.1 christos faddd %f60,%f10,%f10 660 1.1 christos 661 1.1 christos brz,pn %l2,.Linp_aligned_fma3 662 1.1 christos add %l1,%i1,%i1 ! conditional advance 663 1.1 christos 664 1.1 christos sllx %o0,%l3,%o1 ! align data 665 1.1 christos srlx %o0,%l2,%o3 666 1.1 christos or %o1,%o4,%o0 667 1.1 christos sllx %o2,%l3,%o1 668 1.1 christos srlx %o2,%l2,%o4 ! pre-shift 669 1.1 christos or %o3,%o1,%o2 670 1.1 christos 671 1.1 christos .Linp_aligned_fma3: 672 1.1 christos !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! base 2^48 -> base 2^32 673 1.1 christos faddd %f20,%f4,%f52 674 1.1 christos srlx %o0,32,%o1 675 1.1 christos faddd %f20,%f6,%f54 676 1.1 christos srlx %o2,32,%o3 677 1.1 christos faddd %f24,%f12,%f60 678 1.1 christos st %o0,[%sp+LOCALS+8*0+4] ! fill "template" 679 1.1 christos faddd %f24,%f14,%f62 680 1.1 christos st %o1,[%sp+LOCALS+8*1+4] 681 1.1 christos faddd %f18,%f0,%f48 682 1.1 christos st %o2,[%sp+LOCALS+8*2+4] 683 1.1 christos faddd %f18,%f2,%f50 684 1.1 christos st %o3,[%sp+LOCALS+8*3+4] 685 1.1 christos faddd %f22,%f8,%f56 686 1.1 christos faddd %f22,%f10,%f58 687 1.1 christos 688 1.1 christos fsubd %f52,%f20,%f52 689 1.1 christos fsubd %f54,%f20,%f54 690 1.1 christos fsubd %f60,%f24,%f60 691 1.1 christos fsubd %f62,%f24,%f62 692 1.1 christos fsubd %f48,%f18,%f48 693 1.1 christos fsubd %f50,%f18,%f50 694 1.1 christos fsubd %f56,%f22,%f56 695 1.1 christos fsubd %f58,%f22,%f58 696 1.1 christos 697 1.1 christos fsubd %f4,%f52,%f4 698 1.1 christos fsubd %f6,%f54,%f6 699 1.1 christos fsubd %f12,%f60,%f12 700 1.1 christos fsubd %f14,%f62,%f14 701 1.1 christos fsubd %f8,%f56,%f8 702 1.1 christos fsubd %f10,%f58,%f10 703 1.1 christos fsubd %f0,%f48,%f0 704 1.1 christos fsubd %f2,%f50,%f2 705 1.1 christos 706 1.1 christos faddd %f4,%f48,%f4 707 1.1 christos faddd %f6,%f50,%f6 708 1.1 christos faddd %f12,%f56,%f12 709 1.1 christos faddd %f14,%f58,%f14 710 1.1 christos faddd %f8,%f52,%f8 711 1.1 christos faddd %f10,%f54,%f10 712 1.1 christos .word 0x81be805d !fmaddd %f26,%f60,%f0,%f0 713 1.1 christos .word 0x85be845f !fmaddd %f26,%f62,%f2,%f2 714 1.1 christos 715 1.1 christos faddd %f4,%f6,%f58 716 1.1 christos ldd [%i0+8*12],%f52 ! reload constants 717 1.1 christos faddd %f12,%f14,%f62 718 1.1 christos ldd [%i0+8*13],%f54 719 1.1 christos faddd %f8,%f10,%f60 720 1.1 christos ldd [%i0+8*10],%f48 721 1.1 christos faddd %f0,%f2,%f56 722 1.1 christos ldd [%i0+8*11],%f50 723 1.1 christos 724 1.1 christos .Lentry_fma: 725 1.1 christos fmuld %f58,%f44,%f0 726 1.1 christos fmuld %f58,%f46,%f2 727 1.1 christos fmuld %f58,%f32,%f8 728 1.1 christos fmuld %f58,%f34,%f10 729 1.1 christos fmuld %f58,%f28,%f4 730 1.1 christos fmuld %f58,%f30,%f6 731 1.1 christos fmuld %f58,%f36,%f12 732 1.1 christos fmuld %f58,%f38,%f14 733 1.1 christos 734 1.1 christos .word 0x81bfc055 !fmaddd %f62,%f52,%f0,%f0 735 1.1 christos .word 0x85bfc457 !fmaddd %f62,%f54,%f2,%f2 736 1.1 christos .word 0x91bfd04d !fmaddd %f62,%f44,%f8,%f8 737 1.1 christos .word 0x95bfd44f !fmaddd %f62,%f46,%f10,%f10 738 1.1 christos .word 0x89bfc849 !fmaddd %f62,%f40,%f4,%f4 739 1.1 christos .word 0x8dbfcc4b !fmaddd %f62,%f42,%f6,%f6 740 1.1 christos .word 0x99bfd85c !fmaddd %f62,%f28,%f12,%f12 741 1.1 christos .word 0x9dbfdc5e !fmaddd %f62,%f30,%f14,%f14 742 1.1 christos 743 1.1 christos .word 0x81bf4049 !fmaddd %f60,%f40,%f0,%f0 744 1.1 christos .word 0x85bf444b !fmaddd %f60,%f42,%f2,%f2 745 1.1 christos .word 0x91bf505c !fmaddd %f60,%f28,%f8,%f8 746 1.1 christos .word 0x95bf545e !fmaddd %f60,%f30,%f10,%f10 747 1.1 christos .word 0x89bf484d !fmaddd %f60,%f44,%f4,%f4 748 1.1 christos ldd [%sp+LOCALS+8*0],%f52 ! load [biased] input 749 1.1 christos .word 0x8dbf4c4f !fmaddd %f60,%f46,%f6,%f6 750 1.1 christos ldd [%sp+LOCALS+8*1],%f54 751 1.1 christos .word 0x99bf5841 !fmaddd %f60,%f32,%f12,%f12 752 1.1 christos ldd [%sp+LOCALS+8*2],%f62 753 1.1 christos .word 0x9dbf5c43 !fmaddd %f60,%f34,%f14,%f14 754 1.1 christos ldd [%sp+LOCALS+8*3],%f60 755 1.1 christos 756 1.1 christos .word 0x81be405c !fmaddd %f56,%f28,%f0,%f0 757 1.1 christos fsubd %f52,%f16, %f52 ! de-bias input 758 1.1 christos .word 0x85be445e !fmaddd %f56,%f30,%f2,%f2 759 1.1 christos fsubd %f54,%f18,%f54 760 1.1 christos .word 0x91be5045 !fmaddd %f56,%f36,%f8,%f8 761 1.1 christos fsubd %f62,%f20,%f62 762 1.1 christos .word 0x95be5447 !fmaddd %f56,%f38,%f10,%f10 763 1.1 christos fsubd %f60,%f22,%f60 764 1.1 christos .word 0x89be4841 !fmaddd %f56,%f32,%f4,%f4 765 1.1 christos .word 0x8dbe4c43 !fmaddd %f56,%f34,%f6,%f6 766 1.1 christos .word 0x99be5851 !fmaddd %f56,%f48,%f12,%f12 767 1.1 christos .word 0x9dbe5c53 !fmaddd %f56,%f50,%f14,%f14 768 1.1 christos 769 1.1 christos bcc SIZE_T_CC,.Loop_fma 770 1.1 christos subcc %i2,1,%i2 771 1.1 christos 772 1.1 christos !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! base 2^48 -> base 2^32 773 1.1 christos faddd %f0,%f18,%f48 774 1.1 christos faddd %f2,%f18,%f50 775 1.1 christos faddd %f8,%f22,%f56 776 1.1 christos faddd %f10,%f22,%f58 777 1.1 christos faddd %f4,%f20,%f52 778 1.1 christos faddd %f6,%f20,%f54 779 1.1 christos faddd %f12,%f24,%f60 780 1.1 christos faddd %f14,%f24,%f62 781 1.1 christos 782 1.1 christos fsubd %f48,%f18,%f48 783 1.1 christos fsubd %f50,%f18,%f50 784 1.1 christos fsubd %f56,%f22,%f56 785 1.1 christos fsubd %f58,%f22,%f58 786 1.1 christos fsubd %f52,%f20,%f52 787 1.1 christos fsubd %f54,%f20,%f54 788 1.1 christos fsubd %f60,%f24,%f60 789 1.1 christos fsubd %f62,%f24,%f62 790 1.1 christos 791 1.1 christos fsubd %f4,%f52,%f4 792 1.1 christos fsubd %f6,%f54,%f6 793 1.1 christos fsubd %f12,%f60,%f12 794 1.1 christos fsubd %f14,%f62,%f14 795 1.1 christos fsubd %f8,%f56,%f8 796 1.1 christos fsubd %f10,%f58,%f10 797 1.1 christos fsubd %f0,%f48,%f0 798 1.1 christos fsubd %f2,%f50,%f2 799 1.1 christos 800 1.1 christos faddd %f4,%f48,%f4 801 1.1 christos faddd %f6,%f50,%f6 802 1.1 christos faddd %f12,%f56,%f12 803 1.1 christos faddd %f14,%f58,%f14 804 1.1 christos faddd %f8,%f52,%f8 805 1.1 christos faddd %f10,%f54,%f10 806 1.1 christos .word 0x81be805d !fmaddd %f26,%f60,%f0,%f0 807 1.1 christos .word 0x85be845f !fmaddd %f26,%f62,%f2,%f2 808 1.1 christos 809 1.1 christos faddd %f4,%f6,%f58 810 1.1 christos faddd %f12,%f14,%f62 811 1.1 christos faddd %f8,%f10,%f60 812 1.1 christos faddd %f0,%f2,%f56 813 1.1 christos 814 1.1 christos faddd %f58,%f18,%f58 ! bias 815 1.1 christos faddd %f62,%f22,%f62 816 1.1 christos faddd %f60,%f20,%f60 817 1.1 christos faddd %f56,%f16, %f56 818 1.1 christos 819 1.1 christos ldx [%sp+LOCALS+8*4],%fsr ! restore saved %fsr 820 1.1 christos 821 1.1 christos std %f58,[%i0+8*1] ! store [biased] hash value 822 1.1 christos std %f62,[%i0+8*3] 823 1.1 christos std %f60,[%i0+8*2] 824 1.1 christos std %f56,[%i0+8*0] 825 1.1 christos 826 1.1 christos .Labort: 827 1.1 christos ret 828 1.1 christos restore 829 1.1 christos .type poly1305_blocks_fma,#function 830 1.1 christos .size poly1305_blocks_fma,.-poly1305_blocks_fma 831 1.1 christos .align 32 832 1.1 christos poly1305_emit_fma: 833 1.1 christos save %sp,-STACK_FRAME,%sp 834 1.1 christos 835 1.1 christos ld [%i0+8*0+0],%l5 ! load hash 836 1.1 christos ld [%i0+8*0+4],%l0 837 1.1 christos ld [%i0+8*1+0],%o0 838 1.1 christos ld [%i0+8*1+4],%l1 839 1.1 christos ld [%i0+8*2+0],%o1 840 1.1 christos ld [%i0+8*2+4],%l2 841 1.1 christos ld [%i0+8*3+0],%o2 842 1.1 christos ld [%i0+8*3+4],%l3 843 1.1 christos 844 1.1 christos sethi %hi(0xfff00000),%o3 845 1.1 christos andn %l5,%o3,%l5 ! mask exponent 846 1.1 christos andn %o0,%o3,%o0 847 1.1 christos andn %o1,%o3,%o1 848 1.1 christos andn %o2,%o3,%o2 ! can be partially reduced... 849 1.1 christos mov 3,%o3 850 1.1 christos 851 1.1 christos srl %o2,2,%i3 ! ... so reduce 852 1.1 christos and %o2,%o3,%l4 853 1.1 christos andn %o2,%o3,%o2 854 1.1 christos add %i3,%o2,%o2 855 1.1 christos 856 1.1 christos addcc %o2,%l0,%l0 857 1.1 christos addccc %l5,%l1,%l1 858 1.1 christos addccc %o0,%l2,%l2 859 1.1 christos addccc %o1,%l3,%l3 860 1.1 christos addc %g0,%l4,%l4 861 1.1 christos 862 1.1 christos addcc %l0,5,%l5 ! compare to modulus 863 1.1 christos addccc %l1,0,%o0 864 1.1 christos addccc %l2,0,%o1 865 1.1 christos addccc %l3,0,%o2 866 1.1 christos addc %l4,0,%o3 867 1.1 christos 868 1.1 christos srl %o3,2,%o3 ! did it carry/borrow? 869 1.1 christos neg %o3,%o3 870 1.1 christos sra %o3,31,%o3 ! mask 871 1.1 christos 872 1.1 christos andn %l0,%o3,%l0 873 1.1 christos and %l5,%o3,%l5 874 1.1 christos andn %l1,%o3,%l1 875 1.1 christos and %o0,%o3,%o0 876 1.1 christos or %l5,%l0,%l0 877 1.1 christos ld [%i2+0],%l5 ! load nonce 878 1.1 christos andn %l2,%o3,%l2 879 1.1 christos and %o1,%o3,%o1 880 1.1 christos or %o0,%l1,%l1 881 1.1 christos ld [%i2+4],%o0 882 1.1 christos andn %l3,%o3,%l3 883 1.1 christos and %o2,%o3,%o2 884 1.1 christos or %o1,%l2,%l2 885 1.1 christos ld [%i2+8],%o1 886 1.1 christos or %o2,%l3,%l3 887 1.1 christos ld [%i2+12],%o2 888 1.1 christos 889 1.1 christos addcc %l5,%l0,%l0 ! accumulate nonce 890 1.1 christos addccc %o0,%l1,%l1 891 1.1 christos addccc %o1,%l2,%l2 892 1.1 christos addc %o2,%l3,%l3 893 1.1 christos 894 1.1 christos stb %l0,[%i1+0] ! write little-endian result 895 1.1 christos srl %l0,8,%l0 896 1.1 christos stb %l1,[%i1+4] 897 1.1 christos srl %l1,8,%l1 898 1.1 christos stb %l2,[%i1+8] 899 1.1 christos srl %l2,8,%l2 900 1.1 christos stb %l3,[%i1+12] 901 1.1 christos srl %l3,8,%l3 902 1.1 christos 903 1.1 christos stb %l0,[%i1+1] 904 1.1 christos srl %l0,8,%l0 905 1.1 christos stb %l1,[%i1+5] 906 1.1 christos srl %l1,8,%l1 907 1.1 christos stb %l2,[%i1+9] 908 1.1 christos srl %l2,8,%l2 909 1.1 christos stb %l3,[%i1+13] 910 1.1 christos srl %l3,8,%l3 911 1.1 christos 912 1.1 christos stb %l0,[%i1+2] 913 1.1 christos srl %l0,8,%l0 914 1.1 christos stb %l1,[%i1+6] 915 1.1 christos srl %l1,8,%l1 916 1.1 christos stb %l2,[%i1+10] 917 1.1 christos srl %l2,8,%l2 918 1.1 christos stb %l3,[%i1+14] 919 1.1 christos srl %l3,8,%l3 920 1.1 christos 921 1.1 christos stb %l0,[%i1+3] 922 1.1 christos stb %l1,[%i1+7] 923 1.1 christos stb %l2,[%i1+11] 924 1.1 christos stb %l3,[%i1+15] 925 1.1 christos 926 1.1 christos ret 927 1.1 christos restore 928 1.1 christos .type poly1305_emit_fma,#function 929 1.1 christos .size poly1305_emit_fma,.-poly1305_emit_fma 930 1.1 christos .align 64 931 1.1 christos .Lconsts_fma: 932 1.1 christos .word 0x43300000,0x00000000 ! 2^(52+0) 933 1.1 christos .word 0x45300000,0x00000000 ! 2^(52+32) 934 1.1 christos .word 0x47300000,0x00000000 ! 2^(52+64) 935 1.1 christos .word 0x49300000,0x00000000 ! 2^(52+96) 936 1.1 christos .word 0x4b500000,0x00000000 ! 2^(52+130) 937 1.1 christos 938 1.1 christos .word 0x37f40000,0x00000000 ! 5/2^130 939 1.1 christos .word 0,1<<30 ! fsr: truncate, no exceptions 940 1.1 christos 941 1.1 christos .word 0x44300000,0x00000000 ! 2^(52+16+0) 942 1.1 christos .word 0x46300000,0x00000000 ! 2^(52+16+32) 943 1.1 christos .word 0x48300000,0x00000000 ! 2^(52+16+64) 944 1.1 christos .word 0x4a300000,0x00000000 ! 2^(52+16+96) 945 1.1 christos .word 0x3e300000,0x00000000 ! 2^(52+16+0-96) 946 1.1 christos .word 0x40300000,0x00000000 ! 2^(52+16+32-96) 947 1.1 christos .word 0x42300000,0x00000000 ! 2^(52+16+64-96) 948 1.1 christos .asciz "Poly1305 for SPARCv9/VIS3/FMA, CRYPTOGAMS by <appro (at) openssl.org>" 949 1.1 christos .align 4 950