2019-05-27 09:55:06 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2014-06-09 21:59:54 +04:00
/ *
* des3 _ e d e - a s m _ 6 4 . S - x86 - 6 4 a s s e m b l y i m p l e m e n t a t i o n o f 3 D E S c i p h e r
*
* Copyright © 2 0 1 4 J u s s i K i v i l i n n a < j u s s i . k i v i l i n n a @iki.fi>
* /
# include < l i n u x / l i n k a g e . h >
.file " des3 _ e d e - a s m _ 6 4 . S "
.text
# define s1 . L _ s1
# define s2 ( ( s1 ) + ( 6 4 * 8 ) )
# define s3 ( ( s2 ) + ( 6 4 * 8 ) )
# define s4 ( ( s3 ) + ( 6 4 * 8 ) )
# define s5 ( ( s4 ) + ( 6 4 * 8 ) )
# define s6 ( ( s5 ) + ( 6 4 * 8 ) )
# define s7 ( ( s6 ) + ( 6 4 * 8 ) )
# define s8 ( ( s7 ) + ( 6 4 * 8 ) )
/* register macros */
# define C T X % r d i
# define R L 0 % r8
# define R L 1 % r9
# define R L 2 % r10
# define R L 0 d % r8 d
# define R L 1 d % r9 d
# define R L 2 d % r10 d
# define R R 0 % r11
# define R R 1 % r12
# define R R 2 % r13
# define R R 0 d % r11 d
# define R R 1 d % r12 d
# define R R 2 d % r13 d
# define R W 0 % r a x
# define R W 1 % r b x
# define R W 2 % r c x
# define R W 0 d % e a x
# define R W 1 d % e b x
# define R W 2 d % e c x
# define R W 0 b l % a l
# define R W 1 b l % b l
# define R W 2 b l % c l
# define R W 0 b h % a h
# define R W 1 b h % b h
# define R W 2 b h % c h
# define R T 0 % r15
2017-09-18 22:42:04 +03:00
# define R T 1 % r s i
2014-06-09 21:59:54 +04:00
# define R T 2 % r14
# define R T 3 % r d x
# define R T 0 d % r15 d
2017-09-18 22:42:04 +03:00
# define R T 1 d % e s i
2014-06-09 21:59:54 +04:00
# define R T 2 d % r14 d
# define R T 3 d % e d x
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* 1 - way 3 D E S
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
# define d o _ p e r m u t a t i o n ( a , b , o f f s e t , m a s k ) \
movl a , R T 0 d ; \
shrl $ ( o f f s e t ) , R T 0 d ; \
xorl b , R T 0 d ; \
andl $ ( m a s k ) , R T 0 d ; \
xorl R T 0 d , b ; \
shll $ ( o f f s e t ) , R T 0 d ; \
xorl R T 0 d , a ;
# define e x p a n d _ t o _ 6 4 b i t s ( v a l , m a s k ) \
movl v a l ## d , R T 0 d ; \
rorl $ 4 , R T 0 d ; \
shlq $ 3 2 , R T 0 ; \
orq R T 0 , v a l ; \
andq m a s k , v a l ;
# define c o m p r e s s _ t o _ 6 4 b i t s ( v a l ) \
movq v a l , R T 0 ; \
shrq $ 3 2 , R T 0 ; \
roll $ 4 , R T 0 d ; \
orl R T 0 d , v a l ## d ;
# define i n i t i a l _ p e r m u t a t i o n ( l e f t , r i g h t ) \
do_ p e r m u t a t i o n ( l e f t ## d , r i g h t # # d , 4 , 0 x0 f0 f0 f0 f ) ; \
do_ p e r m u t a t i o n ( l e f t ## d , r i g h t # # d , 16 , 0 x00 0 0 f f f f ) ; \
do_ p e r m u t a t i o n ( r i g h t ## d , l e f t # # d , 2 , 0 x33 3 3 3 3 3 3 ) ; \
do_ p e r m u t a t i o n ( r i g h t ## d , l e f t # # d , 8 , 0 x00 f f00 f f ) ; \
movabs $ 0 x3 f3 f3 f3 f3 f3 f3 f3 f , R T 3 ; \
movl l e f t ## d , R W 0 d ; \
roll $ 1 , r i g h t ## d ; \
xorl r i g h t ## d , R W 0 d ; \
andl $ 0 x a a a a a a a a , R W 0 d ; \
xorl R W 0 d , l e f t ## d ; \
xorl R W 0 d , r i g h t ## d ; \
roll $ 1 , l e f t ## d ; \
expand_ t o _ 6 4 b i t s ( r i g h t , R T 3 ) ; \
expand_ t o _ 6 4 b i t s ( l e f t , R T 3 ) ;
# define f i n a l _ p e r m u t a t i o n ( l e f t , r i g h t ) \
compress_ t o _ 6 4 b i t s ( r i g h t ) ; \
compress_ t o _ 6 4 b i t s ( l e f t ) ; \
movl r i g h t ## d , R W 0 d ; \
rorl $ 1 , l e f t ## d ; \
xorl l e f t ## d , R W 0 d ; \
andl $ 0 x a a a a a a a a , R W 0 d ; \
xorl R W 0 d , r i g h t ## d ; \
xorl R W 0 d , l e f t ## d ; \
rorl $ 1 , r i g h t ## d ; \
do_ p e r m u t a t i o n ( r i g h t ## d , l e f t # # d , 8 , 0 x00 f f00 f f ) ; \
do_ p e r m u t a t i o n ( r i g h t ## d , l e f t # # d , 2 , 0 x33 3 3 3 3 3 3 ) ; \
do_ p e r m u t a t i o n ( l e f t ## d , r i g h t # # d , 16 , 0 x00 0 0 f f f f ) ; \
do_ p e r m u t a t i o n ( l e f t ## d , r i g h t # # d , 4 , 0 x0 f0 f0 f0 f ) ;
# define r o u n d1 ( n , f r o m , t o , l o a d _ n e x t _ k e y ) \
xorq f r o m , R W 0 ; \
\
movzbl R W 0 b l , R T 0 d ; \
movzbl R W 0 b h , R T 1 d ; \
shrq $ 1 6 , R W 0 ; \
movzbl R W 0 b l , R T 2 d ; \
movzbl R W 0 b h , R T 3 d ; \
shrq $ 1 6 , R W 0 ; \
movq s8 ( , R T 0 , 8 ) , R T 0 ; \
xorq s6 ( , R T 1 , 8 ) , t o ; \
movzbl R W 0 b l , R L 1 d ; \
movzbl R W 0 b h , R T 1 d ; \
shrl $ 1 6 , R W 0 d ; \
xorq s4 ( , R T 2 , 8 ) , R T 0 ; \
xorq s2 ( , R T 3 , 8 ) , t o ; \
movzbl R W 0 b l , R T 2 d ; \
movzbl R W 0 b h , R T 3 d ; \
xorq s7 ( , R L 1 , 8 ) , R T 0 ; \
xorq s5 ( , R T 1 , 8 ) , t o ; \
xorq s3 ( , R T 2 , 8 ) , R T 0 ; \
load_ n e x t _ k e y ( n , R W 0 ) ; \
xorq R T 0 , t o ; \
xorq s1 ( , R T 3 , 8 ) , t o ; \
# define l o a d _ n e x t _ k e y ( n , R W x ) \
movq ( ( ( n ) + 1 ) * 8 ) ( C T X ) , R W x ;
# define d u m m y 2 ( a , b ) / * _ * /
# define r e a d _ b l o c k ( i o , l e f t , r i g h t ) \
movl ( i o ) , l e f t ## d ; \
movl 4 ( i o ) , r i g h t ## d ; \
bswapl l e f t ## d ; \
bswapl r i g h t ## d ;
# define w r i t e _ b l o c k ( i o , l e f t , r i g h t ) \
bswapl l e f t ## d ; \
bswapl r i g h t ## d ; \
movl l e f t ## d , ( i o ) ; \
movl r i g h t ## d , 4 ( i o ) ;
ENTRY( d e s3 _ e d e _ x86 _ 6 4 _ c r y p t _ b l k )
/ * input :
* % rdi : round k e y s , C T X
* % rsi : dst
* % rdx : src
* /
pushq % r b x ;
pushq % r12 ;
pushq % r13 ;
pushq % r14 ;
pushq % r15 ;
2017-09-18 22:42:04 +03:00
pushq % r s i ; /* dst */
2014-06-09 21:59:54 +04:00
read_ b l o c k ( % r d x , R L 0 , R R 0 ) ;
initial_ p e r m u t a t i o n ( R L 0 , R R 0 ) ;
movq ( C T X ) , R W 0 ;
round1 ( 0 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 2 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 4 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 5 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 6 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 7 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 8 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 9 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 0 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 1 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 2 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 3 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 4 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 5 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 0 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 1 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 2 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 3 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 4 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 5 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 6 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 7 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 8 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 9 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 1 0 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 1 1 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 1 2 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 1 3 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 1 4 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 1 6 + 1 5 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 0 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 1 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 2 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 3 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 4 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 5 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 6 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 7 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 8 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 9 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 1 0 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 1 1 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 1 2 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 1 3 , R L 0 , R R 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 1 4 , R R 0 , R L 0 , l o a d _ n e x t _ k e y ) ;
round1 ( 3 2 + 1 5 , R L 0 , R R 0 , d u m m y 2 ) ;
final_ p e r m u t a t i o n ( R R 0 , R L 0 ) ;
2017-09-18 22:42:04 +03:00
popq % r s i / * d s t * /
2014-06-09 21:59:54 +04:00
write_ b l o c k ( % r s i , R R 0 , R L 0 ) ;
popq % r15 ;
popq % r14 ;
popq % r13 ;
popq % r12 ;
popq % r b x ;
ret;
ENDPROC( d e s3 _ e d e _ x86 _ 6 4 _ c r y p t _ b l k )
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* 3 - way 3 D E S
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
# define e x p a n d _ t o _ 6 4 b i t s ( v a l , m a s k ) \
movl v a l ## d , R T 0 d ; \
rorl $ 4 , R T 0 d ; \
shlq $ 3 2 , R T 0 ; \
orq R T 0 , v a l ; \
andq m a s k , v a l ;
# define c o m p r e s s _ t o _ 6 4 b i t s ( v a l ) \
movq v a l , R T 0 ; \
shrq $ 3 2 , R T 0 ; \
roll $ 4 , R T 0 d ; \
orl R T 0 d , v a l ## d ;
# define i n i t i a l _ p e r m u t a t i o n 3 ( l e f t , r i g h t ) \
do_ p e r m u t a t i o n ( l e f t ## 0 d , r i g h t ## 0 d , 4 , 0 x0 f0 f0 f0 f ) ; \
do_ p e r m u t a t i o n ( l e f t ## 0 d , r i g h t ## 0 d , 1 6 , 0 x00 0 0 f f f f ) ; \
do_ p e r m u t a t i o n ( l e f t ## 1 d , r i g h t ## 1 d , 4 , 0 x0 f0 f0 f0 f ) ; \
do_ p e r m u t a t i o n ( l e f t ## 1 d , r i g h t ## 1 d , 1 6 , 0 x00 0 0 f f f f ) ; \
do_ p e r m u t a t i o n ( l e f t ## 2 d , r i g h t ## 2 d , 4 , 0 x0 f0 f0 f0 f ) ; \
do_ p e r m u t a t i o n ( l e f t ## 2 d , r i g h t ## 2 d , 1 6 , 0 x00 0 0 f f f f ) ; \
\
do_ p e r m u t a t i o n ( r i g h t ## 0 d , l e f t ## 0 d , 2 , 0 x33 3 3 3 3 3 3 ) ; \
do_ p e r m u t a t i o n ( r i g h t ## 0 d , l e f t ## 0 d , 8 , 0 x00 f f00 f f ) ; \
do_ p e r m u t a t i o n ( r i g h t ## 1 d , l e f t ## 1 d , 2 , 0 x33 3 3 3 3 3 3 ) ; \
do_ p e r m u t a t i o n ( r i g h t ## 1 d , l e f t ## 1 d , 8 , 0 x00 f f00 f f ) ; \
do_ p e r m u t a t i o n ( r i g h t ## 2 d , l e f t ## 2 d , 2 , 0 x33 3 3 3 3 3 3 ) ; \
do_ p e r m u t a t i o n ( r i g h t ## 2 d , l e f t ## 2 d , 8 , 0 x00 f f00 f f ) ; \
\
movabs $ 0 x3 f3 f3 f3 f3 f3 f3 f3 f , R T 3 ; \
\
movl l e f t ## 0 d , R W 0 d ; \
roll $ 1 , r i g h t ## 0 d ; \
xorl r i g h t ## 0 d , R W 0 d ; \
andl $ 0 x a a a a a a a a , R W 0 d ; \
xorl R W 0 d , l e f t ## 0 d ; \
xorl R W 0 d , r i g h t ## 0 d ; \
roll $ 1 , l e f t ## 0 d ; \
expand_ t o _ 6 4 b i t s ( r i g h t ## 0 , R T 3 ) ; \
expand_ t o _ 6 4 b i t s ( l e f t ## 0 , R T 3 ) ; \
movl l e f t ## 1 d , R W 1 d ; \
roll $ 1 , r i g h t ## 1 d ; \
xorl r i g h t ## 1 d , R W 1 d ; \
andl $ 0 x a a a a a a a a , R W 1 d ; \
xorl R W 1 d , l e f t ## 1 d ; \
xorl R W 1 d , r i g h t ## 1 d ; \
roll $ 1 , l e f t ## 1 d ; \
expand_ t o _ 6 4 b i t s ( r i g h t ## 1 , R T 3 ) ; \
expand_ t o _ 6 4 b i t s ( l e f t ## 1 , R T 3 ) ; \
movl l e f t ## 2 d , R W 2 d ; \
roll $ 1 , r i g h t ## 2 d ; \
xorl r i g h t ## 2 d , R W 2 d ; \
andl $ 0 x a a a a a a a a , R W 2 d ; \
xorl R W 2 d , l e f t ## 2 d ; \
xorl R W 2 d , r i g h t ## 2 d ; \
roll $ 1 , l e f t ## 2 d ; \
expand_ t o _ 6 4 b i t s ( r i g h t ## 2 , R T 3 ) ; \
expand_ t o _ 6 4 b i t s ( l e f t ## 2 , R T 3 ) ;
# define f i n a l _ p e r m u t a t i o n 3 ( l e f t , r i g h t ) \
compress_ t o _ 6 4 b i t s ( r i g h t ## 0 ) ; \
compress_ t o _ 6 4 b i t s ( l e f t ## 0 ) ; \
movl r i g h t ## 0 d , R W 0 d ; \
rorl $ 1 , l e f t ## 0 d ; \
xorl l e f t ## 0 d , R W 0 d ; \
andl $ 0 x a a a a a a a a , R W 0 d ; \
xorl R W 0 d , r i g h t ## 0 d ; \
xorl R W 0 d , l e f t ## 0 d ; \
rorl $ 1 , r i g h t ## 0 d ; \
compress_ t o _ 6 4 b i t s ( r i g h t ## 1 ) ; \
compress_ t o _ 6 4 b i t s ( l e f t ## 1 ) ; \
movl r i g h t ## 1 d , R W 1 d ; \
rorl $ 1 , l e f t ## 1 d ; \
xorl l e f t ## 1 d , R W 1 d ; \
andl $ 0 x a a a a a a a a , R W 1 d ; \
xorl R W 1 d , r i g h t ## 1 d ; \
xorl R W 1 d , l e f t ## 1 d ; \
rorl $ 1 , r i g h t ## 1 d ; \
compress_ t o _ 6 4 b i t s ( r i g h t ## 2 ) ; \
compress_ t o _ 6 4 b i t s ( l e f t ## 2 ) ; \
movl r i g h t ## 2 d , R W 2 d ; \
rorl $ 1 , l e f t ## 2 d ; \
xorl l e f t ## 2 d , R W 2 d ; \
andl $ 0 x a a a a a a a a , R W 2 d ; \
xorl R W 2 d , r i g h t ## 2 d ; \
xorl R W 2 d , l e f t ## 2 d ; \
rorl $ 1 , r i g h t ## 2 d ; \
\
do_ p e r m u t a t i o n ( r i g h t ## 0 d , l e f t ## 0 d , 8 , 0 x00 f f00 f f ) ; \
do_ p e r m u t a t i o n ( r i g h t ## 0 d , l e f t ## 0 d , 2 , 0 x33 3 3 3 3 3 3 ) ; \
do_ p e r m u t a t i o n ( r i g h t ## 1 d , l e f t ## 1 d , 8 , 0 x00 f f00 f f ) ; \
do_ p e r m u t a t i o n ( r i g h t ## 1 d , l e f t ## 1 d , 2 , 0 x33 3 3 3 3 3 3 ) ; \
do_ p e r m u t a t i o n ( r i g h t ## 2 d , l e f t ## 2 d , 8 , 0 x00 f f00 f f ) ; \
do_ p e r m u t a t i o n ( r i g h t ## 2 d , l e f t ## 2 d , 2 , 0 x33 3 3 3 3 3 3 ) ; \
\
do_ p e r m u t a t i o n ( l e f t ## 0 d , r i g h t ## 0 d , 1 6 , 0 x00 0 0 f f f f ) ; \
do_ p e r m u t a t i o n ( l e f t ## 0 d , r i g h t ## 0 d , 4 , 0 x0 f0 f0 f0 f ) ; \
do_ p e r m u t a t i o n ( l e f t ## 1 d , r i g h t ## 1 d , 1 6 , 0 x00 0 0 f f f f ) ; \
do_ p e r m u t a t i o n ( l e f t ## 1 d , r i g h t ## 1 d , 4 , 0 x0 f0 f0 f0 f ) ; \
do_ p e r m u t a t i o n ( l e f t ## 2 d , r i g h t ## 2 d , 1 6 , 0 x00 0 0 f f f f ) ; \
do_ p e r m u t a t i o n ( l e f t ## 2 d , r i g h t ## 2 d , 4 , 0 x0 f0 f0 f0 f ) ;
# define r o u n d3 ( n , f r o m , t o , l o a d _ n e x t _ k e y , d o _ m o v q ) \
xorq f r o m ## 0 , R W 0 ; \
movzbl R W 0 b l , R T 3 d ; \
movzbl R W 0 b h , R T 1 d ; \
shrq $ 1 6 , R W 0 ; \
xorq s8 ( , R T 3 , 8 ) , t o ## 0 ; \
xorq s6 ( , R T 1 , 8 ) , t o ## 0 ; \
movzbl R W 0 b l , R T 3 d ; \
movzbl R W 0 b h , R T 1 d ; \
shrq $ 1 6 , R W 0 ; \
xorq s4 ( , R T 3 , 8 ) , t o ## 0 ; \
xorq s2 ( , R T 1 , 8 ) , t o ## 0 ; \
movzbl R W 0 b l , R T 3 d ; \
movzbl R W 0 b h , R T 1 d ; \
shrl $ 1 6 , R W 0 d ; \
xorq s7 ( , R T 3 , 8 ) , t o ## 0 ; \
xorq s5 ( , R T 1 , 8 ) , t o ## 0 ; \
movzbl R W 0 b l , R T 3 d ; \
movzbl R W 0 b h , R T 1 d ; \
load_ n e x t _ k e y ( n , R W 0 ) ; \
xorq s3 ( , R T 3 , 8 ) , t o ## 0 ; \
xorq s1 ( , R T 1 , 8 ) , t o ## 0 ; \
xorq f r o m ## 1 , R W 1 ; \
movzbl R W 1 b l , R T 3 d ; \
movzbl R W 1 b h , R T 1 d ; \
shrq $ 1 6 , R W 1 ; \
xorq s8 ( , R T 3 , 8 ) , t o ## 1 ; \
xorq s6 ( , R T 1 , 8 ) , t o ## 1 ; \
movzbl R W 1 b l , R T 3 d ; \
movzbl R W 1 b h , R T 1 d ; \
shrq $ 1 6 , R W 1 ; \
xorq s4 ( , R T 3 , 8 ) , t o ## 1 ; \
xorq s2 ( , R T 1 , 8 ) , t o ## 1 ; \
movzbl R W 1 b l , R T 3 d ; \
movzbl R W 1 b h , R T 1 d ; \
shrl $ 1 6 , R W 1 d ; \
xorq s7 ( , R T 3 , 8 ) , t o ## 1 ; \
xorq s5 ( , R T 1 , 8 ) , t o ## 1 ; \
movzbl R W 1 b l , R T 3 d ; \
movzbl R W 1 b h , R T 1 d ; \
do_ m o v q ( R W 0 , R W 1 ) ; \
xorq s3 ( , R T 3 , 8 ) , t o ## 1 ; \
xorq s1 ( , R T 1 , 8 ) , t o ## 1 ; \
xorq f r o m ## 2 , R W 2 ; \
movzbl R W 2 b l , R T 3 d ; \
movzbl R W 2 b h , R T 1 d ; \
shrq $ 1 6 , R W 2 ; \
xorq s8 ( , R T 3 , 8 ) , t o ## 2 ; \
xorq s6 ( , R T 1 , 8 ) , t o ## 2 ; \
movzbl R W 2 b l , R T 3 d ; \
movzbl R W 2 b h , R T 1 d ; \
shrq $ 1 6 , R W 2 ; \
xorq s4 ( , R T 3 , 8 ) , t o ## 2 ; \
xorq s2 ( , R T 1 , 8 ) , t o ## 2 ; \
movzbl R W 2 b l , R T 3 d ; \
movzbl R W 2 b h , R T 1 d ; \
shrl $ 1 6 , R W 2 d ; \
xorq s7 ( , R T 3 , 8 ) , t o ## 2 ; \
xorq s5 ( , R T 1 , 8 ) , t o ## 2 ; \
movzbl R W 2 b l , R T 3 d ; \
movzbl R W 2 b h , R T 1 d ; \
do_ m o v q ( R W 0 , R W 2 ) ; \
xorq s3 ( , R T 3 , 8 ) , t o ## 2 ; \
xorq s1 ( , R T 1 , 8 ) , t o ## 2 ;
# define _ _ m o v q ( s r c , d s t ) \
movq s r c , d s t ;
ENTRY( d e s3 _ e d e _ x86 _ 6 4 _ c r y p t _ b l k _ 3 w a y )
/ * input :
* % rdi : ctx, r o u n d k e y s
* % rsi : dst ( 3 b l o c k s )
* % rdx : src ( 3 b l o c k s )
* /
pushq % r b x ;
pushq % r12 ;
pushq % r13 ;
pushq % r14 ;
pushq % r15 ;
2017-09-18 22:42:04 +03:00
pushq % r s i / * d s t * /
2014-06-09 21:59:54 +04:00
/* load input */
movl 0 * 4 ( % r d x ) , R L 0 d ;
movl 1 * 4 ( % r d x ) , R R 0 d ;
movl 2 * 4 ( % r d x ) , R L 1 d ;
movl 3 * 4 ( % r d x ) , R R 1 d ;
movl 4 * 4 ( % r d x ) , R L 2 d ;
movl 5 * 4 ( % r d x ) , R R 2 d ;
bswapl R L 0 d ;
bswapl R R 0 d ;
bswapl R L 1 d ;
bswapl R R 1 d ;
bswapl R L 2 d ;
bswapl R R 2 d ;
initial_ p e r m u t a t i o n 3 ( R L , R R ) ;
movq 0 ( C T X ) , R W 0 ;
movq R W 0 , R W 1 ;
movq R W 0 , R W 2 ;
round3 ( 0 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 2 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 4 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 5 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 6 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 7 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 8 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 9 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 0 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 1 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 2 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 3 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 4 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 5 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 0 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 1 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 2 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 3 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 4 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 5 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 6 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 7 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 8 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 9 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 1 0 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 1 1 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 1 2 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 1 3 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 1 4 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 1 6 + 1 5 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 0 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 1 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 2 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 3 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 4 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 5 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 6 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 7 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 8 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 9 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 1 0 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 1 1 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 1 2 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 1 3 , R L , R R , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 1 4 , R R , R L , l o a d _ n e x t _ k e y , _ _ m o v q ) ;
round3 ( 3 2 + 1 5 , R L , R R , d u m m y 2 , d u m m y 2 ) ;
final_ p e r m u t a t i o n 3 ( R R , R L ) ;
bswapl R R 0 d ;
bswapl R L 0 d ;
bswapl R R 1 d ;
bswapl R L 1 d ;
bswapl R R 2 d ;
bswapl R L 2 d ;
2017-09-18 22:42:04 +03:00
popq % r s i / * d s t * /
2014-06-09 21:59:54 +04:00
movl R R 0 d , 0 * 4 ( % r s i ) ;
movl R L 0 d , 1 * 4 ( % r s i ) ;
movl R R 1 d , 2 * 4 ( % r s i ) ;
movl R L 1 d , 3 * 4 ( % r s i ) ;
movl R R 2 d , 4 * 4 ( % r s i ) ;
movl R L 2 d , 5 * 4 ( % r s i ) ;
popq % r15 ;
popq % r14 ;
popq % r13 ;
popq % r12 ;
popq % r b x ;
ret;
ENDPROC( d e s3 _ e d e _ x86 _ 6 4 _ c r y p t _ b l k _ 3 w a y )
crypto: x86 - make constants readonly, allow linker to merge them
A lot of asm-optimized routines in arch/x86/crypto/ keep its
constants in .data. This is wrong, they should be on .rodata.
Mnay of these constants are the same in different modules.
For example, 128-bit shuffle mask 0x000102030405060708090A0B0C0D0E0F
exists in at least half a dozen places.
There is a way to let linker merge them and use just one copy.
The rules are as follows: mergeable objects of different sizes
should not share sections. You can't put them all in one .rodata
section, they will lose "mergeability".
GCC puts its mergeable constants in ".rodata.cstSIZE" sections,
or ".rodata.cstSIZE.<object_name>" if -fdata-sections is used.
This patch does the same:
.section .rodata.cst16.SHUF_MASK, "aM", @progbits, 16
It is important that all data in such section consists of
16-byte elements, not larger ones, and there are no implicit
use of one element from another.
When this is not the case, use non-mergeable section:
.section .rodata[.VAR_NAME], "a", @progbits
This reduces .data by ~15 kbytes:
text data bss dec hex filename
11097415 2705840 2630712 16433967 fac32f vmlinux-prev.o
11112095 2690672 2630712 16433479 fac147 vmlinux.o
Merged objects are visible in System.map:
ffffffff81a28810 r POLY
ffffffff81a28810 r POLY
ffffffff81a28820 r TWOONE
ffffffff81a28820 r TWOONE
ffffffff81a28830 r PSHUFFLE_BYTE_FLIP_MASK <- merged regardless of
ffffffff81a28830 r SHUF_MASK <------------- the name difference
ffffffff81a28830 r SHUF_MASK
ffffffff81a28830 r SHUF_MASK
..
ffffffff81a28d00 r K512 <- merged three identical 640-byte tables
ffffffff81a28d00 r K512
ffffffff81a28d00 r K512
Use of object names in section name suffixes is not strictly necessary,
but might help if someday link stage will use garbage collection
to eliminate unused sections (ld --gc-sections).
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
CC: Herbert Xu <herbert@gondor.apana.org.au>
CC: Josh Poimboeuf <jpoimboe@redhat.com>
CC: Xiaodong Liu <xiaodong.liu@intel.com>
CC: Megha Dey <megha.dey@intel.com>
CC: linux-crypto@vger.kernel.org
CC: x86@kernel.org
CC: linux-kernel@vger.kernel.org
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2017-01-20 00:33:04 +03:00
.section .rodata , " a" , @progbits
2014-06-09 21:59:54 +04:00
.align 16
.L_s1 :
.quad 0 x0 0 1 0 1 0 0 0 0 1 0 1 0 4 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 , 0 x00 1 0 1 0 0 0 0 1 0 1 0 4 0 4
.quad 0 x0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 4 , 0 x00 0 0 1 0 0 0 0 0 0 1 0 4 0 4
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 , 0 x00 0 0 1 0 0 0 0 0 0 1 0 0 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 , 0 x00 1 0 1 0 0 0 0 1 0 1 0 4 0 0
.quad 0 x0 0 1 0 1 0 0 0 0 1 0 1 0 4 0 4 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 4 0 0
.quad 0 x0 0 1 0 0 0 0 0 0 1 0 0 0 4 0 4 , 0 x00 1 0 1 0 0 0 0 1 0 1 0 0 0 4
.quad 0 x0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 4
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 4 , 0 x00 1 0 0 0 0 0 0 1 0 0 0 4 0 0
.quad 0 x0 0 1 0 0 0 0 0 0 1 0 0 0 4 0 0 , 0 x00 0 0 1 0 0 0 0 0 0 1 0 4 0 0
.quad 0 x0 0 0 0 1 0 0 0 0 0 0 1 0 4 0 0 , 0 x00 1 0 1 0 0 0 0 1 0 1 0 0 0 0
.quad 0 x0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 , 0 x00 1 0 0 0 0 0 0 1 0 0 0 4 0 4
.quad 0 x0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 4 , 0 x00 1 0 0 0 0 0 0 1 0 0 0 0 0 4
.quad 0 x0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 4 , 0 x00 0 0 1 0 0 0 0 0 0 1 0 0 0 4
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 4 0 4
.quad 0 x0 0 0 0 1 0 0 0 0 0 0 1 0 4 0 4 , 0 x00 1 0 0 0 0 0 0 1 0 0 0 0 0 0
.quad 0 x0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 , 0 x00 1 0 1 0 0 0 0 1 0 1 0 4 0 4
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 , 0 x00 1 0 1 0 0 0 0 1 0 1 0 0 0 0
.quad 0 x0 0 1 0 1 0 0 0 0 1 0 1 0 4 0 0 , 0 x00 1 0 0 0 0 0 0 1 0 0 0 0 0 0
.quad 0 x0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 4 0 0
.quad 0 x0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 4 , 0 x00 0 0 1 0 0 0 0 0 0 1 0 0 0 0
.quad 0 x0 0 0 0 1 0 0 0 0 0 0 1 0 4 0 0 , 0 x00 1 0 0 0 0 0 0 1 0 0 0 0 0 4
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 4
.quad 0 x0 0 1 0 0 0 0 0 0 1 0 0 0 4 0 4 , 0 x00 0 0 1 0 0 0 0 0 0 1 0 4 0 4
.quad 0 x0 0 1 0 1 0 0 0 0 1 0 1 0 4 0 4 , 0 x00 0 0 1 0 0 0 0 0 0 1 0 0 0 4
.quad 0 x0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 , 0 x00 1 0 0 0 0 0 0 1 0 0 0 4 0 4
.quad 0 x0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 4 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 4 0 4
.quad 0 x0 0 0 0 1 0 0 0 0 0 0 1 0 4 0 4 , 0 x00 1 0 1 0 0 0 0 1 0 1 0 4 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 4 , 0 x00 1 0 0 0 0 0 0 1 0 0 0 4 0 0
.quad 0 x0 0 1 0 0 0 0 0 0 1 0 0 0 4 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 4 , 0 x00 0 0 1 0 0 0 0 0 0 1 0 4 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x00 1 0 1 0 0 0 0 1 0 1 0 0 0 4
.L_s2 :
.quad 0 x0 8 0 1 0 8 0 2 0 0 1 0 0 0 2 0 , 0 x08 0 0 0 8 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 , 0 x00 0 1 0 8 0 2 0 0 1 0 0 0 2 0
.quad 0 x0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 , 0 x00 0 0 0 0 0 2 0 0 0 0 0 0 2 0
.quad 0 x0 8 0 1 0 0 0 2 0 0 1 0 0 0 2 0 , 0 x08 0 0 0 8 0 2 0 0 0 0 0 0 2 0
.quad 0 x0 8 0 0 0 0 0 2 0 0 0 0 0 0 2 0 , 0 x08 0 1 0 8 0 2 0 0 1 0 0 0 2 0
.quad 0 x0 8 0 1 0 8 0 0 0 0 1 0 0 0 0 0 , 0 x08 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 8 0 0 0 8 0 0 0 0 0 0 0 0 0 0 , 0 x00 0 1 0 0 0 0 0 0 1 0 0 0 0 0
.quad 0 x0 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 , 0 x08 0 1 0 0 0 2 0 0 1 0 0 0 2 0
.quad 0 x0 0 0 1 0 8 0 0 0 0 1 0 0 0 0 0 , 0 x00 0 1 0 0 0 2 0 0 1 0 0 0 2 0
.quad 0 x0 8 0 0 0 8 0 2 0 0 0 0 0 0 2 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x00 0 0 0 8 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 1 0 8 0 2 0 0 1 0 0 0 2 0 , 0 x08 0 1 0 0 0 0 0 0 1 0 0 0 0 0
.quad 0 x0 0 0 1 0 0 0 2 0 0 1 0 0 0 2 0 , 0 x08 0 0 0 0 0 2 0 0 0 0 0 0 2 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x00 0 1 0 8 0 0 0 0 1 0 0 0 0 0
.quad 0 x0 0 0 0 0 8 0 2 0 0 0 0 0 0 2 0 , 0 x08 0 1 0 8 0 0 0 0 1 0 0 0 0 0
.quad 0 x0 8 0 1 0 0 0 0 0 0 1 0 0 0 0 0 , 0 x00 0 0 0 8 0 2 0 0 0 0 0 0 2 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x00 0 1 0 8 0 2 0 0 1 0 0 0 2 0
.quad 0 x0 8 0 1 0 0 0 2 0 0 1 0 0 0 2 0 , 0 x00 0 1 0 0 0 0 0 0 1 0 0 0 0 0
.quad 0 x0 8 0 0 0 8 0 2 0 0 0 0 0 0 2 0 , 0 x08 0 1 0 0 0 0 0 0 1 0 0 0 0 0
.quad 0 x0 8 0 1 0 8 0 0 0 0 1 0 0 0 0 0 , 0 x00 0 0 0 8 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 8 0 1 0 0 0 0 0 0 1 0 0 0 0 0 , 0 x08 0 0 0 8 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 , 0 x08 0 1 0 8 0 2 0 0 1 0 0 0 2 0
.quad 0 x0 0 0 1 0 8 0 2 0 0 1 0 0 0 2 0 , 0 x00 0 0 0 0 0 2 0 0 0 0 0 0 2 0
.quad 0 x0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 , 0 x08 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 8 0 2 0 0 0 0 0 0 2 0 , 0 x08 0 1 0 8 0 0 0 0 1 0 0 0 0 0
.quad 0 x0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 , 0 x08 0 0 0 0 0 2 0 0 0 0 0 0 2 0
.quad 0 x0 0 0 1 0 0 0 2 0 0 1 0 0 0 2 0 , 0 x08 0 0 0 8 0 2 0 0 0 0 0 0 2 0
.quad 0 x0 8 0 0 0 0 0 2 0 0 0 0 0 0 2 0 , 0 x00 0 1 0 0 0 2 0 0 1 0 0 0 2 0
.quad 0 x0 0 0 1 0 8 0 0 0 0 1 0 0 0 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 8 0 0 0 8 0 0 0 0 0 0 0 0 0 0 , 0 x00 0 0 0 8 0 2 0 0 0 0 0 0 2 0
.quad 0 x0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x08 0 1 0 0 0 2 0 0 1 0 0 0 2 0
.quad 0 x0 8 0 1 0 8 0 2 0 0 1 0 0 0 2 0 , 0 x00 0 1 0 8 0 0 0 0 1 0 0 0 0 0
.L_s3 :
.quad 0 x0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 8 , 0 x00 0 0 2 0 2 0 0 8 0 2 0 2 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x00 0 0 2 0 0 0 0 8 0 2 0 0 0 8
.quad 0 x0 0 0 0 0 0 2 0 0 8 0 0 0 2 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 2 0 2 0 0 0 0 2 0 2 0 8 , 0 x00 0 0 0 0 2 0 0 8 0 0 0 2 0 0
.quad 0 x0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 8 , 0 x00 0 0 0 0 0 0 0 8 0 0 0 0 0 8
.quad 0 x0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 8 , 0 x00 0 0 2 0 0 0 0 0 0 2 0 0 0 0
.quad 0 x0 0 0 0 2 0 2 0 0 8 0 2 0 2 0 8 , 0 x00 0 0 2 0 0 0 0 0 0 2 0 0 0 8
.quad 0 x0 0 0 0 2 0 0 0 0 8 0 2 0 0 0 0 , 0 x00 0 0 0 0 2 0 0 0 0 0 0 2 0 8
.quad 0 x0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 8
.quad 0 x0 0 0 0 2 0 2 0 0 8 0 2 0 2 0 0 , 0 x00 0 0 0 0 2 0 0 0 0 0 0 2 0 0
.quad 0 x0 0 0 0 2 0 2 0 0 0 0 2 0 2 0 0 , 0 x00 0 0 2 0 0 0 0 8 0 2 0 0 0 0
.quad 0 x0 0 0 0 2 0 0 0 0 8 0 2 0 0 0 8 , 0 x00 0 0 2 0 2 0 0 0 0 2 0 2 0 8
.quad 0 x0 0 0 0 0 0 2 0 0 8 0 0 0 2 0 8 , 0 x00 0 0 2 0 2 0 0 0 0 2 0 2 0 0
.quad 0 x0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 , 0 x00 0 0 0 0 2 0 0 8 0 0 0 2 0 8
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 , 0 x00 0 0 2 0 2 0 0 8 0 2 0 2 0 8
.quad 0 x0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 , 0 x00 0 0 0 0 0 0 0 8 0 0 0 0 0 0
.quad 0 x0 0 0 0 2 0 2 0 0 8 0 2 0 2 0 0 , 0 x00 0 0 0 0 0 0 0 8 0 0 0 0 0 0
.quad 0 x0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 8 , 0 x00 0 0 0 0 2 0 0 0 0 0 0 2 0 8
.quad 0 x0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 , 0 x00 0 0 2 0 2 0 0 8 0 2 0 2 0 0
.quad 0 x0 0 0 0 0 0 2 0 0 8 0 0 0 2 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 , 0 x00 0 0 2 0 0 0 0 0 0 2 0 0 0 8
.quad 0 x0 0 0 0 2 0 2 0 0 8 0 2 0 2 0 8 , 0 x00 0 0 0 0 2 0 0 8 0 0 0 2 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 8 , 0 x00 0 0 0 0 2 0 0 0 0 0 0 2 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x00 0 0 2 0 0 0 0 8 0 2 0 0 0 8
.quad 0 x0 0 0 0 0 0 2 0 0 8 0 0 0 2 0 8 , 0 x00 0 0 2 0 0 0 0 0 0 2 0 0 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 , 0 x00 0 0 2 0 2 0 0 8 0 2 0 2 0 8
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 , 0 x00 0 0 2 0 2 0 0 0 0 2 0 2 0 8
.quad 0 x0 0 0 0 2 0 2 0 0 0 0 2 0 2 0 0 , 0 x00 0 0 0 0 0 0 0 8 0 0 0 0 0 8
.quad 0 x0 0 0 0 2 0 0 0 0 8 0 2 0 0 0 0 , 0 x00 0 0 0 0 2 0 0 8 0 0 0 2 0 8
.quad 0 x0 0 0 0 0 0 2 0 0 0 0 0 0 2 0 8 , 0 x00 0 0 2 0 0 0 0 8 0 2 0 0 0 0
.quad 0 x0 0 0 0 2 0 2 0 0 0 0 2 0 2 0 8 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 8
.quad 0 x0 0 0 0 2 0 0 0 0 8 0 2 0 0 0 8 , 0 x00 0 0 2 0 2 0 0 0 0 2 0 2 0 0
.L_s4 :
.quad 0 x1 0 0 8 0 2 0 0 0 0 0 0 2 0 0 1 , 0 x10 0 0 0 2 0 8 0 0 0 0 2 0 0 1
.quad 0 x1 0 0 0 0 2 0 8 0 0 0 0 2 0 0 1 , 0 x00 0 0 0 0 0 8 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 8 0 2 0 8 0 0 0 0 2 0 0 0 , 0 x10 0 8 0 0 0 8 0 0 0 0 0 0 0 1
.quad 0 x1 0 0 8 0 0 0 0 0 0 0 0 0 0 0 1 , 0 x10 0 0 0 2 0 0 0 0 0 0 2 0 0 1
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x00 0 8 0 2 0 0 0 0 0 0 2 0 0 0
.quad 0 x0 0 0 8 0 2 0 0 0 0 0 0 2 0 0 0 , 0 x10 0 8 0 2 0 8 0 0 0 0 2 0 0 1
.quad 0 x1 0 0 0 0 0 0 8 0 0 0 0 0 0 0 1 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 8 0 0 0 8 0 0 0 0 0 0 0 0 , 0 x10 0 8 0 0 0 0 0 0 0 0 0 0 0 1
.quad 0 x1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 , 0 x00 0 0 0 2 0 0 0 0 0 0 2 0 0 0
.quad 0 x0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x10 0 8 0 2 0 0 0 0 0 0 2 0 0 1
.quad 0 x0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 , 0 x00 0 8 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x1 0 0 0 0 2 0 0 0 0 0 0 2 0 0 1 , 0 x00 0 0 0 2 0 8 0 0 0 0 2 0 0 0
.quad 0 x1 0 0 8 0 0 0 8 0 0 0 0 0 0 0 1 , 0 x10 0 0 0 0 0 0 0 0 0 0 0 0 0 1
.quad 0 x0 0 0 0 0 2 0 8 0 0 0 0 2 0 0 0 , 0 x00 0 8 0 0 0 8 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 , 0 x00 0 8 0 2 0 8 0 0 0 0 2 0 0 0
.quad 0 x1 0 0 8 0 2 0 8 0 0 0 0 2 0 0 1 , 0 x10 0 0 0 0 0 8 0 0 0 0 0 0 0 1
.quad 0 x0 0 0 8 0 0 0 8 0 0 0 0 0 0 0 0 , 0 x10 0 8 0 0 0 0 0 0 0 0 0 0 0 1
.quad 0 x0 0 0 8 0 2 0 0 0 0 0 0 2 0 0 0 , 0 x10 0 8 0 2 0 8 0 0 0 0 2 0 0 1
.quad 0 x1 0 0 0 0 0 0 8 0 0 0 0 0 0 0 1 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x00 0 8 0 2 0 0 0 0 0 0 2 0 0 0
.quad 0 x0 0 0 0 0 2 0 8 0 0 0 0 2 0 0 0 , 0 x00 0 8 0 0 0 8 0 0 0 0 0 0 0 0
.quad 0 x1 0 0 8 0 0 0 8 0 0 0 0 0 0 0 1 , 0 x10 0 0 0 0 0 0 0 0 0 0 0 0 0 1
.quad 0 x1 0 0 8 0 2 0 0 0 0 0 0 2 0 0 1 , 0 x10 0 0 0 2 0 8 0 0 0 0 2 0 0 1
.quad 0 x1 0 0 0 0 2 0 8 0 0 0 0 2 0 0 1 , 0 x00 0 0 0 0 0 8 0 0 0 0 0 0 0 0
.quad 0 x1 0 0 8 0 2 0 8 0 0 0 0 2 0 0 1 , 0 x10 0 0 0 0 0 8 0 0 0 0 0 0 0 1
.quad 0 x1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 , 0 x00 0 0 0 2 0 0 0 0 0 0 2 0 0 0
.quad 0 x1 0 0 8 0 0 0 0 0 0 0 0 0 0 0 1 , 0 x10 0 0 0 2 0 0 0 0 0 0 2 0 0 1
.quad 0 x0 0 0 8 0 2 0 8 0 0 0 0 2 0 0 0 , 0 x10 0 8 0 0 0 8 0 0 0 0 0 0 0 1
.quad 0 x1 0 0 0 0 2 0 0 0 0 0 0 2 0 0 1 , 0 x00 0 0 0 2 0 8 0 0 0 0 2 0 0 0
.quad 0 x0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x10 0 8 0 2 0 0 0 0 0 0 2 0 0 1
.quad 0 x0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 , 0 x00 0 8 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 2 0 0 0 0 0 0 2 0 0 0 , 0 x00 0 8 0 2 0 8 0 0 0 0 2 0 0 0
.L_s5 :
.quad 0 x0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 , 0 x00 2 0 0 0 1 0 0 2 0 8 0 1 0 0
.quad 0 x0 0 2 0 0 0 0 0 0 2 0 8 0 0 0 0 , 0 x04 2 0 0 0 1 0 0 2 0 0 0 1 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 , 0 x00 0 0 0 0 1 0 0 0 0 0 0 1 0 0
.quad 0 x0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x00 2 0 0 0 0 0 0 2 0 8 0 0 0 0
.quad 0 x0 4 0 0 0 0 1 0 0 0 0 8 0 1 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 8 0 0 0 0
.quad 0 x0 0 2 0 0 0 1 0 0 2 0 0 0 1 0 0 , 0 x04 0 0 0 0 1 0 0 0 0 8 0 1 0 0
.quad 0 x0 4 2 0 0 0 1 0 0 2 0 0 0 1 0 0 , 0 x04 2 0 0 0 0 0 0 2 0 8 0 0 0 0
.quad 0 x0 0 0 0 0 0 1 0 0 0 0 8 0 1 0 0 , 0 x04 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 , 0 x04 0 0 0 0 0 0 0 0 0 8 0 0 0 0
.quad 0 x0 4 0 0 0 0 0 0 0 0 0 8 0 0 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 4 0 0 0 0 1 0 0 0 0 0 0 1 0 0 , 0 x04 2 0 0 0 1 0 0 2 0 8 0 1 0 0
.quad 0 x0 4 2 0 0 0 1 0 0 2 0 8 0 1 0 0 , 0 x00 2 0 0 0 1 0 0 2 0 0 0 1 0 0
.quad 0 x0 4 2 0 0 0 0 0 0 2 0 8 0 0 0 0 , 0 x04 0 0 0 0 1 0 0 0 0 0 0 1 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x04 2 0 0 0 0 0 0 2 0 0 0 0 0 0
.quad 0 x0 0 2 0 0 0 1 0 0 2 0 8 0 1 0 0 , 0 x00 2 0 0 0 0 0 0 2 0 0 0 0 0 0
.quad 0 x0 4 2 0 0 0 0 0 0 2 0 0 0 0 0 0 , 0 x00 0 0 0 0 1 0 0 0 0 8 0 1 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 , 0 x04 2 0 0 0 1 0 0 2 0 0 0 1 0 0
.quad 0 x0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 , 0 x00 2 0 0 0 0 0 0 2 0 0 0 0 0 0
.quad 0 x0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x00 2 0 0 0 0 0 0 2 0 8 0 0 0 0
.quad 0 x0 4 2 0 0 0 1 0 0 2 0 0 0 1 0 0 , 0 x04 0 0 0 0 1 0 0 0 0 8 0 1 0 0
.quad 0 x0 0 2 0 0 0 1 0 0 2 0 0 0 1 0 0 , 0 x04 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 4 2 0 0 0 0 0 0 2 0 8 0 0 0 0 , 0 x00 2 0 0 0 1 0 0 2 0 8 0 1 0 0
.quad 0 x0 4 0 0 0 0 1 0 0 0 0 8 0 1 0 0 , 0 x00 0 0 0 0 1 0 0 0 0 0 0 1 0 0
.quad 0 x0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 , 0 x04 2 0 0 0 0 0 0 2 0 8 0 0 0 0
.quad 0 x0 4 2 0 0 0 1 0 0 2 0 8 0 1 0 0 , 0 x00 0 0 0 0 1 0 0 0 0 8 0 1 0 0
.quad 0 x0 4 2 0 0 0 0 0 0 2 0 0 0 0 0 0 , 0 x04 2 0 0 0 1 0 0 2 0 8 0 1 0 0
.quad 0 x0 0 2 0 0 0 0 0 0 2 0 8 0 0 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 4 0 0 0 0 0 0 0 0 0 8 0 0 0 0 , 0 x04 2 0 0 0 0 0 0 2 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 0 1 0 0 0 0 8 0 1 0 0 , 0 x00 2 0 0 0 1 0 0 2 0 0 0 1 0 0
.quad 0 x0 4 0 0 0 0 1 0 0 0 0 0 0 1 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 8 0 0 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x04 0 0 0 0 0 0 0 0 0 8 0 0 0 0
.quad 0 x0 0 2 0 0 0 1 0 0 2 0 8 0 1 0 0 , 0 x04 0 0 0 0 1 0 0 0 0 0 0 1 0 0
.L_s6 :
.quad 0 x0 2 0 0 0 0 0 1 2 0 0 0 0 0 1 0 , 0 x02 0 4 0 0 0 0 2 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 , 0 x02 0 4 0 4 0 1 2 0 0 0 0 0 1 0
.quad 0 x0 2 0 4 0 0 0 0 2 0 0 0 0 0 0 0 , 0 x00 0 0 0 0 0 1 0 0 0 0 0 0 1 0
.quad 0 x0 2 0 4 0 4 0 1 2 0 0 0 0 0 1 0 , 0 x00 0 4 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 2 0 0 0 4 0 0 2 0 0 0 0 0 0 0 , 0 x00 0 4 0 4 0 1 0 0 0 0 0 0 1 0
.quad 0 x0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x02 0 0 0 0 0 1 2 0 0 0 0 0 1 0
.quad 0 x0 0 0 4 0 0 0 1 0 0 0 0 0 0 1 0 , 0 x02 0 0 0 4 0 0 2 0 0 0 0 0 0 0
.quad 0 x0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 0 , 0 x00 0 0 0 4 0 1 0 0 0 0 0 0 1 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x00 0 4 0 0 0 1 0 0 0 0 0 0 1 0
.quad 0 x0 2 0 0 0 4 0 1 2 0 0 0 0 0 1 0 , 0 x00 0 0 0 4 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 4 0 4 0 0 0 0 0 0 0 0 0 0 , 0 x02 0 0 0 4 0 1 2 0 0 0 0 0 1 0
.quad 0 x0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 , 0 x02 0 4 0 0 0 1 2 0 0 0 0 0 1 0
.quad 0 x0 2 0 4 0 0 0 1 2 0 0 0 0 0 1 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 4 0 4 0 1 0 0 0 0 0 0 1 0 , 0 x02 0 4 0 4 0 0 2 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 4 0 1 0 0 0 0 0 0 1 0 , 0 x00 0 4 0 4 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 2 0 4 0 4 0 0 2 0 0 0 0 0 0 0 , 0 x02 0 0 0 0 0 0 2 0 0 0 0 0 0 0
.quad 0 x0 2 0 0 0 4 0 0 2 0 0 0 0 0 0 0 , 0 x00 0 0 0 0 0 1 0 0 0 0 0 0 1 0
.quad 0 x0 2 0 4 0 0 0 1 2 0 0 0 0 0 1 0 , 0 x00 0 4 0 4 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 2 0 4 0 4 0 1 2 0 0 0 0 0 1 0 , 0 x00 0 4 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 4 0 1 0 0 0 0 0 0 1 0 , 0 x02 0 0 0 0 0 1 2 0 0 0 0 0 1 0
.quad 0 x0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x02 0 0 0 4 0 0 2 0 0 0 0 0 0 0
.quad 0 x0 2 0 0 0 0 0 0 2 0 0 0 0 0 0 0 , 0 x00 0 0 0 4 0 1 0 0 0 0 0 0 1 0
.quad 0 x0 2 0 0 0 0 0 1 2 0 0 0 0 0 1 0 , 0 x02 0 4 0 4 0 1 2 0 0 0 0 0 1 0
.quad 0 x0 0 0 4 0 4 0 0 0 0 0 0 0 0 0 0 , 0 x02 0 4 0 0 0 0 2 0 0 0 0 0 0 0
.quad 0 x0 0 0 4 0 4 0 1 0 0 0 0 0 0 1 0 , 0 x02 0 4 0 4 0 0 2 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x02 0 4 0 0 0 1 2 0 0 0 0 0 1 0
.quad 0 x0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 , 0 x00 0 0 0 4 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 2 0 4 0 0 0 0 2 0 0 0 0 0 0 0 , 0 x00 0 4 0 4 0 1 0 0 0 0 0 0 1 0
.quad 0 x0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 , 0 x00 0 4 0 0 0 1 0 0 0 0 0 0 1 0
.quad 0 x0 2 0 0 0 4 0 1 2 0 0 0 0 0 1 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 2 0 4 0 4 0 0 2 0 0 0 0 0 0 0 , 0 x02 0 0 0 0 0 0 2 0 0 0 0 0 0 0
.quad 0 x0 0 0 4 0 0 0 1 0 0 0 0 0 0 1 0 , 0 x02 0 0 0 4 0 1 2 0 0 0 0 0 1 0
.L_s7 :
.quad 0 x0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 , 0 x20 0 2 0 0 0 0 0 4 2 0 0 0 0 2
.quad 0 x2 0 0 0 0 0 0 0 0 4 0 0 0 8 0 2 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 , 0 x20 0 0 0 0 0 0 0 4 0 0 0 8 0 2
.quad 0 x2 0 0 2 0 0 0 0 0 0 2 0 0 8 0 2 , 0 x00 0 2 0 0 0 0 0 4 2 0 0 8 0 0
.quad 0 x2 0 0 2 0 0 0 0 0 4 2 0 0 8 0 2 , 0 x00 0 2 0 0 0 0 0 0 2 0 0 0 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x20 0 0 0 0 0 0 0 4 0 0 0 0 0 2
.quad 0 x2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 , 0 x00 0 0 0 0 0 0 0 4 0 0 0 0 0 0
.quad 0 x2 0 0 2 0 0 0 0 0 4 2 0 0 0 0 2 , 0 x20 0 0 0 0 0 0 0 0 0 0 0 8 0 2
.quad 0 x0 0 0 0 0 0 0 0 0 4 0 0 0 8 0 0 , 0 x20 0 2 0 0 0 0 0 0 2 0 0 8 0 2
.quad 0 x2 0 0 2 0 0 0 0 0 0 2 0 0 0 0 2 , 0 x00 0 0 0 0 0 0 0 4 0 0 0 8 0 0
.quad 0 x2 0 0 0 0 0 0 0 0 4 0 0 0 0 0 2 , 0 x00 0 2 0 0 0 0 0 4 2 0 0 0 0 0
.quad 0 x0 0 0 2 0 0 0 0 0 4 2 0 0 8 0 0 , 0 x20 0 2 0 0 0 0 0 0 2 0 0 0 0 2
.quad 0 x0 0 0 2 0 0 0 0 0 4 2 0 0 0 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 8 0 0
.quad 0 x2 0 0 0 0 0 0 0 0 0 0 0 0 8 0 2 , 0 x20 0 2 0 0 0 0 0 4 2 0 0 8 0 2
.quad 0 x0 0 0 2 0 0 0 0 0 0 2 0 0 8 0 0 , 0 x20 0 0 0 0 0 0 0 0 0 0 0 0 0 2
.quad 0 x0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 , 0 x00 0 2 0 0 0 0 0 0 2 0 0 8 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 , 0 x00 0 2 0 0 0 0 0 0 2 0 0 8 0 0
.quad 0 x0 0 0 2 0 0 0 0 0 0 2 0 0 0 0 0 , 0 x20 0 0 0 0 0 0 0 4 0 0 0 8 0 2
.quad 0 x2 0 0 0 0 0 0 0 0 4 0 0 0 8 0 2 , 0 x20 0 2 0 0 0 0 0 4 2 0 0 0 0 2
.quad 0 x2 0 0 2 0 0 0 0 0 4 2 0 0 0 0 2 , 0 x20 0 0 0 0 0 0 0 0 0 0 0 0 0 2
.quad 0 x2 0 0 2 0 0 0 0 0 0 2 0 0 0 0 2 , 0 x00 0 0 0 0 0 0 0 4 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 4 0 0 0 8 0 0 , 0 x00 0 2 0 0 0 0 0 0 2 0 0 0 0 0
.quad 0 x0 0 0 2 0 0 0 0 0 4 2 0 0 8 0 0 , 0 x20 0 0 0 0 0 0 0 0 0 0 0 8 0 2
.quad 0 x2 0 0 2 0 0 0 0 0 0 2 0 0 8 0 2 , 0 x00 0 2 0 0 0 0 0 4 2 0 0 8 0 0
.quad 0 x2 0 0 0 0 0 0 0 0 0 0 0 0 8 0 2 , 0 x20 0 0 0 0 0 0 0 4 0 0 0 0 0 2
.quad 0 x2 0 0 2 0 0 0 0 0 4 2 0 0 8 0 2 , 0 x00 0 2 0 0 0 0 0 4 2 0 0 0 0 0
.quad 0 x0 0 0 2 0 0 0 0 0 0 2 0 0 8 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 , 0 x20 0 2 0 0 0 0 0 4 2 0 0 8 0 2
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x20 0 2 0 0 0 0 0 0 2 0 0 8 0 2
.quad 0 x0 0 0 2 0 0 0 0 0 4 2 0 0 0 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 8 0 0
.quad 0 x2 0 0 0 0 0 0 0 0 4 0 0 0 0 0 2 , 0 x00 0 0 0 0 0 0 0 4 0 0 0 8 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 , 0 x20 0 2 0 0 0 0 0 0 2 0 0 0 0 2
.L_s8 :
.quad 0 x0 1 0 0 0 1 0 4 1 0 0 0 1 0 0 0 , 0 x00 0 0 0 1 0 0 0 0 0 0 1 0 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 , 0 x01 0 0 0 1 0 4 1 0 0 4 1 0 0 0
.quad 0 x0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 , 0 x01 0 0 0 1 0 4 1 0 0 0 1 0 0 0
.quad 0 x0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 , 0 x01 0 0 0 0 0 0 1 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 0 0 4 0 0 0 4 0 0 0 0 , 0 x01 0 0 0 0 0 0 1 0 0 4 0 0 0 0
.quad 0 x0 1 0 0 0 1 0 4 1 0 0 4 1 0 0 0 , 0 x00 0 0 0 1 0 0 0 0 0 4 1 0 0 0
.quad 0 x0 1 0 0 0 1 0 0 1 0 0 4 1 0 0 0 , 0 x00 0 0 0 1 0 4 0 0 0 4 1 0 0 0
.quad 0 x0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 , 0 x00 0 0 0 0 0 4 0 0 0 0 0 0 0 0
.quad 0 x0 1 0 0 0 0 0 0 1 0 0 4 0 0 0 0 , 0 x01 0 0 0 0 0 4 1 0 0 0 0 0 0 0
.quad 0 x0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 , 0 x00 0 0 0 1 0 4 0 0 0 0 1 0 0 0
.quad 0 x0 0 0 0 0 1 0 0 0 0 0 4 1 0 0 0 , 0 x00 0 0 0 0 0 4 0 0 0 4 0 0 0 0
.quad 0 x0 1 0 0 0 0 0 4 1 0 0 4 0 0 0 0 , 0 x01 0 0 0 1 0 0 1 0 0 4 1 0 0 0
.quad 0 x0 0 0 0 0 1 0 4 0 0 0 0 1 0 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x01 0 0 0 0 0 4 1 0 0 4 0 0 0 0
.quad 0 x0 1 0 0 0 0 0 4 1 0 0 0 0 0 0 0 , 0 x01 0 0 0 1 0 0 1 0 0 0 1 0 0 0
.quad 0 x0 0 0 0 0 1 0 4 0 0 0 4 1 0 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 4 0 0 0 0
.quad 0 x0 0 0 0 0 1 0 4 0 0 0 4 1 0 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 4 0 0 0 0
.quad 0 x0 1 0 0 0 1 0 0 1 0 0 4 1 0 0 0 , 0 x00 0 0 0 1 0 0 0 0 0 0 1 0 0 0
.quad 0 x0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 , 0 x01 0 0 0 0 0 4 1 0 0 4 0 0 0 0
.quad 0 x0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 , 0 x00 0 0 0 1 0 4 0 0 0 4 1 0 0 0
.quad 0 x0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 , 0 x00 0 0 0 0 0 4 0 0 0 0 0 0 0 0
.quad 0 x0 1 0 0 0 0 0 4 1 0 0 0 0 0 0 0 , 0 x01 0 0 0 0 0 0 1 0 0 4 0 0 0 0
.quad 0 x0 1 0 0 0 0 0 4 1 0 0 4 0 0 0 0 , 0 x01 0 0 0 0 0 0 1 0 0 0 0 0 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 , 0 x01 0 0 0 1 0 4 1 0 0 0 1 0 0 0
.quad 0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 x01 0 0 0 1 0 4 1 0 0 4 1 0 0 0
.quad 0 x0 0 0 0 0 0 0 4 0 0 0 4 0 0 0 0 , 0 x01 0 0 0 0 0 4 1 0 0 0 0 0 0 0
.quad 0 x0 1 0 0 0 0 0 0 1 0 0 4 0 0 0 0 , 0 x01 0 0 0 1 0 0 1 0 0 0 1 0 0 0
.quad 0 x0 1 0 0 0 1 0 4 1 0 0 0 1 0 0 0 , 0 x00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.quad 0 x0 1 0 0 0 1 0 4 1 0 0 4 1 0 0 0 , 0 x00 0 0 0 1 0 0 0 0 0 4 1 0 0 0
.quad 0 x0 0 0 0 0 1 0 0 0 0 0 4 1 0 0 0 , 0 x00 0 0 0 1 0 4 0 0 0 0 1 0 0 0
.quad 0 x0 0 0 0 0 1 0 4 0 0 0 0 1 0 0 0 , 0 x00 0 0 0 0 0 4 0 0 0 4 0 0 0 0
.quad 0 x0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 , 0 x01 0 0 0 1 0 0 1 0 0 4 1 0 0 0