1/* 2 * des3_ede-asm_64.S - x86-64 assembly implementation of 3DES cipher 3 * 4 * Copyright © 2014 Jussi Kivilinna <jussi.kivilinna@iki.fi> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 */ 16 17#include <linux/linkage.h> 18 19.file "des3_ede-asm_64.S" 20.text 21 22#define s1 .L_s1 23#define s2 ((s1) + (64*8)) 24#define s3 ((s2) + (64*8)) 25#define s4 ((s3) + (64*8)) 26#define s5 ((s4) + (64*8)) 27#define s6 ((s5) + (64*8)) 28#define s7 ((s6) + (64*8)) 29#define s8 ((s7) + (64*8)) 30 31/* register macros */ 32#define CTX %rdi 33 34#define RL0 %r8 35#define RL1 %r9 36#define RL2 %r10 37 38#define RL0d %r8d 39#define RL1d %r9d 40#define RL2d %r10d 41 42#define RR0 %r11 43#define RR1 %r12 44#define RR2 %r13 45 46#define RR0d %r11d 47#define RR1d %r12d 48#define RR2d %r13d 49 50#define RW0 %rax 51#define RW1 %rbx 52#define RW2 %rcx 53 54#define RW0d %eax 55#define RW1d %ebx 56#define RW2d %ecx 57 58#define RW0bl %al 59#define RW1bl %bl 60#define RW2bl %cl 61 62#define RW0bh %ah 63#define RW1bh %bh 64#define RW2bh %ch 65 66#define RT0 %r15 67#define RT1 %rsi 68#define RT2 %r14 69#define RT3 %rdx 70 71#define RT0d %r15d 72#define RT1d %esi 73#define RT2d %r14d 74#define RT3d %edx 75 76/*********************************************************************** 77 * 1-way 3DES 78 ***********************************************************************/ 79#define do_permutation(a, b, offset, mask) \ 80 movl a, RT0d; \ 81 shrl $(offset), RT0d; \ 82 xorl b, RT0d; \ 83 andl $(mask), RT0d; \ 84 xorl RT0d, b; \ 85 shll $(offset), RT0d; \ 86 xorl RT0d, a; 87 88#define expand_to_64bits(val, mask) \ 89 movl val##d, RT0d; \ 90 rorl $4, RT0d; \ 91 shlq $32, RT0; \ 92 orq RT0, val; \ 93 andq mask, val; 94 95#define compress_to_64bits(val) \ 96 movq val, RT0; \ 97 shrq $32, RT0; \ 98 roll $4, RT0d; \ 99 orl RT0d, val##d; 100 101#define initial_permutation(left, right) \ 102 do_permutation(left##d, right##d, 4, 0x0f0f0f0f); \ 103 do_permutation(left##d, right##d, 16, 0x0000ffff); \ 104 do_permutation(right##d, left##d, 2, 0x33333333); \ 105 do_permutation(right##d, left##d, 8, 0x00ff00ff); \ 106 movabs $0x3f3f3f3f3f3f3f3f, RT3; \ 107 movl left##d, RW0d; \ 108 roll $1, right##d; \ 109 xorl right##d, RW0d; \ 110 andl $0xaaaaaaaa, RW0d; \ 111 xorl RW0d, left##d; \ 112 xorl RW0d, right##d; \ 113 roll $1, left##d; \ 114 expand_to_64bits(right, RT3); \ 115 expand_to_64bits(left, RT3); 116 117#define final_permutation(left, right) \ 118 compress_to_64bits(right); \ 119 compress_to_64bits(left); \ 120 movl right##d, RW0d; \ 121 rorl $1, left##d; \ 122 xorl left##d, RW0d; \ 123 andl $0xaaaaaaaa, RW0d; \ 124 xorl RW0d, right##d; \ 125 xorl RW0d, left##d; \ 126 rorl $1, right##d; \ 127 do_permutation(right##d, left##d, 8, 0x00ff00ff); \ 128 do_permutation(right##d, left##d, 2, 0x33333333); \ 129 do_permutation(left##d, right##d, 16, 0x0000ffff); \ 130 do_permutation(left##d, right##d, 4, 0x0f0f0f0f); 131 132#define round1(n, from, to, load_next_key) \ 133 xorq from, RW0; \ 134 \ 135 movzbl RW0bl, RT0d; \ 136 movzbl RW0bh, RT1d; \ 137 shrq $16, RW0; \ 138 movzbl RW0bl, RT2d; \ 139 movzbl RW0bh, RT3d; \ 140 shrq $16, RW0; \ 141 movq s8(, RT0, 8), RT0; \ 142 xorq s6(, RT1, 8), to; \ 143 movzbl RW0bl, RL1d; \ 144 movzbl RW0bh, RT1d; \ 145 shrl $16, RW0d; \ 146 xorq s4(, RT2, 8), RT0; \ 147 xorq s2(, RT3, 8), to; \ 148 movzbl RW0bl, RT2d; \ 149 movzbl RW0bh, RT3d; \ 150 xorq s7(, RL1, 8), RT0; \ 151 xorq s5(, RT1, 8), to; \ 152 xorq s3(, RT2, 8), RT0; \ 153 load_next_key(n, RW0); \ 154 xorq RT0, to; \ 155 xorq s1(, RT3, 8), to; \ 156 157#define load_next_key(n, RWx) \ 158 movq (((n) + 1) * 8)(CTX), RWx; 159 160#define dummy2(a, b) /*_*/ 161 162#define read_block(io, left, right) \ 163 movl (io), left##d; \ 164 movl 4(io), right##d; \ 165 bswapl left##d; \ 166 bswapl right##d; 167 168#define write_block(io, left, right) \ 169 bswapl left##d; \ 170 bswapl right##d; \ 171 movl left##d, (io); \ 172 movl right##d, 4(io); 173 174ENTRY(des3_ede_x86_64_crypt_blk) 175 /* input: 176 * %rdi: round keys, CTX 177 * %rsi: dst 178 * %rdx: src 179 */ 180 pushq %rbx; 181 pushq %r12; 182 pushq %r13; 183 pushq %r14; 184 pushq %r15; 185 186 pushq %rsi; /* dst */ 187 188 read_block(%rdx, RL0, RR0); 189 initial_permutation(RL0, RR0); 190 191 movq (CTX), RW0; 192 193 round1(0, RR0, RL0, load_next_key); 194 round1(1, RL0, RR0, load_next_key); 195 round1(2, RR0, RL0, load_next_key); 196 round1(3, RL0, RR0, load_next_key); 197 round1(4, RR0, RL0, load_next_key); 198 round1(5, RL0, RR0, load_next_key); 199 round1(6, RR0, RL0, load_next_key); 200 round1(7, RL0, RR0, load_next_key); 201 round1(8, RR0, RL0, load_next_key); 202 round1(9, RL0, RR0, load_next_key); 203 round1(10, RR0, RL0, load_next_key); 204 round1(11, RL0, RR0, load_next_key); 205 round1(12, RR0, RL0, load_next_key); 206 round1(13, RL0, RR0, load_next_key); 207 round1(14, RR0, RL0, load_next_key); 208 round1(15, RL0, RR0, load_next_key); 209 210 round1(16+0, RL0, RR0, load_next_key); 211 round1(16+1, RR0, RL0, load_next_key); 212 round1(16+2, RL0, RR0, load_next_key); 213 round1(16+3, RR0, RL0, load_next_key); 214 round1(16+4, RL0, RR0, load_next_key); 215 round1(16+5, RR0, RL0, load_next_key); 216 round1(16+6, RL0, RR0, load_next_key); 217 round1(16+7, RR0, RL0, load_next_key); 218 round1(16+8, RL0, RR0, load_next_key); 219 round1(16+9, RR0, RL0, load_next_key); 220 round1(16+10, RL0, RR0, load_next_key); 221 round1(16+11, RR0, RL0, load_next_key); 222 round1(16+12, RL0, RR0, load_next_key); 223 round1(16+13, RR0, RL0, load_next_key); 224 round1(16+14, RL0, RR0, load_next_key); 225 round1(16+15, RR0, RL0, load_next_key); 226 227 round1(32+0, RR0, RL0, load_next_key); 228 round1(32+1, RL0, RR0, load_next_key); 229 round1(32+2, RR0, RL0, load_next_key); 230 round1(32+3, RL0, RR0, load_next_key); 231 round1(32+4, RR0, RL0, load_next_key); 232 round1(32+5, RL0, RR0, load_next_key); 233 round1(32+6, RR0, RL0, load_next_key); 234 round1(32+7, RL0, RR0, load_next_key); 235 round1(32+8, RR0, RL0, load_next_key); 236 round1(32+9, RL0, RR0, load_next_key); 237 round1(32+10, RR0, RL0, load_next_key); 238 round1(32+11, RL0, RR0, load_next_key); 239 round1(32+12, RR0, RL0, load_next_key); 240 round1(32+13, RL0, RR0, load_next_key); 241 round1(32+14, RR0, RL0, load_next_key); 242 round1(32+15, RL0, RR0, dummy2); 243 244 final_permutation(RR0, RL0); 245 246 popq %rsi /* dst */ 247 write_block(%rsi, RR0, RL0); 248 249 popq %r15; 250 popq %r14; 251 popq %r13; 252 popq %r12; 253 popq %rbx; 254 255 ret; 256ENDPROC(des3_ede_x86_64_crypt_blk) 257 258/*********************************************************************** 259 * 3-way 3DES 260 ***********************************************************************/ 261#define expand_to_64bits(val, mask) \ 262 movl val##d, RT0d; \ 263 rorl $4, RT0d; \ 264 shlq $32, RT0; \ 265 orq RT0, val; \ 266 andq mask, val; 267 268#define compress_to_64bits(val) \ 269 movq val, RT0; \ 270 shrq $32, RT0; \ 271 roll $4, RT0d; \ 272 orl RT0d, val##d; 273 274#define initial_permutation3(left, right) \ 275 do_permutation(left##0d, right##0d, 4, 0x0f0f0f0f); \ 276 do_permutation(left##0d, right##0d, 16, 0x0000ffff); \ 277 do_permutation(left##1d, right##1d, 4, 0x0f0f0f0f); \ 278 do_permutation(left##1d, right##1d, 16, 0x0000ffff); \ 279 do_permutation(left##2d, right##2d, 4, 0x0f0f0f0f); \ 280 do_permutation(left##2d, right##2d, 16, 0x0000ffff); \ 281 \ 282 do_permutation(right##0d, left##0d, 2, 0x33333333); \ 283 do_permutation(right##0d, left##0d, 8, 0x00ff00ff); \ 284 do_permutation(right##1d, left##1d, 2, 0x33333333); \ 285 do_permutation(right##1d, left##1d, 8, 0x00ff00ff); \ 286 do_permutation(right##2d, left##2d, 2, 0x33333333); \ 287 do_permutation(right##2d, left##2d, 8, 0x00ff00ff); \ 288 \ 289 movabs $0x3f3f3f3f3f3f3f3f, RT3; \ 290 \ 291 movl left##0d, RW0d; \ 292 roll $1, right##0d; \ 293 xorl right##0d, RW0d; \ 294 andl $0xaaaaaaaa, RW0d; \ 295 xorl RW0d, left##0d; \ 296 xorl RW0d, right##0d; \ 297 roll $1, left##0d; \ 298 expand_to_64bits(right##0, RT3); \ 299 expand_to_64bits(left##0, RT3); \ 300 movl left##1d, RW1d; \ 301 roll $1, right##1d; \ 302 xorl right##1d, RW1d; \ 303 andl $0xaaaaaaaa, RW1d; \ 304 xorl RW1d, left##1d; \ 305 xorl RW1d, right##1d; \ 306 roll $1, left##1d; \ 307 expand_to_64bits(right##1, RT3); \ 308 expand_to_64bits(left##1, RT3); \ 309 movl left##2d, RW2d; \ 310 roll $1, right##2d; \ 311 xorl right##2d, RW2d; \ 312 andl $0xaaaaaaaa, RW2d; \ 313 xorl RW2d, left##2d; \ 314 xorl RW2d, right##2d; \ 315 roll $1, left##2d; \ 316 expand_to_64bits(right##2, RT3); \ 317 expand_to_64bits(left##2, RT3); 318 319#define final_permutation3(left, right) \ 320 compress_to_64bits(right##0); \ 321 compress_to_64bits(left##0); \ 322 movl right##0d, RW0d; \ 323 rorl $1, left##0d; \ 324 xorl left##0d, RW0d; \ 325 andl $0xaaaaaaaa, RW0d; \ 326 xorl RW0d, right##0d; \ 327 xorl RW0d, left##0d; \ 328 rorl $1, right##0d; \ 329 compress_to_64bits(right##1); \ 330 compress_to_64bits(left##1); \ 331 movl right##1d, RW1d; \ 332 rorl $1, left##1d; \ 333 xorl left##1d, RW1d; \ 334 andl $0xaaaaaaaa, RW1d; \ 335 xorl RW1d, right##1d; \ 336 xorl RW1d, left##1d; \ 337 rorl $1, right##1d; \ 338 compress_to_64bits(right##2); \ 339 compress_to_64bits(left##2); \ 340 movl right##2d, RW2d; \ 341 rorl $1, left##2d; \ 342 xorl left##2d, RW2d; \ 343 andl $0xaaaaaaaa, RW2d; \ 344 xorl RW2d, right##2d; \ 345 xorl RW2d, left##2d; \ 346 rorl $1, right##2d; \ 347 \ 348 do_permutation(right##0d, left##0d, 8, 0x00ff00ff); \ 349 do_permutation(right##0d, left##0d, 2, 0x33333333); \ 350 do_permutation(right##1d, left##1d, 8, 0x00ff00ff); \ 351 do_permutation(right##1d, left##1d, 2, 0x33333333); \ 352 do_permutation(right##2d, left##2d, 8, 0x00ff00ff); \ 353 do_permutation(right##2d, left##2d, 2, 0x33333333); \ 354 \ 355 do_permutation(left##0d, right##0d, 16, 0x0000ffff); \ 356 do_permutation(left##0d, right##0d, 4, 0x0f0f0f0f); \ 357 do_permutation(left##1d, right##1d, 16, 0x0000ffff); \ 358 do_permutation(left##1d, right##1d, 4, 0x0f0f0f0f); \ 359 do_permutation(left##2d, right##2d, 16, 0x0000ffff); \ 360 do_permutation(left##2d, right##2d, 4, 0x0f0f0f0f); 361 362#define round3(n, from, to, load_next_key, do_movq) \ 363 xorq from##0, RW0; \ 364 movzbl RW0bl, RT3d; \ 365 movzbl RW0bh, RT1d; \ 366 shrq $16, RW0; \ 367 xorq s8(, RT3, 8), to##0; \ 368 xorq s6(, RT1, 8), to##0; \ 369 movzbl RW0bl, RT3d; \ 370 movzbl RW0bh, RT1d; \ 371 shrq $16, RW0; \ 372 xorq s4(, RT3, 8), to##0; \ 373 xorq s2(, RT1, 8), to##0; \ 374 movzbl RW0bl, RT3d; \ 375 movzbl RW0bh, RT1d; \ 376 shrl $16, RW0d; \ 377 xorq s7(, RT3, 8), to##0; \ 378 xorq s5(, RT1, 8), to##0; \ 379 movzbl RW0bl, RT3d; \ 380 movzbl RW0bh, RT1d; \ 381 load_next_key(n, RW0); \ 382 xorq s3(, RT3, 8), to##0; \ 383 xorq s1(, RT1, 8), to##0; \ 384 xorq from##1, RW1; \ 385 movzbl RW1bl, RT3d; \ 386 movzbl RW1bh, RT1d; \ 387 shrq $16, RW1; \ 388 xorq s8(, RT3, 8), to##1; \ 389 xorq s6(, RT1, 8), to##1; \ 390 movzbl RW1bl, RT3d; \ 391 movzbl RW1bh, RT1d; \ 392 shrq $16, RW1; \ 393 xorq s4(, RT3, 8), to##1; \ 394 xorq s2(, RT1, 8), to##1; \ 395 movzbl RW1bl, RT3d; \ 396 movzbl RW1bh, RT1d; \ 397 shrl $16, RW1d; \ 398 xorq s7(, RT3, 8), to##1; \ 399 xorq s5(, RT1, 8), to##1; \ 400 movzbl RW1bl, RT3d; \ 401 movzbl RW1bh, RT1d; \ 402 do_movq(RW0, RW1); \ 403 xorq s3(, RT3, 8), to##1; \ 404 xorq s1(, RT1, 8), to##1; \ 405 xorq from##2, RW2; \ 406 movzbl RW2bl, RT3d; \ 407 movzbl RW2bh, RT1d; \ 408 shrq $16, RW2; \ 409 xorq s8(, RT3, 8), to##2; \ 410 xorq s6(, RT1, 8), to##2; \ 411 movzbl RW2bl, RT3d; \ 412 movzbl RW2bh, RT1d; \ 413 shrq $16, RW2; \ 414 xorq s4(, RT3, 8), to##2; \ 415 xorq s2(, RT1, 8), to##2; \ 416 movzbl RW2bl, RT3d; \ 417 movzbl RW2bh, RT1d; \ 418 shrl $16, RW2d; \ 419 xorq s7(, RT3, 8), to##2; \ 420 xorq s5(, RT1, 8), to##2; \ 421 movzbl RW2bl, RT3d; \ 422 movzbl RW2bh, RT1d; \ 423 do_movq(RW0, RW2); \ 424 xorq s3(, RT3, 8), to##2; \ 425 xorq s1(, RT1, 8), to##2; 426 427#define __movq(src, dst) \ 428 movq src, dst; 429 430ENTRY(des3_ede_x86_64_crypt_blk_3way) 431 /* input: 432 * %rdi: ctx, round keys 433 * %rsi: dst (3 blocks) 434 * %rdx: src (3 blocks) 435 */ 436 437 pushq %rbx; 438 pushq %r12; 439 pushq %r13; 440 pushq %r14; 441 pushq %r15; 442 443 pushq %rsi /* dst */ 444 445 /* load input */ 446 movl 0 * 4(%rdx), RL0d; 447 movl 1 * 4(%rdx), RR0d; 448 movl 2 * 4(%rdx), RL1d; 449 movl 3 * 4(%rdx), RR1d; 450 movl 4 * 4(%rdx), RL2d; 451 movl 5 * 4(%rdx), RR2d; 452 453 bswapl RL0d; 454 bswapl RR0d; 455 bswapl RL1d; 456 bswapl RR1d; 457 bswapl RL2d; 458 bswapl RR2d; 459 460 initial_permutation3(RL, RR); 461 462 movq 0(CTX), RW0; 463 movq RW0, RW1; 464 movq RW0, RW2; 465 466 round3(0, RR, RL, load_next_key, __movq); 467 round3(1, RL, RR, load_next_key, __movq); 468 round3(2, RR, RL, load_next_key, __movq); 469 round3(3, RL, RR, load_next_key, __movq); 470 round3(4, RR, RL, load_next_key, __movq); 471 round3(5, RL, RR, load_next_key, __movq); 472 round3(6, RR, RL, load_next_key, __movq); 473 round3(7, RL, RR, load_next_key, __movq); 474 round3(8, RR, RL, load_next_key, __movq); 475 round3(9, RL, RR, load_next_key, __movq); 476 round3(10, RR, RL, load_next_key, __movq); 477 round3(11, RL, RR, load_next_key, __movq); 478 round3(12, RR, RL, load_next_key, __movq); 479 round3(13, RL, RR, load_next_key, __movq); 480 round3(14, RR, RL, load_next_key, __movq); 481 round3(15, RL, RR, load_next_key, __movq); 482 483 round3(16+0, RL, RR, load_next_key, __movq); 484 round3(16+1, RR, RL, load_next_key, __movq); 485 round3(16+2, RL, RR, load_next_key, __movq); 486 round3(16+3, RR, RL, load_next_key, __movq); 487 round3(16+4, RL, RR, load_next_key, __movq); 488 round3(16+5, RR, RL, load_next_key, __movq); 489 round3(16+6, RL, RR, load_next_key, __movq); 490 round3(16+7, RR, RL, load_next_key, __movq); 491 round3(16+8, RL, RR, load_next_key, __movq); 492 round3(16+9, RR, RL, load_next_key, __movq); 493 round3(16+10, RL, RR, load_next_key, __movq); 494 round3(16+11, RR, RL, load_next_key, __movq); 495 round3(16+12, RL, RR, load_next_key, __movq); 496 round3(16+13, RR, RL, load_next_key, __movq); 497 round3(16+14, RL, RR, load_next_key, __movq); 498 round3(16+15, RR, RL, load_next_key, __movq); 499 500 round3(32+0, RR, RL, load_next_key, __movq); 501 round3(32+1, RL, RR, load_next_key, __movq); 502 round3(32+2, RR, RL, load_next_key, __movq); 503 round3(32+3, RL, RR, load_next_key, __movq); 504 round3(32+4, RR, RL, load_next_key, __movq); 505 round3(32+5, RL, RR, load_next_key, __movq); 506 round3(32+6, RR, RL, load_next_key, __movq); 507 round3(32+7, RL, RR, load_next_key, __movq); 508 round3(32+8, RR, RL, load_next_key, __movq); 509 round3(32+9, RL, RR, load_next_key, __movq); 510 round3(32+10, RR, RL, load_next_key, __movq); 511 round3(32+11, RL, RR, load_next_key, __movq); 512 round3(32+12, RR, RL, load_next_key, __movq); 513 round3(32+13, RL, RR, load_next_key, __movq); 514 round3(32+14, RR, RL, load_next_key, __movq); 515 round3(32+15, RL, RR, dummy2, dummy2); 516 517 final_permutation3(RR, RL); 518 519 bswapl RR0d; 520 bswapl RL0d; 521 bswapl RR1d; 522 bswapl RL1d; 523 bswapl RR2d; 524 bswapl RL2d; 525 526 popq %rsi /* dst */ 527 movl RR0d, 0 * 4(%rsi); 528 movl RL0d, 1 * 4(%rsi); 529 movl RR1d, 2 * 4(%rsi); 530 movl RL1d, 3 * 4(%rsi); 531 movl RR2d, 4 * 4(%rsi); 532 movl RL2d, 5 * 4(%rsi); 533 534 popq %r15; 535 popq %r14; 536 popq %r13; 537 popq %r12; 538 popq %rbx; 539 540 ret; 541ENDPROC(des3_ede_x86_64_crypt_blk_3way) 542 543.section .rodata, "a", @progbits 544.align 16 545.L_s1: 546 .quad 0x0010100001010400, 0x0000000000000000 547 .quad 0x0000100000010000, 0x0010100001010404 548 .quad 0x0010100001010004, 0x0000100000010404 549 .quad 0x0000000000000004, 0x0000100000010000 550 .quad 0x0000000000000400, 0x0010100001010400 551 .quad 0x0010100001010404, 0x0000000000000400 552 .quad 0x0010000001000404, 0x0010100001010004 553 .quad 0x0010000001000000, 0x0000000000000004 554 .quad 0x0000000000000404, 0x0010000001000400 555 .quad 0x0010000001000400, 0x0000100000010400 556 .quad 0x0000100000010400, 0x0010100001010000 557 .quad 0x0010100001010000, 0x0010000001000404 558 .quad 0x0000100000010004, 0x0010000001000004 559 .quad 0x0010000001000004, 0x0000100000010004 560 .quad 0x0000000000000000, 0x0000000000000404 561 .quad 0x0000100000010404, 0x0010000001000000 562 .quad 0x0000100000010000, 0x0010100001010404 563 .quad 0x0000000000000004, 0x0010100001010000 564 .quad 0x0010100001010400, 0x0010000001000000 565 .quad 0x0010000001000000, 0x0000000000000400 566 .quad 0x0010100001010004, 0x0000100000010000 567 .quad 0x0000100000010400, 0x0010000001000004 568 .quad 0x0000000000000400, 0x0000000000000004 569 .quad 0x0010000001000404, 0x0000100000010404 570 .quad 0x0010100001010404, 0x0000100000010004 571 .quad 0x0010100001010000, 0x0010000001000404 572 .quad 0x0010000001000004, 0x0000000000000404 573 .quad 0x0000100000010404, 0x0010100001010400 574 .quad 0x0000000000000404, 0x0010000001000400 575 .quad 0x0010000001000400, 0x0000000000000000 576 .quad 0x0000100000010004, 0x0000100000010400 577 .quad 0x0000000000000000, 0x0010100001010004 578.L_s2: 579 .quad 0x0801080200100020, 0x0800080000000000 580 .quad 0x0000080000000000, 0x0001080200100020 581 .quad 0x0001000000100000, 0x0000000200000020 582 .quad 0x0801000200100020, 0x0800080200000020 583 .quad 0x0800000200000020, 0x0801080200100020 584 .quad 0x0801080000100000, 0x0800000000000000 585 .quad 0x0800080000000000, 0x0001000000100000 586 .quad 0x0000000200000020, 0x0801000200100020 587 .quad 0x0001080000100000, 0x0001000200100020 588 .quad 0x0800080200000020, 0x0000000000000000 589 .quad 0x0800000000000000, 0x0000080000000000 590 .quad 0x0001080200100020, 0x0801000000100000 591 .quad 0x0001000200100020, 0x0800000200000020 592 .quad 0x0000000000000000, 0x0001080000100000 593 .quad 0x0000080200000020, 0x0801080000100000 594 .quad 0x0801000000100000, 0x0000080200000020 595 .quad 0x0000000000000000, 0x0001080200100020 596 .quad 0x0801000200100020, 0x0001000000100000 597 .quad 0x0800080200000020, 0x0801000000100000 598 .quad 0x0801080000100000, 0x0000080000000000 599 .quad 0x0801000000100000, 0x0800080000000000 600 .quad 0x0000000200000020, 0x0801080200100020 601 .quad 0x0001080200100020, 0x0000000200000020 602 .quad 0x0000080000000000, 0x0800000000000000 603 .quad 0x0000080200000020, 0x0801080000100000 604 .quad 0x0001000000100000, 0x0800000200000020 605 .quad 0x0001000200100020, 0x0800080200000020 606 .quad 0x0800000200000020, 0x0001000200100020 607 .quad 0x0001080000100000, 0x0000000000000000 608 .quad 0x0800080000000000, 0x0000080200000020 609 .quad 0x0800000000000000, 0x0801000200100020 610 .quad 0x0801080200100020, 0x0001080000100000 611.L_s3: 612 .quad 0x0000002000000208, 0x0000202008020200 613 .quad 0x0000000000000000, 0x0000200008020008 614 .quad 0x0000002008000200, 0x0000000000000000 615 .quad 0x0000202000020208, 0x0000002008000200 616 .quad 0x0000200000020008, 0x0000000008000008 617 .quad 0x0000000008000008, 0x0000200000020000 618 .quad 0x0000202008020208, 0x0000200000020008 619 .quad 0x0000200008020000, 0x0000002000000208 620 .quad 0x0000000008000000, 0x0000000000000008 621 .quad 0x0000202008020200, 0x0000002000000200 622 .quad 0x0000202000020200, 0x0000200008020000 623 .quad 0x0000200008020008, 0x0000202000020208 624 .quad 0x0000002008000208, 0x0000202000020200 625 .quad 0x0000200000020000, 0x0000002008000208 626 .quad 0x0000000000000008, 0x0000202008020208 627 .quad 0x0000002000000200, 0x0000000008000000 628 .quad 0x0000202008020200, 0x0000000008000000 629 .quad 0x0000200000020008, 0x0000002000000208 630 .quad 0x0000200000020000, 0x0000202008020200 631 .quad 0x0000002008000200, 0x0000000000000000 632 .quad 0x0000002000000200, 0x0000200000020008 633 .quad 0x0000202008020208, 0x0000002008000200 634 .quad 0x0000000008000008, 0x0000002000000200 635 .quad 0x0000000000000000, 0x0000200008020008 636 .quad 0x0000002008000208, 0x0000200000020000 637 .quad 0x0000000008000000, 0x0000202008020208 638 .quad 0x0000000000000008, 0x0000202000020208 639 .quad 0x0000202000020200, 0x0000000008000008 640 .quad 0x0000200008020000, 0x0000002008000208 641 .quad 0x0000002000000208, 0x0000200008020000 642 .quad 0x0000202000020208, 0x0000000000000008 643 .quad 0x0000200008020008, 0x0000202000020200 644.L_s4: 645 .quad 0x1008020000002001, 0x1000020800002001 646 .quad 0x1000020800002001, 0x0000000800000000 647 .quad 0x0008020800002000, 0x1008000800000001 648 .quad 0x1008000000000001, 0x1000020000002001 649 .quad 0x0000000000000000, 0x0008020000002000 650 .quad 0x0008020000002000, 0x1008020800002001 651 .quad 0x1000000800000001, 0x0000000000000000 652 .quad 0x0008000800000000, 0x1008000000000001 653 .quad 0x1000000000000001, 0x0000020000002000 654 .quad 0x0008000000000000, 0x1008020000002001 655 .quad 0x0000000800000000, 0x0008000000000000 656 .quad 0x1000020000002001, 0x0000020800002000 657 .quad 0x1008000800000001, 0x1000000000000001 658 .quad 0x0000020800002000, 0x0008000800000000 659 .quad 0x0000020000002000, 0x0008020800002000 660 .quad 0x1008020800002001, 0x1000000800000001 661 .quad 0x0008000800000000, 0x1008000000000001 662 .quad 0x0008020000002000, 0x1008020800002001 663 .quad 0x1000000800000001, 0x0000000000000000 664 .quad 0x0000000000000000, 0x0008020000002000 665 .quad 0x0000020800002000, 0x0008000800000000 666 .quad 0x1008000800000001, 0x1000000000000001 667 .quad 0x1008020000002001, 0x1000020800002001 668 .quad 0x1000020800002001, 0x0000000800000000 669 .quad 0x1008020800002001, 0x1000000800000001 670 .quad 0x1000000000000001, 0x0000020000002000 671 .quad 0x1008000000000001, 0x1000020000002001 672 .quad 0x0008020800002000, 0x1008000800000001 673 .quad 0x1000020000002001, 0x0000020800002000 674 .quad 0x0008000000000000, 0x1008020000002001 675 .quad 0x0000000800000000, 0x0008000000000000 676 .quad 0x0000020000002000, 0x0008020800002000 677.L_s5: 678 .quad 0x0000001000000100, 0x0020001002080100 679 .quad 0x0020000002080000, 0x0420001002000100 680 .quad 0x0000000000080000, 0x0000001000000100 681 .quad 0x0400000000000000, 0x0020000002080000 682 .quad 0x0400001000080100, 0x0000000000080000 683 .quad 0x0020001002000100, 0x0400001000080100 684 .quad 0x0420001002000100, 0x0420000002080000 685 .quad 0x0000001000080100, 0x0400000000000000 686 .quad 0x0020000002000000, 0x0400000000080000 687 .quad 0x0400000000080000, 0x0000000000000000 688 .quad 0x0400001000000100, 0x0420001002080100 689 .quad 0x0420001002080100, 0x0020001002000100 690 .quad 0x0420000002080000, 0x0400001000000100 691 .quad 0x0000000000000000, 0x0420000002000000 692 .quad 0x0020001002080100, 0x0020000002000000 693 .quad 0x0420000002000000, 0x0000001000080100 694 .quad 0x0000000000080000, 0x0420001002000100 695 .quad 0x0000001000000100, 0x0020000002000000 696 .quad 0x0400000000000000, 0x0020000002080000 697 .quad 0x0420001002000100, 0x0400001000080100 698 .quad 0x0020001002000100, 0x0400000000000000 699 .quad 0x0420000002080000, 0x0020001002080100 700 .quad 0x0400001000080100, 0x0000001000000100 701 .quad 0x0020000002000000, 0x0420000002080000 702 .quad 0x0420001002080100, 0x0000001000080100 703 .quad 0x0420000002000000, 0x0420001002080100 704 .quad 0x0020000002080000, 0x0000000000000000 705 .quad 0x0400000000080000, 0x0420000002000000 706 .quad 0x0000001000080100, 0x0020001002000100 707 .quad 0x0400001000000100, 0x0000000000080000 708 .quad 0x0000000000000000, 0x0400000000080000 709 .quad 0x0020001002080100, 0x0400001000000100 710.L_s6: 711 .quad 0x0200000120000010, 0x0204000020000000 712 .quad 0x0000040000000000, 0x0204040120000010 713 .quad 0x0204000020000000, 0x0000000100000010 714 .quad 0x0204040120000010, 0x0004000000000000 715 .quad 0x0200040020000000, 0x0004040100000010 716 .quad 0x0004000000000000, 0x0200000120000010 717 .quad 0x0004000100000010, 0x0200040020000000 718 .quad 0x0200000020000000, 0x0000040100000010 719 .quad 0x0000000000000000, 0x0004000100000010 720 .quad 0x0200040120000010, 0x0000040000000000 721 .quad 0x0004040000000000, 0x0200040120000010 722 .quad 0x0000000100000010, 0x0204000120000010 723 .quad 0x0204000120000010, 0x0000000000000000 724 .quad 0x0004040100000010, 0x0204040020000000 725 .quad 0x0000040100000010, 0x0004040000000000 726 .quad 0x0204040020000000, 0x0200000020000000 727 .quad 0x0200040020000000, 0x0000000100000010 728 .quad 0x0204000120000010, 0x0004040000000000 729 .quad 0x0204040120000010, 0x0004000000000000 730 .quad 0x0000040100000010, 0x0200000120000010 731 .quad 0x0004000000000000, 0x0200040020000000 732 .quad 0x0200000020000000, 0x0000040100000010 733 .quad 0x0200000120000010, 0x0204040120000010 734 .quad 0x0004040000000000, 0x0204000020000000 735 .quad 0x0004040100000010, 0x0204040020000000 736 .quad 0x0000000000000000, 0x0204000120000010 737 .quad 0x0000000100000010, 0x0000040000000000 738 .quad 0x0204000020000000, 0x0004040100000010 739 .quad 0x0000040000000000, 0x0004000100000010 740 .quad 0x0200040120000010, 0x0000000000000000 741 .quad 0x0204040020000000, 0x0200000020000000 742 .quad 0x0004000100000010, 0x0200040120000010 743.L_s7: 744 .quad 0x0002000000200000, 0x2002000004200002 745 .quad 0x2000000004000802, 0x0000000000000000 746 .quad 0x0000000000000800, 0x2000000004000802 747 .quad 0x2002000000200802, 0x0002000004200800 748 .quad 0x2002000004200802, 0x0002000000200000 749 .quad 0x0000000000000000, 0x2000000004000002 750 .quad 0x2000000000000002, 0x0000000004000000 751 .quad 0x2002000004200002, 0x2000000000000802 752 .quad 0x0000000004000800, 0x2002000000200802 753 .quad 0x2002000000200002, 0x0000000004000800 754 .quad 0x2000000004000002, 0x0002000004200000 755 .quad 0x0002000004200800, 0x2002000000200002 756 .quad 0x0002000004200000, 0x0000000000000800 757 .quad 0x2000000000000802, 0x2002000004200802 758 .quad 0x0002000000200800, 0x2000000000000002 759 .quad 0x0000000004000000, 0x0002000000200800 760 .quad 0x0000000004000000, 0x0002000000200800 761 .quad 0x0002000000200000, 0x2000000004000802 762 .quad 0x2000000004000802, 0x2002000004200002 763 .quad 0x2002000004200002, 0x2000000000000002 764 .quad 0x2002000000200002, 0x0000000004000000 765 .quad 0x0000000004000800, 0x0002000000200000 766 .quad 0x0002000004200800, 0x2000000000000802 767 .quad 0x2002000000200802, 0x0002000004200800 768 .quad 0x2000000000000802, 0x2000000004000002 769 .quad 0x2002000004200802, 0x0002000004200000 770 .quad 0x0002000000200800, 0x0000000000000000 771 .quad 0x2000000000000002, 0x2002000004200802 772 .quad 0x0000000000000000, 0x2002000000200802 773 .quad 0x0002000004200000, 0x0000000000000800 774 .quad 0x2000000004000002, 0x0000000004000800 775 .quad 0x0000000000000800, 0x2002000000200002 776.L_s8: 777 .quad 0x0100010410001000, 0x0000010000001000 778 .quad 0x0000000000040000, 0x0100010410041000 779 .quad 0x0100000010000000, 0x0100010410001000 780 .quad 0x0000000400000000, 0x0100000010000000 781 .quad 0x0000000400040000, 0x0100000010040000 782 .quad 0x0100010410041000, 0x0000010000041000 783 .quad 0x0100010010041000, 0x0000010400041000 784 .quad 0x0000010000001000, 0x0000000400000000 785 .quad 0x0100000010040000, 0x0100000410000000 786 .quad 0x0100010010001000, 0x0000010400001000 787 .quad 0x0000010000041000, 0x0000000400040000 788 .quad 0x0100000410040000, 0x0100010010041000 789 .quad 0x0000010400001000, 0x0000000000000000 790 .quad 0x0000000000000000, 0x0100000410040000 791 .quad 0x0100000410000000, 0x0100010010001000 792 .quad 0x0000010400041000, 0x0000000000040000 793 .quad 0x0000010400041000, 0x0000000000040000 794 .quad 0x0100010010041000, 0x0000010000001000 795 .quad 0x0000000400000000, 0x0100000410040000 796 .quad 0x0000010000001000, 0x0000010400041000 797 .quad 0x0100010010001000, 0x0000000400000000 798 .quad 0x0100000410000000, 0x0100000010040000 799 .quad 0x0100000410040000, 0x0100000010000000 800 .quad 0x0000000000040000, 0x0100010410001000 801 .quad 0x0000000000000000, 0x0100010410041000 802 .quad 0x0000000400040000, 0x0100000410000000 803 .quad 0x0100000010040000, 0x0100010010001000 804 .quad 0x0100010410001000, 0x0000000000000000 805 .quad 0x0100010410041000, 0x0000010000041000 806 .quad 0x0000010000041000, 0x0000010400001000 807 .quad 0x0000010400001000, 0x0000000400040000 808 .quad 0x0100000010000000, 0x0100010010041000 809