1 #include "s390x_arch.h" 2 .text 3 .globl ChaCha20_ctr32 4 .type ChaCha20_ctr32,@function 5 .align 32 6 ChaCha20_ctr32: 7 larl %r1,OPENSSL_s390xcap_P 8 lghi %r0,64 9 ltr %r4,%r4 10 bzr %r14 11 lg %r1,S390X_STFLE+16(%r1) 12 clr %r4,%r0 13 jle .Lshort 14 tmhh %r1,16384 15 jnz .LChaCha20_ctr32_vx 16 .Lshort: 17 ahi %r4,-64 18 lhi %r1,-176 19 stm %r6,%r15,6*4(%r15) 20 slr %r2,%r3 21 la %r4,0(%r3,%r4) 22 larl %r7,.Lsigma 23 lgr %r0,%r15 24 la %r15,0(%r1,%r15) 25 st %r0,0(%r15) 26 lmg %r8,%r11,0(%r5) 27 lmg %r12,%r13,0(%r6) 28 lmg %r6,%r7,0(%r7) 29 la %r14,0(%r3) 30 st %r2,176+3*4(%r15) 31 st %r4,176+4*4(%r15) 32 stmg %r6,%r13,96(%r15) 33 srlg %r10,%r12,32 34 j .Loop_outer 35 .align 16 36 .Loop_outer: 37 lm %r0,%r7,96+4*0(%r15) 38 lm %r8,%r9,96+4*10(%r15) 39 lm %r11,%r13,96+4*13(%r15) 40 stm %r8,%r9,96+4*8+4*10(%r15) 41 lm %r8,%r9,96+4*8(%r15) 42 st %r10,96+4*12(%r15) 43 st %r14,176+2*4(%r15) 44 lhi %r14,10 45 j .Loop 46 .align 4 47 .Loop: 48 alr %r0,%r4 49 alr %r1,%r5 50 xr %r10,%r0 51 xr %r11,%r1 52 rll %r10,%r10,16 53 rll %r11,%r11,16 54 alr %r8,%r10 55 alr %r9,%r11 56 xr %r4,%r8 57 xr %r5,%r9 58 rll %r4,%r4,12 59 rll %r5,%r5,12 60 alr %r0,%r4 61 alr %r1,%r5 62 xr %r10,%r0 63 xr %r11,%r1 64 rll %r10,%r10,8 65 rll %r11,%r11,8 66 alr %r8,%r10 67 alr %r9,%r11 68 xr %r4,%r8 69 xr %r5,%r9 70 rll %r4,%r4,7 71 rll %r5,%r5,7 72 stm %r8,%r9,96+4*8+4*8(%r15) 73 lm %r8,%r9,96+4*8+4*10(%r15) 74 alr %r2,%r6 75 alr %r3,%r7 76 xr %r12,%r2 77 xr %r13,%r3 78 rll %r12,%r12,16 79 rll %r13,%r13,16 80 alr %r8,%r12 81 alr %r9,%r13 82 xr %r6,%r8 83 xr %r7,%r9 84 rll %r6,%r6,12 85 rll %r7,%r7,12 86 alr %r2,%r6 87 alr %r3,%r7 88 xr %r12,%r2 89 xr %r13,%r3 90 rll %r12,%r12,8 91 rll %r13,%r13,8 92 alr %r8,%r12 93 alr %r9,%r13 94 xr %r6,%r8 95 xr %r7,%r9 96 rll %r6,%r6,7 97 rll %r7,%r7,7 98 alr %r0,%r5 99 alr %r1,%r6 100 xr %r13,%r0 101 xr %r10,%r1 102 rll %r13,%r13,16 103 rll %r10,%r10,16 104 alr %r8,%r13 105 alr %r9,%r10 106 xr %r5,%r8 107 xr %r6,%r9 108 rll %r5,%r5,12 109 rll %r6,%r6,12 110 alr %r0,%r5 111 alr %r1,%r6 112 xr %r13,%r0 113 xr %r10,%r1 114 rll %r13,%r13,8 115 rll %r10,%r10,8 116 alr %r8,%r13 117 alr %r9,%r10 118 xr %r5,%r8 119 xr %r6,%r9 120 rll %r5,%r5,7 121 rll %r6,%r6,7 122 stm %r8,%r9,96+4*8+4*10(%r15) 123 lm %r8,%r9,96+4*8+4*8(%r15) 124 alr %r2,%r7 125 alr %r3,%r4 126 xr %r11,%r2 127 xr %r12,%r3 128 rll %r11,%r11,16 129 rll %r12,%r12,16 130 alr %r8,%r11 131 alr %r9,%r12 132 xr %r7,%r8 133 xr %r4,%r9 134 rll %r7,%r7,12 135 rll %r4,%r4,12 136 alr %r2,%r7 137 alr %r3,%r4 138 xr %r11,%r2 139 xr %r12,%r3 140 rll %r11,%r11,8 141 rll %r12,%r12,8 142 alr %r8,%r11 143 alr %r9,%r12 144 xr %r7,%r8 145 xr %r4,%r9 146 rll %r7,%r7,7 147 rll %r4,%r4,7 148 brct %r14,.Loop 149 l %r14,176+2*4(%r15) 150 stm %r8,%r9,96+4*8+4*8(%r15) 151 lm %r8,%r9,176+3*4(%r15) 152 al %r0,96+4*0(%r15) 153 al %r1,96+4*1(%r15) 154 al %r2,96+4*2(%r15) 155 al %r3,96+4*3(%r15) 156 al %r4,96+4*4(%r15) 157 al %r5,96+4*5(%r15) 158 al %r6,96+4*6(%r15) 159 al %r7,96+4*7(%r15) 160 lrvr %r0,%r0 161 lrvr %r1,%r1 162 lrvr %r2,%r2 163 lrvr %r3,%r3 164 lrvr %r4,%r4 165 lrvr %r5,%r5 166 lrvr %r6,%r6 167 lrvr %r7,%r7 168 al %r10,96+4*12(%r15) 169 al %r11,96+4*13(%r15) 170 al %r12,96+4*14(%r15) 171 al %r13,96+4*15(%r15) 172 lrvr %r10,%r10 173 lrvr %r11,%r11 174 lrvr %r12,%r12 175 lrvr %r13,%r13 176 la %r8,0(%r8,%r14) 177 clr %r14,%r9 178 jh .Ltail 179 x %r0,4*0(%r14) 180 x %r1,4*1(%r14) 181 st %r0,4*0(%r8) 182 x %r2,4*2(%r14) 183 st %r1,4*1(%r8) 184 x %r3,4*3(%r14) 185 st %r2,4*2(%r8) 186 x %r4,4*4(%r14) 187 st %r3,4*3(%r8) 188 lm %r0,%r3,96+4*8+4*8(%r15) 189 x %r5,4*5(%r14) 190 st %r4,4*4(%r8) 191 x %r6,4*6(%r14) 192 al %r0,96+4*8(%r15) 193 st %r5,4*5(%r8) 194 x %r7,4*7(%r14) 195 al %r1,96+4*9(%r15) 196 st %r6,4*6(%r8) 197 x %r10,4*12(%r14) 198 al %r2,96+4*10(%r15) 199 st %r7,4*7(%r8) 200 x %r11,4*13(%r14) 201 al %r3,96+4*11(%r15) 202 st %r10,4*12(%r8) 203 x %r12,4*14(%r14) 204 st %r11,4*13(%r8) 205 x %r13,4*15(%r14) 206 st %r12,4*14(%r8) 207 lrvr %r0,%r0 208 st %r13,4*15(%r8) 209 lrvr %r1,%r1 210 lrvr %r2,%r2 211 lrvr %r3,%r3 212 lhi %r10,1 213 x %r0,4*8(%r14) 214 al %r10,96+4*12(%r15) 215 x %r1,4*9(%r14) 216 st %r0,4*8(%r8) 217 x %r2,4*10(%r14) 218 st %r1,4*9(%r8) 219 x %r3,4*11(%r14) 220 st %r2,4*10(%r8) 221 st %r3,4*11(%r8) 222 clr %r14,%r9 223 la %r14,64(%r14) 224 jl .Loop_outer 225 .Ldone: 226 xgr %r0,%r0 227 xgr %r1,%r1 228 xgr %r2,%r2 229 xgr %r3,%r3 230 stmg %r0,%r3,96+4*4(%r15) 231 stmg %r0,%r3,96+4*12(%r15) 232 lm %r6,%r15,176+6*4(%r15) 233 br %r14 234 .align 16 235 .Ltail: 236 la %r9,64(%r9) 237 stm %r0,%r7,96+4*0(%r15) 238 slr %r9,%r14 239 lm %r0,%r3,96+4*8+4*8(%r15) 240 lhi %r6,0 241 stm %r10,%r13,96+4*12(%r15) 242 al %r0,96+4*8(%r15) 243 al %r1,96+4*9(%r15) 244 al %r2,96+4*10(%r15) 245 al %r3,96+4*11(%r15) 246 lrvr %r0,%r0 247 lrvr %r1,%r1 248 lrvr %r2,%r2 249 lrvr %r3,%r3 250 stm %r0,%r3,96+4*8(%r15) 251 .Loop_tail: 252 llgc %r4,0(%r6,%r14) 253 llgc %r5,96(%r6,%r15) 254 xr %r5,%r4 255 stc %r5,0(%r6,%r8) 256 la %r6,1(%r6) 257 brct %r9,.Loop_tail 258 j .Ldone 259 .size ChaCha20_ctr32,.-ChaCha20_ctr32 260 .align 32 261 ChaCha20_ctr32_4x: 262 .LChaCha20_ctr32_4x: 263 stm %r6,%r7,6*4(%r15) 264 std %f4,16*4+2*8(%r15) 265 std %f6,16*4+3*8(%r15) 266 lhi %r1,-160 267 lgr %r0,%r15 268 la %r15,0(%r1,%r15) 269 st %r0,0(%r15) 270 larl %r7,.Lsigma 271 lhi %r0,10 272 lhi %r1,0 273 .word 0xe700,0x7000,0x0806 # vl %v16,0(%r7) 274 .word 0xe710,0x5000,0x0806 # vl %v17,0(%r5) 275 .word 0xe720,0x5010,0x0806 # vl %v18,16(%r5) 276 .word 0xe730,0x6000,0x0806 # vl %v19,0(%r6) 277 .word 0xe7f0,0x7040,0x0806 # vl %v31,0x40(%r7) 278 .word 0xe7c0,0x7050,0x0806 # vl %v28,0x50(%r7) 279 .word 0xe7a3,000000,0x2c4d # vrep %v26,%v19,0,2 280 .word 0xe731,000000,0x2822 # vlvg %v19,%r1,0,2 281 .word 0xe7aa,0xc000,0x2ef3 # va %v26,%v26,%v28,2 282 .word 0xe703,0x7060,0x0036 # vlm %v0,%v3,0x60(%r7) 283 .word 0xe741,000000,0x244d # vrep %v4,%v17,0,2 284 .word 0xe751,0x0001,0x244d # vrep %v5,%v17,1,2 285 .word 0xe761,0x0002,0x244d # vrep %v6,%v17,2,2 286 .word 0xe771,0x0003,0x244d # vrep %v7,%v17,3,2 287 .word 0xe782,000000,0x244d # vrep %v8,%v18,0,2 288 .word 0xe792,0x0001,0x244d # vrep %v9,%v18,1,2 289 .word 0xe7a2,0x0002,0x244d # vrep %v10,%v18,2,2 290 .word 0xe7b2,0x0003,0x244d # vrep %v11,%v18,3,2 291 .word 0xe7ca,000000,0x0456 # vlr %v12,%v26 292 .word 0xe7d3,0x0001,0x244d # vrep %v13,%v19,1,2 293 .word 0xe7e3,0x0002,0x244d # vrep %v14,%v19,2,2 294 .word 0xe7f3,0x0003,0x244d # vrep %v15,%v19,3,2 295 .Loop_4x: 296 .word 0xe700,0x4000,0x20f3 # va %v0,%v0,%v4,2 297 .word 0xe7cc,000000,0x006d # vx %v12,%v12,%v0 298 .word 0xe7cc,0x0010,0x2033 # verll %v12,%v12,16,2 299 .word 0xe711,0x5000,0x20f3 # va %v1,%v1,%v5,2 300 .word 0xe7dd,0x1000,0x006d # vx %v13,%v13,%v1 301 .word 0xe7dd,0x0010,0x2033 # verll %v13,%v13,16,2 302 .word 0xe722,0x6000,0x20f3 # va %v2,%v2,%v6,2 303 .word 0xe7ee,0x2000,0x006d # vx %v14,%v14,%v2 304 .word 0xe7ee,0x0010,0x2033 # verll %v14,%v14,16,2 305 .word 0xe733,0x7000,0x20f3 # va %v3,%v3,%v7,2 306 .word 0xe7ff,0x3000,0x006d # vx %v15,%v15,%v3 307 .word 0xe7ff,0x0010,0x2033 # verll %v15,%v15,16,2 308 .word 0xe788,0xc000,0x20f3 # va %v8,%v8,%v12,2 309 .word 0xe744,0x8000,0x006d # vx %v4,%v4,%v8 310 .word 0xe744,0x000c,0x2033 # verll %v4,%v4,12,2 311 .word 0xe799,0xd000,0x20f3 # va %v9,%v9,%v13,2 312 .word 0xe755,0x9000,0x006d # vx %v5,%v5,%v9 313 .word 0xe755,0x000c,0x2033 # verll %v5,%v5,12,2 314 .word 0xe7aa,0xe000,0x20f3 # va %v10,%v10,%v14,2 315 .word 0xe766,0xa000,0x006d # vx %v6,%v6,%v10 316 .word 0xe766,0x000c,0x2033 # verll %v6,%v6,12,2 317 .word 0xe7bb,0xf000,0x20f3 # va %v11,%v11,%v15,2 318 .word 0xe777,0xb000,0x006d # vx %v7,%v7,%v11 319 .word 0xe777,0x000c,0x2033 # verll %v7,%v7,12,2 320 .word 0xe700,0x4000,0x20f3 # va %v0,%v0,%v4,2 321 .word 0xe7cc,000000,0x006d # vx %v12,%v12,%v0 322 .word 0xe7cc,0x0008,0x2033 # verll %v12,%v12,8,2 323 .word 0xe711,0x5000,0x20f3 # va %v1,%v1,%v5,2 324 .word 0xe7dd,0x1000,0x006d # vx %v13,%v13,%v1 325 .word 0xe7dd,0x0008,0x2033 # verll %v13,%v13,8,2 326 .word 0xe722,0x6000,0x20f3 # va %v2,%v2,%v6,2 327 .word 0xe7ee,0x2000,0x006d # vx %v14,%v14,%v2 328 .word 0xe7ee,0x0008,0x2033 # verll %v14,%v14,8,2 329 .word 0xe733,0x7000,0x20f3 # va %v3,%v3,%v7,2 330 .word 0xe7ff,0x3000,0x006d # vx %v15,%v15,%v3 331 .word 0xe7ff,0x0008,0x2033 # verll %v15,%v15,8,2 332 .word 0xe788,0xc000,0x20f3 # va %v8,%v8,%v12,2 333 .word 0xe744,0x8000,0x006d # vx %v4,%v4,%v8 334 .word 0xe744,0x0007,0x2033 # verll %v4,%v4,7,2 335 .word 0xe799,0xd000,0x20f3 # va %v9,%v9,%v13,2 336 .word 0xe755,0x9000,0x006d # vx %v5,%v5,%v9 337 .word 0xe755,0x0007,0x2033 # verll %v5,%v5,7,2 338 .word 0xe7aa,0xe000,0x20f3 # va %v10,%v10,%v14,2 339 .word 0xe766,0xa000,0x006d # vx %v6,%v6,%v10 340 .word 0xe766,0x0007,0x2033 # verll %v6,%v6,7,2 341 .word 0xe7bb,0xf000,0x20f3 # va %v11,%v11,%v15,2 342 .word 0xe777,0xb000,0x006d # vx %v7,%v7,%v11 343 .word 0xe777,0x0007,0x2033 # verll %v7,%v7,7,2 344 .word 0xe700,0x5000,0x20f3 # va %v0,%v0,%v5,2 345 .word 0xe7ff,000000,0x006d # vx %v15,%v15,%v0 346 .word 0xe7ff,0x0010,0x2033 # verll %v15,%v15,16,2 347 .word 0xe711,0x6000,0x20f3 # va %v1,%v1,%v6,2 348 .word 0xe7cc,0x1000,0x006d # vx %v12,%v12,%v1 349 .word 0xe7cc,0x0010,0x2033 # verll %v12,%v12,16,2 350 .word 0xe722,0x7000,0x20f3 # va %v2,%v2,%v7,2 351 .word 0xe7dd,0x2000,0x006d # vx %v13,%v13,%v2 352 .word 0xe7dd,0x0010,0x2033 # verll %v13,%v13,16,2 353 .word 0xe733,0x4000,0x20f3 # va %v3,%v3,%v4,2 354 .word 0xe7ee,0x3000,0x006d # vx %v14,%v14,%v3 355 .word 0xe7ee,0x0010,0x2033 # verll %v14,%v14,16,2 356 .word 0xe7aa,0xf000,0x20f3 # va %v10,%v10,%v15,2 357 .word 0xe755,0xa000,0x006d # vx %v5,%v5,%v10 358 .word 0xe755,0x000c,0x2033 # verll %v5,%v5,12,2 359 .word 0xe7bb,0xc000,0x20f3 # va %v11,%v11,%v12,2 360 .word 0xe766,0xb000,0x006d # vx %v6,%v6,%v11 361 .word 0xe766,0x000c,0x2033 # verll %v6,%v6,12,2 362 .word 0xe788,0xd000,0x20f3 # va %v8,%v8,%v13,2 363 .word 0xe777,0x8000,0x006d # vx %v7,%v7,%v8 364 .word 0xe777,0x000c,0x2033 # verll %v7,%v7,12,2 365 .word 0xe799,0xe000,0x20f3 # va %v9,%v9,%v14,2 366 .word 0xe744,0x9000,0x006d # vx %v4,%v4,%v9 367 .word 0xe744,0x000c,0x2033 # verll %v4,%v4,12,2 368 .word 0xe700,0x5000,0x20f3 # va %v0,%v0,%v5,2 369 .word 0xe7ff,000000,0x006d # vx %v15,%v15,%v0 370 .word 0xe7ff,0x0008,0x2033 # verll %v15,%v15,8,2 371 .word 0xe711,0x6000,0x20f3 # va %v1,%v1,%v6,2 372 .word 0xe7cc,0x1000,0x006d # vx %v12,%v12,%v1 373 .word 0xe7cc,0x0008,0x2033 # verll %v12,%v12,8,2 374 .word 0xe722,0x7000,0x20f3 # va %v2,%v2,%v7,2 375 .word 0xe7dd,0x2000,0x006d # vx %v13,%v13,%v2 376 .word 0xe7dd,0x0008,0x2033 # verll %v13,%v13,8,2 377 .word 0xe733,0x4000,0x20f3 # va %v3,%v3,%v4,2 378 .word 0xe7ee,0x3000,0x006d # vx %v14,%v14,%v3 379 .word 0xe7ee,0x0008,0x2033 # verll %v14,%v14,8,2 380 .word 0xe7aa,0xf000,0x20f3 # va %v10,%v10,%v15,2 381 .word 0xe755,0xa000,0x006d # vx %v5,%v5,%v10 382 .word 0xe755,0x0007,0x2033 # verll %v5,%v5,7,2 383 .word 0xe7bb,0xc000,0x20f3 # va %v11,%v11,%v12,2 384 .word 0xe766,0xb000,0x006d # vx %v6,%v6,%v11 385 .word 0xe766,0x0007,0x2033 # verll %v6,%v6,7,2 386 .word 0xe788,0xd000,0x20f3 # va %v8,%v8,%v13,2 387 .word 0xe777,0x8000,0x006d # vx %v7,%v7,%v8 388 .word 0xe777,0x0007,0x2033 # verll %v7,%v7,7,2 389 .word 0xe799,0xe000,0x20f3 # va %v9,%v9,%v14,2 390 .word 0xe744,0x9000,0x006d # vx %v4,%v4,%v9 391 .word 0xe744,0x0007,0x2033 # verll %v4,%v4,7,2 392 brct %r0,.Loop_4x 393 .word 0xe7cc,0xa000,0x22f3 # va %v12,%v12,%v26,2 394 .word 0xe7b0,0x1000,0x2861 # vmrh %v27,%v0,%v1,2 395 .word 0xe7c2,0x3000,0x2861 # vmrh %v28,%v2,%v3,2 396 .word 0xe7d0,0x1000,0x2860 # vmrl %v29,%v0,%v1,2 397 .word 0xe7e2,0x3000,0x2860 # vmrl %v30,%v2,%v3,2 398 .word 0xe70b,0xc000,0x0684 # vpdi %v0,%v27,%v28,0 399 .word 0xe71b,0xc000,0x5684 # vpdi %v1,%v27,%v28,5 400 .word 0xe72d,0xe000,0x0684 # vpdi %v2,%v29,%v30,0 401 .word 0xe73d,0xe000,0x5684 # vpdi %v3,%v29,%v30,5 402 .word 0xe7b4,0x5000,0x2861 # vmrh %v27,%v4,%v5,2 403 .word 0xe7c6,0x7000,0x2861 # vmrh %v28,%v6,%v7,2 404 .word 0xe7d4,0x5000,0x2860 # vmrl %v29,%v4,%v5,2 405 .word 0xe7e6,0x7000,0x2860 # vmrl %v30,%v6,%v7,2 406 .word 0xe74b,0xc000,0x0684 # vpdi %v4,%v27,%v28,0 407 .word 0xe75b,0xc000,0x5684 # vpdi %v5,%v27,%v28,5 408 .word 0xe76d,0xe000,0x0684 # vpdi %v6,%v29,%v30,0 409 .word 0xe77d,0xe000,0x5684 # vpdi %v7,%v29,%v30,5 410 .word 0xe7b8,0x9000,0x2861 # vmrh %v27,%v8,%v9,2 411 .word 0xe7ca,0xb000,0x2861 # vmrh %v28,%v10,%v11,2 412 .word 0xe7d8,0x9000,0x2860 # vmrl %v29,%v8,%v9,2 413 .word 0xe7ea,0xb000,0x2860 # vmrl %v30,%v10,%v11,2 414 .word 0xe78b,0xc000,0x0684 # vpdi %v8,%v27,%v28,0 415 .word 0xe79b,0xc000,0x5684 # vpdi %v9,%v27,%v28,5 416 .word 0xe7ad,0xe000,0x0684 # vpdi %v10,%v29,%v30,0 417 .word 0xe7bd,0xe000,0x5684 # vpdi %v11,%v29,%v30,5 418 .word 0xe7bc,0xd000,0x2861 # vmrh %v27,%v12,%v13,2 419 .word 0xe7ce,0xf000,0x2861 # vmrh %v28,%v14,%v15,2 420 .word 0xe7dc,0xd000,0x2860 # vmrl %v29,%v12,%v13,2 421 .word 0xe7ee,0xf000,0x2860 # vmrl %v30,%v14,%v15,2 422 .word 0xe7cb,0xc000,0x0684 # vpdi %v12,%v27,%v28,0 423 .word 0xe7db,0xc000,0x5684 # vpdi %v13,%v27,%v28,5 424 .word 0xe7ed,0xe000,0x0684 # vpdi %v14,%v29,%v30,0 425 .word 0xe7fd,0xe000,0x5684 # vpdi %v15,%v29,%v30,5 426 .word 0xe700,000000,0x22f3 # va %v0,%v0,%v16,2 427 .word 0xe744,0x1000,0x22f3 # va %v4,%v4,%v17,2 428 .word 0xe788,0x2000,0x22f3 # va %v8,%v8,%v18,2 429 .word 0xe7cc,0x3000,0x22f3 # va %v12,%v12,%v19,2 430 .word 0xe700,000000,0xf18c # vperm %v0,%v0,%v0,%v31 431 .word 0xe744,0x4000,0xf18c # vperm %v4,%v4,%v4,%v31 432 .word 0xe788,0x8000,0xf18c # vperm %v8,%v8,%v8,%v31 433 .word 0xe7cc,0xc000,0xf18c # vperm %v12,%v12,%v12,%v31 434 .word 0xe7be,0x3000,0x0c36 # vlm %v27,%v30,0(%r3) 435 .word 0xe7bb,000000,0x0c6d # vx %v27,%v27,%v0 436 .word 0xe7cc,0x4000,0x0c6d # vx %v28,%v28,%v4 437 .word 0xe7dd,0x8000,0x0c6d # vx %v29,%v29,%v8 438 .word 0xe7ee,0xc000,0x0c6d # vx %v30,%v30,%v12 439 .word 0xe7be,0x2000,0x0c3e # vstm %v27,%v30,0(%r2) 440 la %r3,0x40(%r3) 441 la %r2,0x40(%r2) 442 ahi %r4,-64 443 .word 0xe701,000000,0x22f3 # va %v0,%v1,%v16,2 444 .word 0xe745,0x1000,0x22f3 # va %v4,%v5,%v17,2 445 .word 0xe789,0x2000,0x22f3 # va %v8,%v9,%v18,2 446 .word 0xe7cd,0x3000,0x22f3 # va %v12,%v13,%v19,2 447 .word 0xe700,000000,0xf18c # vperm %v0,%v0,%v0,%v31 448 .word 0xe744,0x4000,0xf18c # vperm %v4,%v4,%v4,%v31 449 .word 0xe788,0x8000,0xf18c # vperm %v8,%v8,%v8,%v31 450 .word 0xe7cc,0xc000,0xf18c # vperm %v12,%v12,%v12,%v31 451 .word 0xc24f,000000,0x0040 # clfi %r4,64 452 jl .Ltail_4x 453 .word 0xe7be,0x3000,0x0c36 # vlm %v27,%v30,0(%r3) 454 .word 0xe7bb,000000,0x0c6d # vx %v27,%v27,%v0 455 .word 0xe7cc,0x4000,0x0c6d # vx %v28,%v28,%v4 456 .word 0xe7dd,0x8000,0x0c6d # vx %v29,%v29,%v8 457 .word 0xe7ee,0xc000,0x0c6d # vx %v30,%v30,%v12 458 .word 0xe7be,0x2000,0x0c3e # vstm %v27,%v30,0(%r2) 459 la %r3,0x40(%r3) 460 la %r2,0x40(%r2) 461 ahi %r4,-64 462 je .Ldone_4x 463 .word 0xe702,000000,0x22f3 # va %v0,%v2,%v16,2 464 .word 0xe746,0x1000,0x22f3 # va %v4,%v6,%v17,2 465 .word 0xe78a,0x2000,0x22f3 # va %v8,%v10,%v18,2 466 .word 0xe7ce,0x3000,0x22f3 # va %v12,%v14,%v19,2 467 .word 0xe700,000000,0xf18c # vperm %v0,%v0,%v0,%v31 468 .word 0xe744,0x4000,0xf18c # vperm %v4,%v4,%v4,%v31 469 .word 0xe788,0x8000,0xf18c # vperm %v8,%v8,%v8,%v31 470 .word 0xe7cc,0xc000,0xf18c # vperm %v12,%v12,%v12,%v31 471 .word 0xc24f,000000,0x0040 # clfi %r4,64 472 jl .Ltail_4x 473 .word 0xe7be,0x3000,0x0c36 # vlm %v27,%v30,0(%r3) 474 .word 0xe7bb,000000,0x0c6d # vx %v27,%v27,%v0 475 .word 0xe7cc,0x4000,0x0c6d # vx %v28,%v28,%v4 476 .word 0xe7dd,0x8000,0x0c6d # vx %v29,%v29,%v8 477 .word 0xe7ee,0xc000,0x0c6d # vx %v30,%v30,%v12 478 .word 0xe7be,0x2000,0x0c3e # vstm %v27,%v30,0(%r2) 479 la %r3,0x40(%r3) 480 la %r2,0x40(%r2) 481 ahi %r4,-64 482 je .Ldone_4x 483 .word 0xe703,000000,0x22f3 # va %v0,%v3,%v16,2 484 .word 0xe747,0x1000,0x22f3 # va %v4,%v7,%v17,2 485 .word 0xe78b,0x2000,0x22f3 # va %v8,%v11,%v18,2 486 .word 0xe7cf,0x3000,0x22f3 # va %v12,%v15,%v19,2 487 .word 0xe700,000000,0xf18c # vperm %v0,%v0,%v0,%v31 488 .word 0xe744,0x4000,0xf18c # vperm %v4,%v4,%v4,%v31 489 .word 0xe788,0x8000,0xf18c # vperm %v8,%v8,%v8,%v31 490 .word 0xe7cc,0xc000,0xf18c # vperm %v12,%v12,%v12,%v31 491 .word 0xc24f,000000,0x0040 # clfi %r4,64 492 jl .Ltail_4x 493 .word 0xe7be,0x3000,0x0c36 # vlm %v27,%v30,0(%r3) 494 .word 0xe7bb,000000,0x0c6d # vx %v27,%v27,%v0 495 .word 0xe7cc,0x4000,0x0c6d # vx %v28,%v28,%v4 496 .word 0xe7dd,0x8000,0x0c6d # vx %v29,%v29,%v8 497 .word 0xe7ee,0xc000,0x0c6d # vx %v30,%v30,%v12 498 .word 0xe7be,0x2000,0x0c3e # vstm %v27,%v30,0(%r2) 499 .Ldone_4x: 500 ld %f4,160+16*4+2*8(%r15) 501 ld %f6,160+16*4+3*8(%r15) 502 lm %r6,%r7,160+6*4(%r15) 503 la %r15,160(%r15) 504 br %r14 505 .align 16 506 .Ltail_4x: 507 .word 0xe7b4,000000,0x0856 # vlr %v27,%v4 508 ld %f4,160+16*4+2*8(%r15) 509 ld %f6,160+16*4+3*8(%r15) 510 .word 0xe700,0xf060,0x000e # vst %v0,96+0x00(%r15) 511 .word 0xe7b0,0xf070,0x080e # vst %v27,96+0x10(%r15) 512 .word 0xe780,0xf080,0x000e # vst %v8,96+0x20(%r15) 513 .word 0xe7c0,0xf090,0x000e # vst %v12,96+0x30(%r15) 514 lghi %r1,0 515 .Loop_tail_4x: 516 llgc %r5,0(%r1,%r3) 517 llgc %r6,96(%r1,%r15) 518 xr %r6,%r5 519 stc %r6,0(%r1,%r2) 520 la %r1,1(%r1) 521 brct %r4,.Loop_tail_4x 522 lm %r6,%r7,160+6*4(%r15) 523 la %r15,160(%r15) 524 br %r14 525 .size ChaCha20_ctr32_4x,.-ChaCha20_ctr32_4x 526 .globl ChaCha20_ctr32_vx 527 .align 32 528 ChaCha20_ctr32_vx: 529 .LChaCha20_ctr32_vx: 530 .word 0xc24f,000000,0x0100 # clfi %r4,256 531 jle .LChaCha20_ctr32_4x 532 stm %r6,%r7,6*4(%r15) 533 std %f4,16*4+2*8(%r15) 534 std %f6,16*4+3*8(%r15) 535 lhi %r1,-160 536 lgr %r0,%r15 537 la %r15,0(%r1,%r15) 538 st %r0,0(%r15) 539 larl %r7,.Lsigma 540 lhi %r0,10 541 .word 0xe789,0x5000,0x0c36 # vlm %v24,%v25,0(%r5) 542 .word 0xe7a0,0x6000,0x0806 # vl %v26,0(%r6) 543 .word 0xe7bf,0x7000,0x0c36 # vlm %v27,%v31,0(%r7) 544 .Loop_outer_vx: 545 .word 0xe70b,000000,0x0456 # vlr %v0,%v27 546 .word 0xe718,000000,0x0456 # vlr %v1,%v24 547 .word 0xe74b,000000,0x0456 # vlr %v4,%v27 548 .word 0xe758,000000,0x0456 # vlr %v5,%v24 549 .word 0xe78b,000000,0x0456 # vlr %v8,%v27 550 .word 0xe798,000000,0x0456 # vlr %v9,%v24 551 .word 0xe7cb,000000,0x0456 # vlr %v12,%v27 552 .word 0xe7d8,000000,0x0456 # vlr %v13,%v24 553 .word 0xe70b,000000,0x0c56 # vlr %v16,%v27 554 .word 0xe718,000000,0x0c56 # vlr %v17,%v24 555 .word 0xe74b,000000,0x0c56 # vlr %v20,%v27 556 .word 0xe758,000000,0x0c56 # vlr %v21,%v24 557 .word 0xe73a,000000,0x0456 # vlr %v3,%v26 558 .word 0xe77a,0xc000,0x26f3 # va %v7,%v26,%v28,2 559 .word 0xe7ba,0xd000,0x26f3 # va %v11,%v26,%v29,2 560 .word 0xe7fa,0xe000,0x26f3 # va %v15,%v26,%v30,2 561 .word 0xe73b,0xd000,0x2af3 # va %v19,%v11,%v29,2 562 .word 0xe77b,0xe000,0x2af3 # va %v23,%v11,%v30,2 563 .word 0xe729,000000,0x0456 # vlr %v2,%v25 564 .word 0xe769,000000,0x0456 # vlr %v6,%v25 565 .word 0xe7a9,000000,0x0456 # vlr %v10,%v25 566 .word 0xe7e9,000000,0x0456 # vlr %v14,%v25 567 .word 0xe729,000000,0x0c56 # vlr %v18,%v25 568 .word 0xe769,000000,0x0c56 # vlr %v22,%v25 569 .word 0xe7c7,000000,0x0856 # vlr %v28,%v7 570 .word 0xe7db,000000,0x0856 # vlr %v29,%v11 571 .word 0xe7ef,000000,0x0856 # vlr %v30,%v15 572 .align 4 573 .Loop_vx: 574 .word 0xe700,0x1000,0x20f3 # va %v0,%v0,%v1,2 575 .word 0xe744,0x5000,0x20f3 # va %v4,%v4,%v5,2 576 .word 0xe788,0x9000,0x20f3 # va %v8,%v8,%v9,2 577 .word 0xe7cc,0xd000,0x20f3 # va %v12,%v12,%v13,2 578 .word 0xe700,0x1000,0x2ef3 # va %v16,%v16,%v17,2 579 .word 0xe744,0x5000,0x2ef3 # va %v20,%v20,%v21,2 580 .word 0xe733,000000,0x006d # vx %v3,%v3,%v0 581 .word 0xe777,0x4000,0x006d # vx %v7,%v7,%v4 582 .word 0xe7bb,0x8000,0x006d # vx %v11,%v11,%v8 583 .word 0xe7ff,0xc000,0x006d # vx %v15,%v15,%v12 584 .word 0xe733,000000,0x0e6d # vx %v19,%v19,%v16 585 .word 0xe777,0x4000,0x0e6d # vx %v23,%v23,%v20 586 .word 0xe733,0x0010,0x2033 # verll %v3,%v3,16,2 587 .word 0xe777,0x0010,0x2033 # verll %v7,%v7,16,2 588 .word 0xe7bb,0x0010,0x2033 # verll %v11,%v11,16,2 589 .word 0xe7ff,0x0010,0x2033 # verll %v15,%v15,16,2 590 .word 0xe733,0x0010,0x2c33 # verll %v19,%v19,16,2 591 .word 0xe777,0x0010,0x2c33 # verll %v23,%v23,16,2 592 .word 0xe722,0x3000,0x20f3 # va %v2,%v2,%v3,2 593 .word 0xe766,0x7000,0x20f3 # va %v6,%v6,%v7,2 594 .word 0xe7aa,0xb000,0x20f3 # va %v10,%v10,%v11,2 595 .word 0xe7ee,0xf000,0x20f3 # va %v14,%v14,%v15,2 596 .word 0xe722,0x3000,0x2ef3 # va %v18,%v18,%v19,2 597 .word 0xe766,0x7000,0x2ef3 # va %v22,%v22,%v23,2 598 .word 0xe711,0x2000,0x006d # vx %v1,%v1,%v2 599 .word 0xe755,0x6000,0x006d # vx %v5,%v5,%v6 600 .word 0xe799,0xa000,0x006d # vx %v9,%v9,%v10 601 .word 0xe7dd,0xe000,0x006d # vx %v13,%v13,%v14 602 .word 0xe711,0x2000,0x0e6d # vx %v17,%v17,%v18 603 .word 0xe755,0x6000,0x0e6d # vx %v21,%v21,%v22 604 .word 0xe711,0x000c,0x2033 # verll %v1,%v1,12,2 605 .word 0xe755,0x000c,0x2033 # verll %v5,%v5,12,2 606 .word 0xe799,0x000c,0x2033 # verll %v9,%v9,12,2 607 .word 0xe7dd,0x000c,0x2033 # verll %v13,%v13,12,2 608 .word 0xe711,0x000c,0x2c33 # verll %v17,%v17,12,2 609 .word 0xe755,0x000c,0x2c33 # verll %v21,%v21,12,2 610 .word 0xe700,0x1000,0x20f3 # va %v0,%v0,%v1,2 611 .word 0xe744,0x5000,0x20f3 # va %v4,%v4,%v5,2 612 .word 0xe788,0x9000,0x20f3 # va %v8,%v8,%v9,2 613 .word 0xe7cc,0xd000,0x20f3 # va %v12,%v12,%v13,2 614 .word 0xe700,0x1000,0x2ef3 # va %v16,%v16,%v17,2 615 .word 0xe744,0x5000,0x2ef3 # va %v20,%v20,%v21,2 616 .word 0xe733,000000,0x006d # vx %v3,%v3,%v0 617 .word 0xe777,0x4000,0x006d # vx %v7,%v7,%v4 618 .word 0xe7bb,0x8000,0x006d # vx %v11,%v11,%v8 619 .word 0xe7ff,0xc000,0x006d # vx %v15,%v15,%v12 620 .word 0xe733,000000,0x0e6d # vx %v19,%v19,%v16 621 .word 0xe777,0x4000,0x0e6d # vx %v23,%v23,%v20 622 .word 0xe733,0x0008,0x2033 # verll %v3,%v3,8,2 623 .word 0xe777,0x0008,0x2033 # verll %v7,%v7,8,2 624 .word 0xe7bb,0x0008,0x2033 # verll %v11,%v11,8,2 625 .word 0xe7ff,0x0008,0x2033 # verll %v15,%v15,8,2 626 .word 0xe733,0x0008,0x2c33 # verll %v19,%v19,8,2 627 .word 0xe777,0x0008,0x2c33 # verll %v23,%v23,8,2 628 .word 0xe722,0x3000,0x20f3 # va %v2,%v2,%v3,2 629 .word 0xe766,0x7000,0x20f3 # va %v6,%v6,%v7,2 630 .word 0xe7aa,0xb000,0x20f3 # va %v10,%v10,%v11,2 631 .word 0xe7ee,0xf000,0x20f3 # va %v14,%v14,%v15,2 632 .word 0xe722,0x3000,0x2ef3 # va %v18,%v18,%v19,2 633 .word 0xe766,0x7000,0x2ef3 # va %v22,%v22,%v23,2 634 .word 0xe711,0x2000,0x006d # vx %v1,%v1,%v2 635 .word 0xe755,0x6000,0x006d # vx %v5,%v5,%v6 636 .word 0xe799,0xa000,0x006d # vx %v9,%v9,%v10 637 .word 0xe7dd,0xe000,0x006d # vx %v13,%v13,%v14 638 .word 0xe711,0x2000,0x0e6d # vx %v17,%v17,%v18 639 .word 0xe755,0x6000,0x0e6d # vx %v21,%v21,%v22 640 .word 0xe711,0x0007,0x2033 # verll %v1,%v1,7,2 641 .word 0xe755,0x0007,0x2033 # verll %v5,%v5,7,2 642 .word 0xe799,0x0007,0x2033 # verll %v9,%v9,7,2 643 .word 0xe7dd,0x0007,0x2033 # verll %v13,%v13,7,2 644 .word 0xe711,0x0007,0x2c33 # verll %v17,%v17,7,2 645 .word 0xe755,0x0007,0x2c33 # verll %v21,%v21,7,2 646 .word 0xe722,0x2008,0x0077 # vsldb %v2,%v2,%v2,8 647 .word 0xe766,0x6008,0x0077 # vsldb %v6,%v6,%v6,8 648 .word 0xe7aa,0xa008,0x0077 # vsldb %v10,%v10,%v10,8 649 .word 0xe7ee,0xe008,0x0077 # vsldb %v14,%v14,%v14,8 650 .word 0xe722,0x2008,0x0e77 # vsldb %v18,%v18,%v18,8 651 .word 0xe766,0x6008,0x0e77 # vsldb %v22,%v22,%v22,8 652 .word 0xe711,0x1004,0x0077 # vsldb %v1,%v1,%v1,4 653 .word 0xe755,0x5004,0x0077 # vsldb %v5,%v5,%v5,4 654 .word 0xe799,0x9004,0x0077 # vsldb %v9,%v9,%v9,4 655 .word 0xe7dd,0xd004,0x0077 # vsldb %v13,%v13,%v13,4 656 .word 0xe711,0x1004,0x0e77 # vsldb %v17,%v17,%v17,4 657 .word 0xe755,0x5004,0x0e77 # vsldb %v21,%v21,%v21,4 658 .word 0xe733,0x300c,0x0077 # vsldb %v3,%v3,%v3,12 659 .word 0xe777,0x700c,0x0077 # vsldb %v7,%v7,%v7,12 660 .word 0xe7bb,0xb00c,0x0077 # vsldb %v11,%v11,%v11,12 661 .word 0xe7ff,0xf00c,0x0077 # vsldb %v15,%v15,%v15,12 662 .word 0xe733,0x300c,0x0e77 # vsldb %v19,%v19,%v19,12 663 .word 0xe777,0x700c,0x0e77 # vsldb %v23,%v23,%v23,12 664 .word 0xe700,0x1000,0x20f3 # va %v0,%v0,%v1,2 665 .word 0xe744,0x5000,0x20f3 # va %v4,%v4,%v5,2 666 .word 0xe788,0x9000,0x20f3 # va %v8,%v8,%v9,2 667 .word 0xe7cc,0xd000,0x20f3 # va %v12,%v12,%v13,2 668 .word 0xe700,0x1000,0x2ef3 # va %v16,%v16,%v17,2 669 .word 0xe744,0x5000,0x2ef3 # va %v20,%v20,%v21,2 670 .word 0xe733,000000,0x006d # vx %v3,%v3,%v0 671 .word 0xe777,0x4000,0x006d # vx %v7,%v7,%v4 672 .word 0xe7bb,0x8000,0x006d # vx %v11,%v11,%v8 673 .word 0xe7ff,0xc000,0x006d # vx %v15,%v15,%v12 674 .word 0xe733,000000,0x0e6d # vx %v19,%v19,%v16 675 .word 0xe777,0x4000,0x0e6d # vx %v23,%v23,%v20 676 .word 0xe733,0x0010,0x2033 # verll %v3,%v3,16,2 677 .word 0xe777,0x0010,0x2033 # verll %v7,%v7,16,2 678 .word 0xe7bb,0x0010,0x2033 # verll %v11,%v11,16,2 679 .word 0xe7ff,0x0010,0x2033 # verll %v15,%v15,16,2 680 .word 0xe733,0x0010,0x2c33 # verll %v19,%v19,16,2 681 .word 0xe777,0x0010,0x2c33 # verll %v23,%v23,16,2 682 .word 0xe722,0x3000,0x20f3 # va %v2,%v2,%v3,2 683 .word 0xe766,0x7000,0x20f3 # va %v6,%v6,%v7,2 684 .word 0xe7aa,0xb000,0x20f3 # va %v10,%v10,%v11,2 685 .word 0xe7ee,0xf000,0x20f3 # va %v14,%v14,%v15,2 686 .word 0xe722,0x3000,0x2ef3 # va %v18,%v18,%v19,2 687 .word 0xe766,0x7000,0x2ef3 # va %v22,%v22,%v23,2 688 .word 0xe711,0x2000,0x006d # vx %v1,%v1,%v2 689 .word 0xe755,0x6000,0x006d # vx %v5,%v5,%v6 690 .word 0xe799,0xa000,0x006d # vx %v9,%v9,%v10 691 .word 0xe7dd,0xe000,0x006d # vx %v13,%v13,%v14 692 .word 0xe711,0x2000,0x0e6d # vx %v17,%v17,%v18 693 .word 0xe755,0x6000,0x0e6d # vx %v21,%v21,%v22 694 .word 0xe711,0x000c,0x2033 # verll %v1,%v1,12,2 695 .word 0xe755,0x000c,0x2033 # verll %v5,%v5,12,2 696 .word 0xe799,0x000c,0x2033 # verll %v9,%v9,12,2 697 .word 0xe7dd,0x000c,0x2033 # verll %v13,%v13,12,2 698 .word 0xe711,0x000c,0x2c33 # verll %v17,%v17,12,2 699 .word 0xe755,0x000c,0x2c33 # verll %v21,%v21,12,2 700 .word 0xe700,0x1000,0x20f3 # va %v0,%v0,%v1,2 701 .word 0xe744,0x5000,0x20f3 # va %v4,%v4,%v5,2 702 .word 0xe788,0x9000,0x20f3 # va %v8,%v8,%v9,2 703 .word 0xe7cc,0xd000,0x20f3 # va %v12,%v12,%v13,2 704 .word 0xe700,0x1000,0x2ef3 # va %v16,%v16,%v17,2 705 .word 0xe744,0x5000,0x2ef3 # va %v20,%v20,%v21,2 706 .word 0xe733,000000,0x006d # vx %v3,%v3,%v0 707 .word 0xe777,0x4000,0x006d # vx %v7,%v7,%v4 708 .word 0xe7bb,0x8000,0x006d # vx %v11,%v11,%v8 709 .word 0xe7ff,0xc000,0x006d # vx %v15,%v15,%v12 710 .word 0xe733,000000,0x0e6d # vx %v19,%v19,%v16 711 .word 0xe777,0x4000,0x0e6d # vx %v23,%v23,%v20 712 .word 0xe733,0x0008,0x2033 # verll %v3,%v3,8,2 713 .word 0xe777,0x0008,0x2033 # verll %v7,%v7,8,2 714 .word 0xe7bb,0x0008,0x2033 # verll %v11,%v11,8,2 715 .word 0xe7ff,0x0008,0x2033 # verll %v15,%v15,8,2 716 .word 0xe733,0x0008,0x2c33 # verll %v19,%v19,8,2 717 .word 0xe777,0x0008,0x2c33 # verll %v23,%v23,8,2 718 .word 0xe722,0x3000,0x20f3 # va %v2,%v2,%v3,2 719 .word 0xe766,0x7000,0x20f3 # va %v6,%v6,%v7,2 720 .word 0xe7aa,0xb000,0x20f3 # va %v10,%v10,%v11,2 721 .word 0xe7ee,0xf000,0x20f3 # va %v14,%v14,%v15,2 722 .word 0xe722,0x3000,0x2ef3 # va %v18,%v18,%v19,2 723 .word 0xe766,0x7000,0x2ef3 # va %v22,%v22,%v23,2 724 .word 0xe711,0x2000,0x006d # vx %v1,%v1,%v2 725 .word 0xe755,0x6000,0x006d # vx %v5,%v5,%v6 726 .word 0xe799,0xa000,0x006d # vx %v9,%v9,%v10 727 .word 0xe7dd,0xe000,0x006d # vx %v13,%v13,%v14 728 .word 0xe711,0x2000,0x0e6d # vx %v17,%v17,%v18 729 .word 0xe755,0x6000,0x0e6d # vx %v21,%v21,%v22 730 .word 0xe711,0x0007,0x2033 # verll %v1,%v1,7,2 731 .word 0xe755,0x0007,0x2033 # verll %v5,%v5,7,2 732 .word 0xe799,0x0007,0x2033 # verll %v9,%v9,7,2 733 .word 0xe7dd,0x0007,0x2033 # verll %v13,%v13,7,2 734 .word 0xe711,0x0007,0x2c33 # verll %v17,%v17,7,2 735 .word 0xe755,0x0007,0x2c33 # verll %v21,%v21,7,2 736 .word 0xe722,0x2008,0x0077 # vsldb %v2,%v2,%v2,8 737 .word 0xe766,0x6008,0x0077 # vsldb %v6,%v6,%v6,8 738 .word 0xe7aa,0xa008,0x0077 # vsldb %v10,%v10,%v10,8 739 .word 0xe7ee,0xe008,0x0077 # vsldb %v14,%v14,%v14,8 740 .word 0xe722,0x2008,0x0e77 # vsldb %v18,%v18,%v18,8 741 .word 0xe766,0x6008,0x0e77 # vsldb %v22,%v22,%v22,8 742 .word 0xe711,0x100c,0x0077 # vsldb %v1,%v1,%v1,12 743 .word 0xe755,0x500c,0x0077 # vsldb %v5,%v5,%v5,12 744 .word 0xe799,0x900c,0x0077 # vsldb %v9,%v9,%v9,12 745 .word 0xe7dd,0xd00c,0x0077 # vsldb %v13,%v13,%v13,12 746 .word 0xe711,0x100c,0x0e77 # vsldb %v17,%v17,%v17,12 747 .word 0xe755,0x500c,0x0e77 # vsldb %v21,%v21,%v21,12 748 .word 0xe733,0x3004,0x0077 # vsldb %v3,%v3,%v3,4 749 .word 0xe777,0x7004,0x0077 # vsldb %v7,%v7,%v7,4 750 .word 0xe7bb,0xb004,0x0077 # vsldb %v11,%v11,%v11,4 751 .word 0xe7ff,0xf004,0x0077 # vsldb %v15,%v15,%v15,4 752 .word 0xe733,0x3004,0x0e77 # vsldb %v19,%v19,%v19,4 753 .word 0xe777,0x7004,0x0e77 # vsldb %v23,%v23,%v23,4 754 brct %r0,.Loop_vx 755 .word 0xe700,0xb000,0x22f3 # va %v0,%v0,%v27,2 756 .word 0xe711,0x8000,0x22f3 # va %v1,%v1,%v24,2 757 .word 0xe722,0x9000,0x22f3 # va %v2,%v2,%v25,2 758 .word 0xe733,0xa000,0x22f3 # va %v3,%v3,%v26,2 759 .word 0xe744,0xb000,0x22f3 # va %v4,%v4,%v27,2 760 .word 0xe777,0xc000,0x22f3 # va %v7,%v7,%v28,2 761 .word 0xe700,000000,0xf18c # vperm %v0,%v0,%v0,%v31 762 .word 0xe711,0x1000,0xf18c # vperm %v1,%v1,%v1,%v31 763 .word 0xe722,0x2000,0xf18c # vperm %v2,%v2,%v2,%v31 764 .word 0xe733,0x3000,0xf18c # vperm %v3,%v3,%v3,%v31 765 .word 0xc24f,000000,0x0040 # clfi %r4,64 766 jl .Ltail_vx 767 .word 0xe7bb,0xd000,0x22f3 # va %v11,%v11,%v29,2 768 .word 0xe7ff,0xe000,0x22f3 # va %v15,%v15,%v30,2 769 .word 0xe7be,0x3000,0x0c36 # vlm %v27,%v30,0(%r3) 770 .word 0xe700,0xb000,0x026d # vx %v0,%v0,%v27 771 .word 0xe711,0xc000,0x026d # vx %v1,%v1,%v28 772 .word 0xe722,0xd000,0x026d # vx %v2,%v2,%v29 773 .word 0xe733,0xe000,0x026d # vx %v3,%v3,%v30 774 .word 0xe7be,0x7000,0x0c36 # vlm %v27,%v30,0(%r7) 775 .word 0xe703,0x2000,0x003e # vstm %v0,%v3,0(%r2) 776 la %r3,0x40(%r3) 777 la %r2,0x40(%r2) 778 ahi %r4,-64 779 je .Ldone_vx 780 .word 0xe755,0x8000,0x22f3 # va %v5,%v5,%v24,2 781 .word 0xe766,0x9000,0x22f3 # va %v6,%v6,%v25,2 782 .word 0xe704,0x4000,0xf18c # vperm %v0,%v4,%v4,%v31 783 .word 0xe715,0x5000,0xf18c # vperm %v1,%v5,%v5,%v31 784 .word 0xe726,0x6000,0xf18c # vperm %v2,%v6,%v6,%v31 785 .word 0xe737,0x7000,0xf18c # vperm %v3,%v7,%v7,%v31 786 .word 0xc24f,000000,0x0040 # clfi %r4,64 787 jl .Ltail_vx 788 .word 0xe747,0x3000,0x0036 # vlm %v4,%v7,0(%r3) 789 .word 0xe700,0x4000,0x006d # vx %v0,%v0,%v4 790 .word 0xe711,0x5000,0x006d # vx %v1,%v1,%v5 791 .word 0xe722,0x6000,0x006d # vx %v2,%v2,%v6 792 .word 0xe733,0x7000,0x006d # vx %v3,%v3,%v7 793 .word 0xe703,0x2000,0x003e # vstm %v0,%v3,0(%r2) 794 la %r3,0x40(%r3) 795 la %r2,0x40(%r2) 796 ahi %r4,-64 797 je .Ldone_vx 798 .word 0xe788,0xb000,0x22f3 # va %v8,%v8,%v27,2 799 .word 0xe799,0x8000,0x22f3 # va %v9,%v9,%v24,2 800 .word 0xe7aa,0x9000,0x22f3 # va %v10,%v10,%v25,2 801 .word 0xe708,0x8000,0xf18c # vperm %v0,%v8,%v8,%v31 802 .word 0xe719,0x9000,0xf18c # vperm %v1,%v9,%v9,%v31 803 .word 0xe72a,0xa000,0xf18c # vperm %v2,%v10,%v10,%v31 804 .word 0xe73b,0xb000,0xf18c # vperm %v3,%v11,%v11,%v31 805 .word 0xc24f,000000,0x0040 # clfi %r4,64 806 jl .Ltail_vx 807 .word 0xe747,0x3000,0x0036 # vlm %v4,%v7,0(%r3) 808 .word 0xe700,0x4000,0x006d # vx %v0,%v0,%v4 809 .word 0xe711,0x5000,0x006d # vx %v1,%v1,%v5 810 .word 0xe722,0x6000,0x006d # vx %v2,%v2,%v6 811 .word 0xe733,0x7000,0x006d # vx %v3,%v3,%v7 812 .word 0xe703,0x2000,0x003e # vstm %v0,%v3,0(%r2) 813 la %r3,0x40(%r3) 814 la %r2,0x40(%r2) 815 ahi %r4,-64 816 je .Ldone_vx 817 .word 0xe7cc,0xb000,0x22f3 # va %v12,%v12,%v27,2 818 .word 0xe7dd,0x8000,0x22f3 # va %v13,%v13,%v24,2 819 .word 0xe7ee,0x9000,0x22f3 # va %v14,%v14,%v25,2 820 .word 0xe7ba,0xe000,0x26f3 # va %v11,%v26,%v30,2 821 .word 0xe70c,0xc000,0xf18c # vperm %v0,%v12,%v12,%v31 822 .word 0xe71d,0xd000,0xf18c # vperm %v1,%v13,%v13,%v31 823 .word 0xe72e,0xe000,0xf18c # vperm %v2,%v14,%v14,%v31 824 .word 0xe73f,0xf000,0xf18c # vperm %v3,%v15,%v15,%v31 825 .word 0xc24f,000000,0x0040 # clfi %r4,64 826 jl .Ltail_vx 827 .word 0xe7fb,0xc000,0x22f3 # va %v15,%v11,%v28,2 828 .word 0xe747,0x3000,0x0036 # vlm %v4,%v7,0(%r3) 829 .word 0xe700,0x4000,0x006d # vx %v0,%v0,%v4 830 .word 0xe711,0x5000,0x006d # vx %v1,%v1,%v5 831 .word 0xe722,0x6000,0x006d # vx %v2,%v2,%v6 832 .word 0xe733,0x7000,0x006d # vx %v3,%v3,%v7 833 .word 0xe703,0x2000,0x003e # vstm %v0,%v3,0(%r2) 834 la %r3,0x40(%r3) 835 la %r2,0x40(%r2) 836 ahi %r4,-64 837 je .Ldone_vx 838 .word 0xe700,0xb000,0x2ef3 # va %v16,%v16,%v27,2 839 .word 0xe711,0x8000,0x2ef3 # va %v17,%v17,%v24,2 840 .word 0xe722,0x9000,0x2ef3 # va %v18,%v18,%v25,2 841 .word 0xe733,0xf000,0x2cf3 # va %v19,%v19,%v15,2 842 .word 0xe7ff,0xc000,0x22f3 # va %v15,%v15,%v28,2 843 .word 0xe7ab,0xe000,0x2af3 # va %v26,%v11,%v30,2 844 .word 0xe700,000000,0xf78c # vperm %v0,%v16,%v16,%v31 845 .word 0xe711,0x1000,0xf78c # vperm %v1,%v17,%v17,%v31 846 .word 0xe722,0x2000,0xf78c # vperm %v2,%v18,%v18,%v31 847 .word 0xe733,0x3000,0xf78c # vperm %v3,%v19,%v19,%v31 848 .word 0xc24f,000000,0x0040 # clfi %r4,64 849 jl .Ltail_vx 850 .word 0xe747,0x3000,0x0036 # vlm %v4,%v7,0(%r3) 851 .word 0xe700,0x4000,0x006d # vx %v0,%v0,%v4 852 .word 0xe711,0x5000,0x006d # vx %v1,%v1,%v5 853 .word 0xe722,0x6000,0x006d # vx %v2,%v2,%v6 854 .word 0xe733,0x7000,0x006d # vx %v3,%v3,%v7 855 .word 0xe703,0x2000,0x003e # vstm %v0,%v3,0(%r2) 856 la %r3,0x40(%r3) 857 la %r2,0x40(%r2) 858 ahi %r4,-64 859 je .Ldone_vx 860 .word 0xe744,0xb000,0x2ef3 # va %v20,%v20,%v27,2 861 .word 0xe755,0x8000,0x2ef3 # va %v21,%v21,%v24,2 862 .word 0xe766,0x9000,0x2ef3 # va %v22,%v22,%v25,2 863 .word 0xe777,0xf000,0x2cf3 # va %v23,%v23,%v15,2 864 .word 0xe704,0x4000,0xf78c # vperm %v0,%v20,%v20,%v31 865 .word 0xe715,0x5000,0xf78c # vperm %v1,%v21,%v21,%v31 866 .word 0xe726,0x6000,0xf78c # vperm %v2,%v22,%v22,%v31 867 .word 0xe737,0x7000,0xf78c # vperm %v3,%v23,%v23,%v31 868 .word 0xc24f,000000,0x0040 # clfi %r4,64 869 jl .Ltail_vx 870 .word 0xe747,0x3000,0x0036 # vlm %v4,%v7,0(%r3) 871 .word 0xe700,0x4000,0x006d # vx %v0,%v0,%v4 872 .word 0xe711,0x5000,0x006d # vx %v1,%v1,%v5 873 .word 0xe722,0x6000,0x006d # vx %v2,%v2,%v6 874 .word 0xe733,0x7000,0x006d # vx %v3,%v3,%v7 875 .word 0xe703,0x2000,0x003e # vstm %v0,%v3,0(%r2) 876 la %r3,0x40(%r3) 877 la %r2,0x40(%r2) 878 lhi %r0,10 879 ahi %r4,-64 880 jne .Loop_outer_vx 881 .Ldone_vx: 882 ld %f4,160+16*4+2*8(%r15) 883 ld %f6,160+16*4+3*8(%r15) 884 lm %r6,%r7,160+6*4(%r15) 885 la %r15,160(%r15) 886 br %r14 887 .align 16 888 .Ltail_vx: 889 ld %f4,160+16*4+2*8(%r15) 890 ld %f6,160+16*4+3*8(%r15) 891 .word 0xe703,0xf060,0x003e # vstm %v0,%v3,96(%r15) 892 lghi %r1,0 893 .Loop_tail_vx: 894 llgc %r5,0(%r1,%r3) 895 llgc %r6,96(%r1,%r15) 896 xr %r6,%r5 897 stc %r6,0(%r1,%r2) 898 la %r1,1(%r1) 899 brct %r4,.Loop_tail_vx 900 lm %r6,%r7,160+6*4(%r15) 901 la %r15,160(%r15) 902 br %r14 903 .size ChaCha20_ctr32_vx,.-ChaCha20_ctr32_vx 904 .align 32 905 .Lsigma: 906 .long 1634760805,857760878,2036477234,1797285236 907 .long 1,0,0,0 908 .long 2,0,0,0 909 .long 3,0,0,0 910 .long 50462976,117835012,185207048,252579084 911 .long 0,1,2,3 912 .long 1634760805,1634760805,1634760805,1634760805 913 .long 857760878,857760878,857760878,857760878 914 .long 2036477234,2036477234,2036477234,2036477234 915 .long 1797285236,1797285236,1797285236,1797285236 916 .asciz "ChaCha20 for s390x, CRYPTOGAMS by <appro@openssl.org>" 917 .align 4 918