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