0001
0002
0003
0004
0005
0006
0007
0008 #include <linux/linkage.h>
0009
0010 .file "des3_ede-asm_64.S"
0011 .text
0012
0013 #define s1 .L_s1
0014 #define s2 ((s1) + (64*8))
0015 #define s3 ((s2) + (64*8))
0016 #define s4 ((s3) + (64*8))
0017 #define s5 ((s4) + (64*8))
0018 #define s6 ((s5) + (64*8))
0019 #define s7 ((s6) + (64*8))
0020 #define s8 ((s7) + (64*8))
0021
0022
0023 #define CTX %rdi
0024
0025 #define RL0 %r8
0026 #define RL1 %r9
0027 #define RL2 %r10
0028
0029 #define RL0d %r8d
0030 #define RL1d %r9d
0031 #define RL2d %r10d
0032
0033 #define RR0 %r11
0034 #define RR1 %r12
0035 #define RR2 %r13
0036
0037 #define RR0d %r11d
0038 #define RR1d %r12d
0039 #define RR2d %r13d
0040
0041 #define RW0 %rax
0042 #define RW1 %rbx
0043 #define RW2 %rcx
0044
0045 #define RW0d %eax
0046 #define RW1d %ebx
0047 #define RW2d %ecx
0048
0049 #define RW0bl %al
0050 #define RW1bl %bl
0051 #define RW2bl %cl
0052
0053 #define RW0bh %ah
0054 #define RW1bh %bh
0055 #define RW2bh %ch
0056
0057 #define RT0 %r15
0058 #define RT1 %rsi
0059 #define RT2 %r14
0060 #define RT3 %rdx
0061
0062 #define RT0d %r15d
0063 #define RT1d %esi
0064 #define RT2d %r14d
0065 #define RT3d %edx
0066
0067
0068
0069
0070 #define do_permutation(a, b, offset, mask) \
0071 movl a, RT0d; \
0072 shrl $(offset), RT0d; \
0073 xorl b, RT0d; \
0074 andl $(mask), RT0d; \
0075 xorl RT0d, b; \
0076 shll $(offset), RT0d; \
0077 xorl RT0d, a;
0078
0079 #define expand_to_64bits(val, mask) \
0080 movl val##d, RT0d; \
0081 rorl $4, RT0d; \
0082 shlq $32, RT0; \
0083 orq RT0, val; \
0084 andq mask, val;
0085
0086 #define compress_to_64bits(val) \
0087 movq val, RT0; \
0088 shrq $32, RT0; \
0089 roll $4, RT0d; \
0090 orl RT0d, val##d;
0091
0092 #define initial_permutation(left, right) \
0093 do_permutation(left##d, right##d, 4, 0x0f0f0f0f); \
0094 do_permutation(left##d, right##d, 16, 0x0000ffff); \
0095 do_permutation(right##d, left##d, 2, 0x33333333); \
0096 do_permutation(right##d, left##d, 8, 0x00ff00ff); \
0097 movabs $0x3f3f3f3f3f3f3f3f, RT3; \
0098 movl left##d, RW0d; \
0099 roll $1, right##d; \
0100 xorl right##d, RW0d; \
0101 andl $0xaaaaaaaa, RW0d; \
0102 xorl RW0d, left##d; \
0103 xorl RW0d, right##d; \
0104 roll $1, left##d; \
0105 expand_to_64bits(right, RT3); \
0106 expand_to_64bits(left, RT3);
0107
0108 #define final_permutation(left, right) \
0109 compress_to_64bits(right); \
0110 compress_to_64bits(left); \
0111 movl right##d, RW0d; \
0112 rorl $1, left##d; \
0113 xorl left##d, RW0d; \
0114 andl $0xaaaaaaaa, RW0d; \
0115 xorl RW0d, right##d; \
0116 xorl RW0d, left##d; \
0117 rorl $1, right##d; \
0118 do_permutation(right##d, left##d, 8, 0x00ff00ff); \
0119 do_permutation(right##d, left##d, 2, 0x33333333); \
0120 do_permutation(left##d, right##d, 16, 0x0000ffff); \
0121 do_permutation(left##d, right##d, 4, 0x0f0f0f0f);
0122
0123 #define round1(n, from, to, load_next_key) \
0124 xorq from, RW0; \
0125 \
0126 movzbl RW0bl, RT0d; \
0127 movzbl RW0bh, RT1d; \
0128 shrq $16, RW0; \
0129 movzbl RW0bl, RT2d; \
0130 movzbl RW0bh, RT3d; \
0131 shrq $16, RW0; \
0132 movq s8(, RT0, 8), RT0; \
0133 xorq s6(, RT1, 8), to; \
0134 movzbl RW0bl, RL1d; \
0135 movzbl RW0bh, RT1d; \
0136 shrl $16, RW0d; \
0137 xorq s4(, RT2, 8), RT0; \
0138 xorq s2(, RT3, 8), to; \
0139 movzbl RW0bl, RT2d; \
0140 movzbl RW0bh, RT3d; \
0141 xorq s7(, RL1, 8), RT0; \
0142 xorq s5(, RT1, 8), to; \
0143 xorq s3(, RT2, 8), RT0; \
0144 load_next_key(n, RW0); \
0145 xorq RT0, to; \
0146 xorq s1(, RT3, 8), to; \
0147
0148 #define load_next_key(n, RWx) \
0149 movq (((n) + 1) * 8)(CTX), RWx;
0150
0151 #define dummy2(a, b)
0152
0153 #define read_block(io, left, right) \
0154 movl (io), left##d; \
0155 movl 4(io), right##d; \
0156 bswapl left##d; \
0157 bswapl right##d;
0158
0159 #define write_block(io, left, right) \
0160 bswapl left##d; \
0161 bswapl right##d; \
0162 movl left##d, (io); \
0163 movl right##d, 4(io);
0164
0165 SYM_FUNC_START(des3_ede_x86_64_crypt_blk)
0166
0167
0168
0169
0170
0171 pushq %rbx;
0172 pushq %r12;
0173 pushq %r13;
0174 pushq %r14;
0175 pushq %r15;
0176
0177 pushq %rsi;
0178
0179 read_block(%rdx, RL0, RR0);
0180 initial_permutation(RL0, RR0);
0181
0182 movq (CTX), RW0;
0183
0184 round1(0, RR0, RL0, load_next_key);
0185 round1(1, RL0, RR0, load_next_key);
0186 round1(2, RR0, RL0, load_next_key);
0187 round1(3, RL0, RR0, load_next_key);
0188 round1(4, RR0, RL0, load_next_key);
0189 round1(5, RL0, RR0, load_next_key);
0190 round1(6, RR0, RL0, load_next_key);
0191 round1(7, RL0, RR0, load_next_key);
0192 round1(8, RR0, RL0, load_next_key);
0193 round1(9, RL0, RR0, load_next_key);
0194 round1(10, RR0, RL0, load_next_key);
0195 round1(11, RL0, RR0, load_next_key);
0196 round1(12, RR0, RL0, load_next_key);
0197 round1(13, RL0, RR0, load_next_key);
0198 round1(14, RR0, RL0, load_next_key);
0199 round1(15, RL0, RR0, load_next_key);
0200
0201 round1(16+0, RL0, RR0, load_next_key);
0202 round1(16+1, RR0, RL0, load_next_key);
0203 round1(16+2, RL0, RR0, load_next_key);
0204 round1(16+3, RR0, RL0, load_next_key);
0205 round1(16+4, RL0, RR0, load_next_key);
0206 round1(16+5, RR0, RL0, load_next_key);
0207 round1(16+6, RL0, RR0, load_next_key);
0208 round1(16+7, RR0, RL0, load_next_key);
0209 round1(16+8, RL0, RR0, load_next_key);
0210 round1(16+9, RR0, RL0, load_next_key);
0211 round1(16+10, RL0, RR0, load_next_key);
0212 round1(16+11, RR0, RL0, load_next_key);
0213 round1(16+12, RL0, RR0, load_next_key);
0214 round1(16+13, RR0, RL0, load_next_key);
0215 round1(16+14, RL0, RR0, load_next_key);
0216 round1(16+15, RR0, RL0, load_next_key);
0217
0218 round1(32+0, RR0, RL0, load_next_key);
0219 round1(32+1, RL0, RR0, load_next_key);
0220 round1(32+2, RR0, RL0, load_next_key);
0221 round1(32+3, RL0, RR0, load_next_key);
0222 round1(32+4, RR0, RL0, load_next_key);
0223 round1(32+5, RL0, RR0, load_next_key);
0224 round1(32+6, RR0, RL0, load_next_key);
0225 round1(32+7, RL0, RR0, load_next_key);
0226 round1(32+8, RR0, RL0, load_next_key);
0227 round1(32+9, RL0, RR0, load_next_key);
0228 round1(32+10, RR0, RL0, load_next_key);
0229 round1(32+11, RL0, RR0, load_next_key);
0230 round1(32+12, RR0, RL0, load_next_key);
0231 round1(32+13, RL0, RR0, load_next_key);
0232 round1(32+14, RR0, RL0, load_next_key);
0233 round1(32+15, RL0, RR0, dummy2);
0234
0235 final_permutation(RR0, RL0);
0236
0237 popq %rsi
0238 write_block(%rsi, RR0, RL0);
0239
0240 popq %r15;
0241 popq %r14;
0242 popq %r13;
0243 popq %r12;
0244 popq %rbx;
0245
0246 RET;
0247 SYM_FUNC_END(des3_ede_x86_64_crypt_blk)
0248
0249
0250
0251
0252 #define expand_to_64bits(val, mask) \
0253 movl val##d, RT0d; \
0254 rorl $4, RT0d; \
0255 shlq $32, RT0; \
0256 orq RT0, val; \
0257 andq mask, val;
0258
0259 #define compress_to_64bits(val) \
0260 movq val, RT0; \
0261 shrq $32, RT0; \
0262 roll $4, RT0d; \
0263 orl RT0d, val##d;
0264
0265 #define initial_permutation3(left, right) \
0266 do_permutation(left##0d, right##0d, 4, 0x0f0f0f0f); \
0267 do_permutation(left##0d, right##0d, 16, 0x0000ffff); \
0268 do_permutation(left##1d, right##1d, 4, 0x0f0f0f0f); \
0269 do_permutation(left##1d, right##1d, 16, 0x0000ffff); \
0270 do_permutation(left##2d, right##2d, 4, 0x0f0f0f0f); \
0271 do_permutation(left##2d, right##2d, 16, 0x0000ffff); \
0272 \
0273 do_permutation(right##0d, left##0d, 2, 0x33333333); \
0274 do_permutation(right##0d, left##0d, 8, 0x00ff00ff); \
0275 do_permutation(right##1d, left##1d, 2, 0x33333333); \
0276 do_permutation(right##1d, left##1d, 8, 0x00ff00ff); \
0277 do_permutation(right##2d, left##2d, 2, 0x33333333); \
0278 do_permutation(right##2d, left##2d, 8, 0x00ff00ff); \
0279 \
0280 movabs $0x3f3f3f3f3f3f3f3f, RT3; \
0281 \
0282 movl left##0d, RW0d; \
0283 roll $1, right##0d; \
0284 xorl right##0d, RW0d; \
0285 andl $0xaaaaaaaa, RW0d; \
0286 xorl RW0d, left##0d; \
0287 xorl RW0d, right##0d; \
0288 roll $1, left##0d; \
0289 expand_to_64bits(right##0, RT3); \
0290 expand_to_64bits(left##0, RT3); \
0291 movl left##1d, RW1d; \
0292 roll $1, right##1d; \
0293 xorl right##1d, RW1d; \
0294 andl $0xaaaaaaaa, RW1d; \
0295 xorl RW1d, left##1d; \
0296 xorl RW1d, right##1d; \
0297 roll $1, left##1d; \
0298 expand_to_64bits(right##1, RT3); \
0299 expand_to_64bits(left##1, RT3); \
0300 movl left##2d, RW2d; \
0301 roll $1, right##2d; \
0302 xorl right##2d, RW2d; \
0303 andl $0xaaaaaaaa, RW2d; \
0304 xorl RW2d, left##2d; \
0305 xorl RW2d, right##2d; \
0306 roll $1, left##2d; \
0307 expand_to_64bits(right##2, RT3); \
0308 expand_to_64bits(left##2, RT3);
0309
0310 #define final_permutation3(left, right) \
0311 compress_to_64bits(right##0); \
0312 compress_to_64bits(left##0); \
0313 movl right##0d, RW0d; \
0314 rorl $1, left##0d; \
0315 xorl left##0d, RW0d; \
0316 andl $0xaaaaaaaa, RW0d; \
0317 xorl RW0d, right##0d; \
0318 xorl RW0d, left##0d; \
0319 rorl $1, right##0d; \
0320 compress_to_64bits(right##1); \
0321 compress_to_64bits(left##1); \
0322 movl right##1d, RW1d; \
0323 rorl $1, left##1d; \
0324 xorl left##1d, RW1d; \
0325 andl $0xaaaaaaaa, RW1d; \
0326 xorl RW1d, right##1d; \
0327 xorl RW1d, left##1d; \
0328 rorl $1, right##1d; \
0329 compress_to_64bits(right##2); \
0330 compress_to_64bits(left##2); \
0331 movl right##2d, RW2d; \
0332 rorl $1, left##2d; \
0333 xorl left##2d, RW2d; \
0334 andl $0xaaaaaaaa, RW2d; \
0335 xorl RW2d, right##2d; \
0336 xorl RW2d, left##2d; \
0337 rorl $1, right##2d; \
0338 \
0339 do_permutation(right##0d, left##0d, 8, 0x00ff00ff); \
0340 do_permutation(right##0d, left##0d, 2, 0x33333333); \
0341 do_permutation(right##1d, left##1d, 8, 0x00ff00ff); \
0342 do_permutation(right##1d, left##1d, 2, 0x33333333); \
0343 do_permutation(right##2d, left##2d, 8, 0x00ff00ff); \
0344 do_permutation(right##2d, left##2d, 2, 0x33333333); \
0345 \
0346 do_permutation(left##0d, right##0d, 16, 0x0000ffff); \
0347 do_permutation(left##0d, right##0d, 4, 0x0f0f0f0f); \
0348 do_permutation(left##1d, right##1d, 16, 0x0000ffff); \
0349 do_permutation(left##1d, right##1d, 4, 0x0f0f0f0f); \
0350 do_permutation(left##2d, right##2d, 16, 0x0000ffff); \
0351 do_permutation(left##2d, right##2d, 4, 0x0f0f0f0f);
0352
0353 #define round3(n, from, to, load_next_key, do_movq) \
0354 xorq from##0, RW0; \
0355 movzbl RW0bl, RT3d; \
0356 movzbl RW0bh, RT1d; \
0357 shrq $16, RW0; \
0358 xorq s8(, RT3, 8), to##0; \
0359 xorq s6(, RT1, 8), to##0; \
0360 movzbl RW0bl, RT3d; \
0361 movzbl RW0bh, RT1d; \
0362 shrq $16, RW0; \
0363 xorq s4(, RT3, 8), to##0; \
0364 xorq s2(, RT1, 8), to##0; \
0365 movzbl RW0bl, RT3d; \
0366 movzbl RW0bh, RT1d; \
0367 shrl $16, RW0d; \
0368 xorq s7(, RT3, 8), to##0; \
0369 xorq s5(, RT1, 8), to##0; \
0370 movzbl RW0bl, RT3d; \
0371 movzbl RW0bh, RT1d; \
0372 load_next_key(n, RW0); \
0373 xorq s3(, RT3, 8), to##0; \
0374 xorq s1(, RT1, 8), to##0; \
0375 xorq from##1, RW1; \
0376 movzbl RW1bl, RT3d; \
0377 movzbl RW1bh, RT1d; \
0378 shrq $16, RW1; \
0379 xorq s8(, RT3, 8), to##1; \
0380 xorq s6(, RT1, 8), to##1; \
0381 movzbl RW1bl, RT3d; \
0382 movzbl RW1bh, RT1d; \
0383 shrq $16, RW1; \
0384 xorq s4(, RT3, 8), to##1; \
0385 xorq s2(, RT1, 8), to##1; \
0386 movzbl RW1bl, RT3d; \
0387 movzbl RW1bh, RT1d; \
0388 shrl $16, RW1d; \
0389 xorq s7(, RT3, 8), to##1; \
0390 xorq s5(, RT1, 8), to##1; \
0391 movzbl RW1bl, RT3d; \
0392 movzbl RW1bh, RT1d; \
0393 do_movq(RW0, RW1); \
0394 xorq s3(, RT3, 8), to##1; \
0395 xorq s1(, RT1, 8), to##1; \
0396 xorq from##2, RW2; \
0397 movzbl RW2bl, RT3d; \
0398 movzbl RW2bh, RT1d; \
0399 shrq $16, RW2; \
0400 xorq s8(, RT3, 8), to##2; \
0401 xorq s6(, RT1, 8), to##2; \
0402 movzbl RW2bl, RT3d; \
0403 movzbl RW2bh, RT1d; \
0404 shrq $16, RW2; \
0405 xorq s4(, RT3, 8), to##2; \
0406 xorq s2(, RT1, 8), to##2; \
0407 movzbl RW2bl, RT3d; \
0408 movzbl RW2bh, RT1d; \
0409 shrl $16, RW2d; \
0410 xorq s7(, RT3, 8), to##2; \
0411 xorq s5(, RT1, 8), to##2; \
0412 movzbl RW2bl, RT3d; \
0413 movzbl RW2bh, RT1d; \
0414 do_movq(RW0, RW2); \
0415 xorq s3(, RT3, 8), to##2; \
0416 xorq s1(, RT1, 8), to##2;
0417
0418 #define __movq(src, dst) \
0419 movq src, dst;
0420
0421 SYM_FUNC_START(des3_ede_x86_64_crypt_blk_3way)
0422
0423
0424
0425
0426
0427
0428 pushq %rbx;
0429 pushq %r12;
0430 pushq %r13;
0431 pushq %r14;
0432 pushq %r15;
0433
0434 pushq %rsi
0435
0436
0437 movl 0 * 4(%rdx), RL0d;
0438 movl 1 * 4(%rdx), RR0d;
0439 movl 2 * 4(%rdx), RL1d;
0440 movl 3 * 4(%rdx), RR1d;
0441 movl 4 * 4(%rdx), RL2d;
0442 movl 5 * 4(%rdx), RR2d;
0443
0444 bswapl RL0d;
0445 bswapl RR0d;
0446 bswapl RL1d;
0447 bswapl RR1d;
0448 bswapl RL2d;
0449 bswapl RR2d;
0450
0451 initial_permutation3(RL, RR);
0452
0453 movq 0(CTX), RW0;
0454 movq RW0, RW1;
0455 movq RW0, RW2;
0456
0457 round3(0, RR, RL, load_next_key, __movq);
0458 round3(1, RL, RR, load_next_key, __movq);
0459 round3(2, RR, RL, load_next_key, __movq);
0460 round3(3, RL, RR, load_next_key, __movq);
0461 round3(4, RR, RL, load_next_key, __movq);
0462 round3(5, RL, RR, load_next_key, __movq);
0463 round3(6, RR, RL, load_next_key, __movq);
0464 round3(7, RL, RR, load_next_key, __movq);
0465 round3(8, RR, RL, load_next_key, __movq);
0466 round3(9, RL, RR, load_next_key, __movq);
0467 round3(10, RR, RL, load_next_key, __movq);
0468 round3(11, RL, RR, load_next_key, __movq);
0469 round3(12, RR, RL, load_next_key, __movq);
0470 round3(13, RL, RR, load_next_key, __movq);
0471 round3(14, RR, RL, load_next_key, __movq);
0472 round3(15, RL, RR, load_next_key, __movq);
0473
0474 round3(16+0, RL, RR, load_next_key, __movq);
0475 round3(16+1, RR, RL, load_next_key, __movq);
0476 round3(16+2, RL, RR, load_next_key, __movq);
0477 round3(16+3, RR, RL, load_next_key, __movq);
0478 round3(16+4, RL, RR, load_next_key, __movq);
0479 round3(16+5, RR, RL, load_next_key, __movq);
0480 round3(16+6, RL, RR, load_next_key, __movq);
0481 round3(16+7, RR, RL, load_next_key, __movq);
0482 round3(16+8, RL, RR, load_next_key, __movq);
0483 round3(16+9, RR, RL, load_next_key, __movq);
0484 round3(16+10, RL, RR, load_next_key, __movq);
0485 round3(16+11, RR, RL, load_next_key, __movq);
0486 round3(16+12, RL, RR, load_next_key, __movq);
0487 round3(16+13, RR, RL, load_next_key, __movq);
0488 round3(16+14, RL, RR, load_next_key, __movq);
0489 round3(16+15, RR, RL, load_next_key, __movq);
0490
0491 round3(32+0, RR, RL, load_next_key, __movq);
0492 round3(32+1, RL, RR, load_next_key, __movq);
0493 round3(32+2, RR, RL, load_next_key, __movq);
0494 round3(32+3, RL, RR, load_next_key, __movq);
0495 round3(32+4, RR, RL, load_next_key, __movq);
0496 round3(32+5, RL, RR, load_next_key, __movq);
0497 round3(32+6, RR, RL, load_next_key, __movq);
0498 round3(32+7, RL, RR, load_next_key, __movq);
0499 round3(32+8, RR, RL, load_next_key, __movq);
0500 round3(32+9, RL, RR, load_next_key, __movq);
0501 round3(32+10, RR, RL, load_next_key, __movq);
0502 round3(32+11, RL, RR, load_next_key, __movq);
0503 round3(32+12, RR, RL, load_next_key, __movq);
0504 round3(32+13, RL, RR, load_next_key, __movq);
0505 round3(32+14, RR, RL, load_next_key, __movq);
0506 round3(32+15, RL, RR, dummy2, dummy2);
0507
0508 final_permutation3(RR, RL);
0509
0510 bswapl RR0d;
0511 bswapl RL0d;
0512 bswapl RR1d;
0513 bswapl RL1d;
0514 bswapl RR2d;
0515 bswapl RL2d;
0516
0517 popq %rsi
0518 movl RR0d, 0 * 4(%rsi);
0519 movl RL0d, 1 * 4(%rsi);
0520 movl RR1d, 2 * 4(%rsi);
0521 movl RL1d, 3 * 4(%rsi);
0522 movl RR2d, 4 * 4(%rsi);
0523 movl RL2d, 5 * 4(%rsi);
0524
0525 popq %r15;
0526 popq %r14;
0527 popq %r13;
0528 popq %r12;
0529 popq %rbx;
0530
0531 RET;
0532 SYM_FUNC_END(des3_ede_x86_64_crypt_blk_3way)
0533
0534 .section .rodata, "a", @progbits
0535 .align 16
0536 .L_s1:
0537 .quad 0x0010100001010400, 0x0000000000000000
0538 .quad 0x0000100000010000, 0x0010100001010404
0539 .quad 0x0010100001010004, 0x0000100000010404
0540 .quad 0x0000000000000004, 0x0000100000010000
0541 .quad 0x0000000000000400, 0x0010100001010400
0542 .quad 0x0010100001010404, 0x0000000000000400
0543 .quad 0x0010000001000404, 0x0010100001010004
0544 .quad 0x0010000001000000, 0x0000000000000004
0545 .quad 0x0000000000000404, 0x0010000001000400
0546 .quad 0x0010000001000400, 0x0000100000010400
0547 .quad 0x0000100000010400, 0x0010100001010000
0548 .quad 0x0010100001010000, 0x0010000001000404
0549 .quad 0x0000100000010004, 0x0010000001000004
0550 .quad 0x0010000001000004, 0x0000100000010004
0551 .quad 0x0000000000000000, 0x0000000000000404
0552 .quad 0x0000100000010404, 0x0010000001000000
0553 .quad 0x0000100000010000, 0x0010100001010404
0554 .quad 0x0000000000000004, 0x0010100001010000
0555 .quad 0x0010100001010400, 0x0010000001000000
0556 .quad 0x0010000001000000, 0x0000000000000400
0557 .quad 0x0010100001010004, 0x0000100000010000
0558 .quad 0x0000100000010400, 0x0010000001000004
0559 .quad 0x0000000000000400, 0x0000000000000004
0560 .quad 0x0010000001000404, 0x0000100000010404
0561 .quad 0x0010100001010404, 0x0000100000010004
0562 .quad 0x0010100001010000, 0x0010000001000404
0563 .quad 0x0010000001000004, 0x0000000000000404
0564 .quad 0x0000100000010404, 0x0010100001010400
0565 .quad 0x0000000000000404, 0x0010000001000400
0566 .quad 0x0010000001000400, 0x0000000000000000
0567 .quad 0x0000100000010004, 0x0000100000010400
0568 .quad 0x0000000000000000, 0x0010100001010004
0569 .L_s2:
0570 .quad 0x0801080200100020, 0x0800080000000000
0571 .quad 0x0000080000000000, 0x0001080200100020
0572 .quad 0x0001000000100000, 0x0000000200000020
0573 .quad 0x0801000200100020, 0x0800080200000020
0574 .quad 0x0800000200000020, 0x0801080200100020
0575 .quad 0x0801080000100000, 0x0800000000000000
0576 .quad 0x0800080000000000, 0x0001000000100000
0577 .quad 0x0000000200000020, 0x0801000200100020
0578 .quad 0x0001080000100000, 0x0001000200100020
0579 .quad 0x0800080200000020, 0x0000000000000000
0580 .quad 0x0800000000000000, 0x0000080000000000
0581 .quad 0x0001080200100020, 0x0801000000100000
0582 .quad 0x0001000200100020, 0x0800000200000020
0583 .quad 0x0000000000000000, 0x0001080000100000
0584 .quad 0x0000080200000020, 0x0801080000100000
0585 .quad 0x0801000000100000, 0x0000080200000020
0586 .quad 0x0000000000000000, 0x0001080200100020
0587 .quad 0x0801000200100020, 0x0001000000100000
0588 .quad 0x0800080200000020, 0x0801000000100000
0589 .quad 0x0801080000100000, 0x0000080000000000
0590 .quad 0x0801000000100000, 0x0800080000000000
0591 .quad 0x0000000200000020, 0x0801080200100020
0592 .quad 0x0001080200100020, 0x0000000200000020
0593 .quad 0x0000080000000000, 0x0800000000000000
0594 .quad 0x0000080200000020, 0x0801080000100000
0595 .quad 0x0001000000100000, 0x0800000200000020
0596 .quad 0x0001000200100020, 0x0800080200000020
0597 .quad 0x0800000200000020, 0x0001000200100020
0598 .quad 0x0001080000100000, 0x0000000000000000
0599 .quad 0x0800080000000000, 0x0000080200000020
0600 .quad 0x0800000000000000, 0x0801000200100020
0601 .quad 0x0801080200100020, 0x0001080000100000
0602 .L_s3:
0603 .quad 0x0000002000000208, 0x0000202008020200
0604 .quad 0x0000000000000000, 0x0000200008020008
0605 .quad 0x0000002008000200, 0x0000000000000000
0606 .quad 0x0000202000020208, 0x0000002008000200
0607 .quad 0x0000200000020008, 0x0000000008000008
0608 .quad 0x0000000008000008, 0x0000200000020000
0609 .quad 0x0000202008020208, 0x0000200000020008
0610 .quad 0x0000200008020000, 0x0000002000000208
0611 .quad 0x0000000008000000, 0x0000000000000008
0612 .quad 0x0000202008020200, 0x0000002000000200
0613 .quad 0x0000202000020200, 0x0000200008020000
0614 .quad 0x0000200008020008, 0x0000202000020208
0615 .quad 0x0000002008000208, 0x0000202000020200
0616 .quad 0x0000200000020000, 0x0000002008000208
0617 .quad 0x0000000000000008, 0x0000202008020208
0618 .quad 0x0000002000000200, 0x0000000008000000
0619 .quad 0x0000202008020200, 0x0000000008000000
0620 .quad 0x0000200000020008, 0x0000002000000208
0621 .quad 0x0000200000020000, 0x0000202008020200
0622 .quad 0x0000002008000200, 0x0000000000000000
0623 .quad 0x0000002000000200, 0x0000200000020008
0624 .quad 0x0000202008020208, 0x0000002008000200
0625 .quad 0x0000000008000008, 0x0000002000000200
0626 .quad 0x0000000000000000, 0x0000200008020008
0627 .quad 0x0000002008000208, 0x0000200000020000
0628 .quad 0x0000000008000000, 0x0000202008020208
0629 .quad 0x0000000000000008, 0x0000202000020208
0630 .quad 0x0000202000020200, 0x0000000008000008
0631 .quad 0x0000200008020000, 0x0000002008000208
0632 .quad 0x0000002000000208, 0x0000200008020000
0633 .quad 0x0000202000020208, 0x0000000000000008
0634 .quad 0x0000200008020008, 0x0000202000020200
0635 .L_s4:
0636 .quad 0x1008020000002001, 0x1000020800002001
0637 .quad 0x1000020800002001, 0x0000000800000000
0638 .quad 0x0008020800002000, 0x1008000800000001
0639 .quad 0x1008000000000001, 0x1000020000002001
0640 .quad 0x0000000000000000, 0x0008020000002000
0641 .quad 0x0008020000002000, 0x1008020800002001
0642 .quad 0x1000000800000001, 0x0000000000000000
0643 .quad 0x0008000800000000, 0x1008000000000001
0644 .quad 0x1000000000000001, 0x0000020000002000
0645 .quad 0x0008000000000000, 0x1008020000002001
0646 .quad 0x0000000800000000, 0x0008000000000000
0647 .quad 0x1000020000002001, 0x0000020800002000
0648 .quad 0x1008000800000001, 0x1000000000000001
0649 .quad 0x0000020800002000, 0x0008000800000000
0650 .quad 0x0000020000002000, 0x0008020800002000
0651 .quad 0x1008020800002001, 0x1000000800000001
0652 .quad 0x0008000800000000, 0x1008000000000001
0653 .quad 0x0008020000002000, 0x1008020800002001
0654 .quad 0x1000000800000001, 0x0000000000000000
0655 .quad 0x0000000000000000, 0x0008020000002000
0656 .quad 0x0000020800002000, 0x0008000800000000
0657 .quad 0x1008000800000001, 0x1000000000000001
0658 .quad 0x1008020000002001, 0x1000020800002001
0659 .quad 0x1000020800002001, 0x0000000800000000
0660 .quad 0x1008020800002001, 0x1000000800000001
0661 .quad 0x1000000000000001, 0x0000020000002000
0662 .quad 0x1008000000000001, 0x1000020000002001
0663 .quad 0x0008020800002000, 0x1008000800000001
0664 .quad 0x1000020000002001, 0x0000020800002000
0665 .quad 0x0008000000000000, 0x1008020000002001
0666 .quad 0x0000000800000000, 0x0008000000000000
0667 .quad 0x0000020000002000, 0x0008020800002000
0668 .L_s5:
0669 .quad 0x0000001000000100, 0x0020001002080100
0670 .quad 0x0020000002080000, 0x0420001002000100
0671 .quad 0x0000000000080000, 0x0000001000000100
0672 .quad 0x0400000000000000, 0x0020000002080000
0673 .quad 0x0400001000080100, 0x0000000000080000
0674 .quad 0x0020001002000100, 0x0400001000080100
0675 .quad 0x0420001002000100, 0x0420000002080000
0676 .quad 0x0000001000080100, 0x0400000000000000
0677 .quad 0x0020000002000000, 0x0400000000080000
0678 .quad 0x0400000000080000, 0x0000000000000000
0679 .quad 0x0400001000000100, 0x0420001002080100
0680 .quad 0x0420001002080100, 0x0020001002000100
0681 .quad 0x0420000002080000, 0x0400001000000100
0682 .quad 0x0000000000000000, 0x0420000002000000
0683 .quad 0x0020001002080100, 0x0020000002000000
0684 .quad 0x0420000002000000, 0x0000001000080100
0685 .quad 0x0000000000080000, 0x0420001002000100
0686 .quad 0x0000001000000100, 0x0020000002000000
0687 .quad 0x0400000000000000, 0x0020000002080000
0688 .quad 0x0420001002000100, 0x0400001000080100
0689 .quad 0x0020001002000100, 0x0400000000000000
0690 .quad 0x0420000002080000, 0x0020001002080100
0691 .quad 0x0400001000080100, 0x0000001000000100
0692 .quad 0x0020000002000000, 0x0420000002080000
0693 .quad 0x0420001002080100, 0x0000001000080100
0694 .quad 0x0420000002000000, 0x0420001002080100
0695 .quad 0x0020000002080000, 0x0000000000000000
0696 .quad 0x0400000000080000, 0x0420000002000000
0697 .quad 0x0000001000080100, 0x0020001002000100
0698 .quad 0x0400001000000100, 0x0000000000080000
0699 .quad 0x0000000000000000, 0x0400000000080000
0700 .quad 0x0020001002080100, 0x0400001000000100
0701 .L_s6:
0702 .quad 0x0200000120000010, 0x0204000020000000
0703 .quad 0x0000040000000000, 0x0204040120000010
0704 .quad 0x0204000020000000, 0x0000000100000010
0705 .quad 0x0204040120000010, 0x0004000000000000
0706 .quad 0x0200040020000000, 0x0004040100000010
0707 .quad 0x0004000000000000, 0x0200000120000010
0708 .quad 0x0004000100000010, 0x0200040020000000
0709 .quad 0x0200000020000000, 0x0000040100000010
0710 .quad 0x0000000000000000, 0x0004000100000010
0711 .quad 0x0200040120000010, 0x0000040000000000
0712 .quad 0x0004040000000000, 0x0200040120000010
0713 .quad 0x0000000100000010, 0x0204000120000010
0714 .quad 0x0204000120000010, 0x0000000000000000
0715 .quad 0x0004040100000010, 0x0204040020000000
0716 .quad 0x0000040100000010, 0x0004040000000000
0717 .quad 0x0204040020000000, 0x0200000020000000
0718 .quad 0x0200040020000000, 0x0000000100000010
0719 .quad 0x0204000120000010, 0x0004040000000000
0720 .quad 0x0204040120000010, 0x0004000000000000
0721 .quad 0x0000040100000010, 0x0200000120000010
0722 .quad 0x0004000000000000, 0x0200040020000000
0723 .quad 0x0200000020000000, 0x0000040100000010
0724 .quad 0x0200000120000010, 0x0204040120000010
0725 .quad 0x0004040000000000, 0x0204000020000000
0726 .quad 0x0004040100000010, 0x0204040020000000
0727 .quad 0x0000000000000000, 0x0204000120000010
0728 .quad 0x0000000100000010, 0x0000040000000000
0729 .quad 0x0204000020000000, 0x0004040100000010
0730 .quad 0x0000040000000000, 0x0004000100000010
0731 .quad 0x0200040120000010, 0x0000000000000000
0732 .quad 0x0204040020000000, 0x0200000020000000
0733 .quad 0x0004000100000010, 0x0200040120000010
0734 .L_s7:
0735 .quad 0x0002000000200000, 0x2002000004200002
0736 .quad 0x2000000004000802, 0x0000000000000000
0737 .quad 0x0000000000000800, 0x2000000004000802
0738 .quad 0x2002000000200802, 0x0002000004200800
0739 .quad 0x2002000004200802, 0x0002000000200000
0740 .quad 0x0000000000000000, 0x2000000004000002
0741 .quad 0x2000000000000002, 0x0000000004000000
0742 .quad 0x2002000004200002, 0x2000000000000802
0743 .quad 0x0000000004000800, 0x2002000000200802
0744 .quad 0x2002000000200002, 0x0000000004000800
0745 .quad 0x2000000004000002, 0x0002000004200000
0746 .quad 0x0002000004200800, 0x2002000000200002
0747 .quad 0x0002000004200000, 0x0000000000000800
0748 .quad 0x2000000000000802, 0x2002000004200802
0749 .quad 0x0002000000200800, 0x2000000000000002
0750 .quad 0x0000000004000000, 0x0002000000200800
0751 .quad 0x0000000004000000, 0x0002000000200800
0752 .quad 0x0002000000200000, 0x2000000004000802
0753 .quad 0x2000000004000802, 0x2002000004200002
0754 .quad 0x2002000004200002, 0x2000000000000002
0755 .quad 0x2002000000200002, 0x0000000004000000
0756 .quad 0x0000000004000800, 0x0002000000200000
0757 .quad 0x0002000004200800, 0x2000000000000802
0758 .quad 0x2002000000200802, 0x0002000004200800
0759 .quad 0x2000000000000802, 0x2000000004000002
0760 .quad 0x2002000004200802, 0x0002000004200000
0761 .quad 0x0002000000200800, 0x0000000000000000
0762 .quad 0x2000000000000002, 0x2002000004200802
0763 .quad 0x0000000000000000, 0x2002000000200802
0764 .quad 0x0002000004200000, 0x0000000000000800
0765 .quad 0x2000000004000002, 0x0000000004000800
0766 .quad 0x0000000000000800, 0x2002000000200002
0767 .L_s8:
0768 .quad 0x0100010410001000, 0x0000010000001000
0769 .quad 0x0000000000040000, 0x0100010410041000
0770 .quad 0x0100000010000000, 0x0100010410001000
0771 .quad 0x0000000400000000, 0x0100000010000000
0772 .quad 0x0000000400040000, 0x0100000010040000
0773 .quad 0x0100010410041000, 0x0000010000041000
0774 .quad 0x0100010010041000, 0x0000010400041000
0775 .quad 0x0000010000001000, 0x0000000400000000
0776 .quad 0x0100000010040000, 0x0100000410000000
0777 .quad 0x0100010010001000, 0x0000010400001000
0778 .quad 0x0000010000041000, 0x0000000400040000
0779 .quad 0x0100000410040000, 0x0100010010041000
0780 .quad 0x0000010400001000, 0x0000000000000000
0781 .quad 0x0000000000000000, 0x0100000410040000
0782 .quad 0x0100000410000000, 0x0100010010001000
0783 .quad 0x0000010400041000, 0x0000000000040000
0784 .quad 0x0000010400041000, 0x0000000000040000
0785 .quad 0x0100010010041000, 0x0000010000001000
0786 .quad 0x0000000400000000, 0x0100000410040000
0787 .quad 0x0000010000001000, 0x0000010400041000
0788 .quad 0x0100010010001000, 0x0000000400000000
0789 .quad 0x0100000410000000, 0x0100000010040000
0790 .quad 0x0100000410040000, 0x0100000010000000
0791 .quad 0x0000000000040000, 0x0100010410001000
0792 .quad 0x0000000000000000, 0x0100010410041000
0793 .quad 0x0000000400040000, 0x0100000410000000
0794 .quad 0x0100000010040000, 0x0100010010001000
0795 .quad 0x0100010410001000, 0x0000000000000000
0796 .quad 0x0100010410041000, 0x0000010000041000
0797 .quad 0x0000010000041000, 0x0000010400001000
0798 .quad 0x0000010400001000, 0x0000000400040000
0799 .quad 0x0100000010000000, 0x0100010010041000