Home | History | Annotate | Line # | Download | only in arm
      1  1.1  christos #include "arm_asm.h"
      2  1.1  christos // Copyright 2020-2025 The OpenSSL Project Authors. All Rights Reserved.
      3  1.1  christos //
      4  1.1  christos // Licensed under the Apache License 2.0 (the "License").  You may not use
      5  1.1  christos // this file except in compliance with the License.  You can obtain a copy
      6  1.1  christos // in the file LICENSE in the source distribution or at
      7  1.1  christos // https://www.openssl.org/source/license.html
      8  1.1  christos 
      9  1.1  christos //
     10  1.1  christos // This module implements SM4 with ASIMD on aarch64
     11  1.1  christos //
     12  1.1  christos // Feb 2022
     13  1.1  christos //
     14  1.1  christos 
     15  1.1  christos // $output is the last argument if it looks like a file (it has an extension)
     16  1.1  christos // $flavour is the first argument if it doesn't look like a file
     17  1.1  christos #include "arm_arch.h"
     18  1.1  christos .arch	armv8-a
     19  1.1  christos .text
     20  1.1  christos 
     21  1.1  christos .section	.rodata
     22  1.1  christos .type	_vpsm4_consts,%object
     23  1.1  christos .align	7
     24  1.1  christos _vpsm4_consts:
     25  1.1  christos .Lsbox:
     26  1.1  christos .byte	0xD6,0x90,0xE9,0xFE,0xCC,0xE1,0x3D,0xB7,0x16,0xB6,0x14,0xC2,0x28,0xFB,0x2C,0x05
     27  1.1  christos .byte	0x2B,0x67,0x9A,0x76,0x2A,0xBE,0x04,0xC3,0xAA,0x44,0x13,0x26,0x49,0x86,0x06,0x99
     28  1.1  christos .byte	0x9C,0x42,0x50,0xF4,0x91,0xEF,0x98,0x7A,0x33,0x54,0x0B,0x43,0xED,0xCF,0xAC,0x62
     29  1.1  christos .byte	0xE4,0xB3,0x1C,0xA9,0xC9,0x08,0xE8,0x95,0x80,0xDF,0x94,0xFA,0x75,0x8F,0x3F,0xA6
     30  1.1  christos .byte	0x47,0x07,0xA7,0xFC,0xF3,0x73,0x17,0xBA,0x83,0x59,0x3C,0x19,0xE6,0x85,0x4F,0xA8
     31  1.1  christos .byte	0x68,0x6B,0x81,0xB2,0x71,0x64,0xDA,0x8B,0xF8,0xEB,0x0F,0x4B,0x70,0x56,0x9D,0x35
     32  1.1  christos .byte	0x1E,0x24,0x0E,0x5E,0x63,0x58,0xD1,0xA2,0x25,0x22,0x7C,0x3B,0x01,0x21,0x78,0x87
     33  1.1  christos .byte	0xD4,0x00,0x46,0x57,0x9F,0xD3,0x27,0x52,0x4C,0x36,0x02,0xE7,0xA0,0xC4,0xC8,0x9E
     34  1.1  christos .byte	0xEA,0xBF,0x8A,0xD2,0x40,0xC7,0x38,0xB5,0xA3,0xF7,0xF2,0xCE,0xF9,0x61,0x15,0xA1
     35  1.1  christos .byte	0xE0,0xAE,0x5D,0xA4,0x9B,0x34,0x1A,0x55,0xAD,0x93,0x32,0x30,0xF5,0x8C,0xB1,0xE3
     36  1.1  christos .byte	0x1D,0xF6,0xE2,0x2E,0x82,0x66,0xCA,0x60,0xC0,0x29,0x23,0xAB,0x0D,0x53,0x4E,0x6F
     37  1.1  christos .byte	0xD5,0xDB,0x37,0x45,0xDE,0xFD,0x8E,0x2F,0x03,0xFF,0x6A,0x72,0x6D,0x6C,0x5B,0x51
     38  1.1  christos .byte	0x8D,0x1B,0xAF,0x92,0xBB,0xDD,0xBC,0x7F,0x11,0xD9,0x5C,0x41,0x1F,0x10,0x5A,0xD8
     39  1.1  christos .byte	0x0A,0xC1,0x31,0x88,0xA5,0xCD,0x7B,0xBD,0x2D,0x74,0xD0,0x12,0xB8,0xE5,0xB4,0xB0
     40  1.1  christos .byte	0x89,0x69,0x97,0x4A,0x0C,0x96,0x77,0x7E,0x65,0xB9,0xF1,0x09,0xC5,0x6E,0xC6,0x84
     41  1.1  christos .byte	0x18,0xF0,0x7D,0xEC,0x3A,0xDC,0x4D,0x20,0x79,0xEE,0x5F,0x3E,0xD7,0xCB,0x39,0x48
     42  1.1  christos .Lck:
     43  1.1  christos .long	0x00070E15, 0x1C232A31, 0x383F464D, 0x545B6269
     44  1.1  christos .long	0x70777E85, 0x8C939AA1, 0xA8AFB6BD, 0xC4CBD2D9
     45  1.1  christos .long	0xE0E7EEF5, 0xFC030A11, 0x181F262D, 0x343B4249
     46  1.1  christos .long	0x50575E65, 0x6C737A81, 0x888F969D, 0xA4ABB2B9
     47  1.1  christos .long	0xC0C7CED5, 0xDCE3EAF1, 0xF8FF060D, 0x141B2229
     48  1.1  christos .long	0x30373E45, 0x4C535A61, 0x686F767D, 0x848B9299
     49  1.1  christos .long	0xA0A7AEB5, 0xBCC3CAD1, 0xD8DFE6ED, 0xF4FB0209
     50  1.1  christos .long	0x10171E25, 0x2C333A41, 0x484F565D, 0x646B7279
     51  1.1  christos .Lfk:
     52  1.1  christos .quad	0x56aa3350a3b1bac6,0xb27022dc677d9197
     53  1.1  christos .Lshuffles:
     54  1.1  christos .quad	0x0B0A090807060504,0x030201000F0E0D0C
     55  1.1  christos .Lxts_magic:
     56  1.1  christos .quad	0x0101010101010187,0x0101010101010101
     57  1.1  christos 
     58  1.1  christos .size	_vpsm4_consts,.-_vpsm4_consts
     59  1.1  christos 
     60  1.1  christos .previous
     61  1.1  christos 
     62  1.1  christos .type	_vpsm4_set_key,%function
     63  1.1  christos .align	4
     64  1.1  christos _vpsm4_set_key:
     65  1.1  christos 	AARCH64_VALID_CALL_TARGET
     66  1.1  christos 	ld1	{v5.4s},[x0]
     67  1.1  christos 	adrp	x10,.Lsbox
     68  1.1  christos 	add	x10,x10,#:lo12:.Lsbox
     69  1.1  christos 	ld1	{v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64
     70  1.1  christos 	ld1	{v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64
     71  1.1  christos 	ld1	{v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64
     72  1.1  christos 	ld1	{v28.16b,v29.16b,v30.16b,v31.16b},[x10]
     73  1.1  christos #ifndef __AARCH64EB__
     74  1.1  christos 	rev32	v5.16b,v5.16b
     75  1.1  christos #endif
     76  1.1  christos 	adrp	x5,.Lshuffles
     77  1.1  christos 	add	x5,x5,#:lo12:.Lshuffles
     78  1.1  christos 	ld1	{v7.2d},[x5]
     79  1.1  christos 	adrp	x5,.Lfk
     80  1.1  christos 	add	x5,x5,#:lo12:.Lfk
     81  1.1  christos 	ld1	{v6.2d},[x5]
     82  1.1  christos 	eor	v5.16b,v5.16b,v6.16b
     83  1.1  christos 	mov	x6,#32
     84  1.1  christos 	adrp	x5,.Lck
     85  1.1  christos 	add	x5,x5,#:lo12:.Lck
     86  1.1  christos 	movi	v0.16b,#64
     87  1.1  christos 	cbnz	w2,1f
     88  1.1  christos 	add	x1,x1,124
     89  1.1  christos 1:
     90  1.1  christos 	mov	w7,v5.s[1]
     91  1.1  christos 	ldr	w8,[x5],#4
     92  1.1  christos 	eor	w8,w8,w7
     93  1.1  christos 	mov	w7,v5.s[2]
     94  1.1  christos 	eor	w8,w8,w7
     95  1.1  christos 	mov	w7,v5.s[3]
     96  1.1  christos 	eor	w8,w8,w7
     97  1.1  christos 	// sbox lookup
     98  1.1  christos 	mov	v4.s[0],w8
     99  1.1  christos 	tbl	v1.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v4.16b
    100  1.1  christos 	sub	v4.16b,v4.16b,v0.16b
    101  1.1  christos 	tbx	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v4.16b
    102  1.1  christos 	sub	v4.16b,v4.16b,v0.16b
    103  1.1  christos 	tbx	v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v4.16b
    104  1.1  christos 	sub	v4.16b,v4.16b,v0.16b
    105  1.1  christos 	tbx	v1.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v4.16b
    106  1.1  christos 	mov	w7,v1.s[0]
    107  1.1  christos 	eor	w8,w7,w7,ror #19
    108  1.1  christos 	eor	w8,w8,w7,ror #9
    109  1.1  christos 	mov	w7,v5.s[0]
    110  1.1  christos 	eor	w8,w8,w7
    111  1.1  christos 	mov	v5.s[0],w8
    112  1.1  christos 	cbz	w2,2f
    113  1.1  christos 	str	w8,[x1],#4
    114  1.1  christos 	b	3f
    115  1.1  christos 2:
    116  1.1  christos 	str	w8,[x1],#-4
    117  1.1  christos 3:
    118  1.1  christos 	tbl	v5.16b,{v5.16b},v7.16b
    119  1.1  christos 	subs	x6,x6,#1
    120  1.1  christos 	b.ne	1b
    121  1.1  christos 	ret
    122  1.1  christos .size	_vpsm4_set_key,.-_vpsm4_set_key
    123  1.1  christos .type	_vpsm4_enc_4blks,%function
    124  1.1  christos .align	4
    125  1.1  christos _vpsm4_enc_4blks:
    126  1.1  christos 	AARCH64_VALID_CALL_TARGET
    127  1.1  christos 	mov	x10,x3
    128  1.1  christos 	mov	w11,#8
    129  1.1  christos 10:
    130  1.1  christos 	ldp	w7,w8,[x10],8
    131  1.1  christos 	dup	v12.4s,w7
    132  1.1  christos 	dup	v13.4s,w8
    133  1.1  christos 
    134  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
    135  1.1  christos 	eor	v14.16b,v6.16b,v7.16b
    136  1.1  christos 	eor	v12.16b,v5.16b,v12.16b
    137  1.1  christos 	eor	v12.16b,v14.16b,v12.16b
    138  1.1  christos 	movi	v0.16b,#64
    139  1.1  christos 	movi	v1.16b,#128
    140  1.1  christos 	movi	v2.16b,#192
    141  1.1  christos 	sub	v0.16b,v12.16b,v0.16b
    142  1.1  christos 	sub	v1.16b,v12.16b,v1.16b
    143  1.1  christos 	sub	v2.16b,v12.16b,v2.16b
    144  1.1  christos 	tbl	v12.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v12.16b
    145  1.1  christos 	tbl	v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b
    146  1.1  christos 	tbl	v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b
    147  1.1  christos 	tbl	v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b
    148  1.1  christos 	add	v0.2d,v0.2d,v1.2d
    149  1.1  christos 	add	v2.2d,v2.2d,v12.2d
    150  1.1  christos 	add	v12.2d,v0.2d,v2.2d
    151  1.1  christos 
    152  1.1  christos 	ushr	v0.4s,v12.4s,32-2
    153  1.1  christos 	sli	v0.4s,v12.4s,2
    154  1.1  christos 	ushr	v2.4s,v12.4s,32-10
    155  1.1  christos 	eor	v1.16b,v0.16b,v12.16b
    156  1.1  christos 	sli	v2.4s,v12.4s,10
    157  1.1  christos 	eor	v1.16b,v2.16b,v1.16b
    158  1.1  christos 	ushr	v0.4s,v12.4s,32-18
    159  1.1  christos 	sli	v0.4s,v12.4s,18
    160  1.1  christos 	ushr	v2.4s,v12.4s,32-24
    161  1.1  christos 	eor	v1.16b,v0.16b,v1.16b
    162  1.1  christos 	sli	v2.4s,v12.4s,24
    163  1.1  christos 	eor	v12.16b,v2.16b,v1.16b
    164  1.1  christos 	eor	v4.16b,v4.16b,v12.16b
    165  1.1  christos 
    166  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
    167  1.1  christos 	eor	v14.16b,v14.16b,v4.16b
    168  1.1  christos 	eor	v13.16b,v14.16b,v13.16b
    169  1.1  christos 	movi	v0.16b,#64
    170  1.1  christos 	movi	v1.16b,#128
    171  1.1  christos 	movi	v2.16b,#192
    172  1.1  christos 	sub	v0.16b,v13.16b,v0.16b
    173  1.1  christos 	sub	v1.16b,v13.16b,v1.16b
    174  1.1  christos 	sub	v2.16b,v13.16b,v2.16b
    175  1.1  christos 	tbl	v13.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v13.16b
    176  1.1  christos 	tbl	v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b
    177  1.1  christos 	tbl	v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b
    178  1.1  christos 	tbl	v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b
    179  1.1  christos 	add	v0.2d,v0.2d,v1.2d
    180  1.1  christos 	add	v2.2d,v2.2d,v13.2d
    181  1.1  christos 	add	v13.2d,v0.2d,v2.2d
    182  1.1  christos 
    183  1.1  christos 	ushr	v0.4s,v13.4s,32-2
    184  1.1  christos 	sli	v0.4s,v13.4s,2
    185  1.1  christos 	ushr	v2.4s,v13.4s,32-10
    186  1.1  christos 	eor	v1.16b,v0.16b,v13.16b
    187  1.1  christos 	sli	v2.4s,v13.4s,10
    188  1.1  christos 	eor	v1.16b,v2.16b,v1.16b
    189  1.1  christos 	ushr	v0.4s,v13.4s,32-18
    190  1.1  christos 	sli	v0.4s,v13.4s,18
    191  1.1  christos 	ushr	v2.4s,v13.4s,32-24
    192  1.1  christos 	eor	v1.16b,v0.16b,v1.16b
    193  1.1  christos 	sli	v2.4s,v13.4s,24
    194  1.1  christos 	eor	v13.16b,v2.16b,v1.16b
    195  1.1  christos 	ldp	w7,w8,[x10],8
    196  1.1  christos 	eor	v5.16b,v5.16b,v13.16b
    197  1.1  christos 
    198  1.1  christos 	dup	v12.4s,w7
    199  1.1  christos 	dup	v13.4s,w8
    200  1.1  christos 
    201  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
    202  1.1  christos 	eor	v14.16b,v4.16b,v5.16b
    203  1.1  christos 	eor	v12.16b,v7.16b,v12.16b
    204  1.1  christos 	eor	v12.16b,v14.16b,v12.16b
    205  1.1  christos 	movi	v0.16b,#64
    206  1.1  christos 	movi	v1.16b,#128
    207  1.1  christos 	movi	v2.16b,#192
    208  1.1  christos 	sub	v0.16b,v12.16b,v0.16b
    209  1.1  christos 	sub	v1.16b,v12.16b,v1.16b
    210  1.1  christos 	sub	v2.16b,v12.16b,v2.16b
    211  1.1  christos 	tbl	v12.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v12.16b
    212  1.1  christos 	tbl	v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b
    213  1.1  christos 	tbl	v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b
    214  1.1  christos 	tbl	v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b
    215  1.1  christos 	add	v0.2d,v0.2d,v1.2d
    216  1.1  christos 	add	v2.2d,v2.2d,v12.2d
    217  1.1  christos 	add	v12.2d,v0.2d,v2.2d
    218  1.1  christos 
    219  1.1  christos 	ushr	v0.4s,v12.4s,32-2
    220  1.1  christos 	sli	v0.4s,v12.4s,2
    221  1.1  christos 	ushr	v2.4s,v12.4s,32-10
    222  1.1  christos 	eor	v1.16b,v0.16b,v12.16b
    223  1.1  christos 	sli	v2.4s,v12.4s,10
    224  1.1  christos 	eor	v1.16b,v2.16b,v1.16b
    225  1.1  christos 	ushr	v0.4s,v12.4s,32-18
    226  1.1  christos 	sli	v0.4s,v12.4s,18
    227  1.1  christos 	ushr	v2.4s,v12.4s,32-24
    228  1.1  christos 	eor	v1.16b,v0.16b,v1.16b
    229  1.1  christos 	sli	v2.4s,v12.4s,24
    230  1.1  christos 	eor	v12.16b,v2.16b,v1.16b
    231  1.1  christos 	eor	v6.16b,v6.16b,v12.16b
    232  1.1  christos 
    233  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
    234  1.1  christos 	eor	v14.16b,v14.16b,v6.16b
    235  1.1  christos 	eor	v13.16b,v14.16b,v13.16b
    236  1.1  christos 	movi	v0.16b,#64
    237  1.1  christos 	movi	v1.16b,#128
    238  1.1  christos 	movi	v2.16b,#192
    239  1.1  christos 	sub	v0.16b,v13.16b,v0.16b
    240  1.1  christos 	sub	v1.16b,v13.16b,v1.16b
    241  1.1  christos 	sub	v2.16b,v13.16b,v2.16b
    242  1.1  christos 	tbl	v13.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v13.16b
    243  1.1  christos 	tbl	v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b
    244  1.1  christos 	tbl	v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b
    245  1.1  christos 	tbl	v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b
    246  1.1  christos 	add	v0.2d,v0.2d,v1.2d
    247  1.1  christos 	add	v2.2d,v2.2d,v13.2d
    248  1.1  christos 	add	v13.2d,v0.2d,v2.2d
    249  1.1  christos 
    250  1.1  christos 	ushr	v0.4s,v13.4s,32-2
    251  1.1  christos 	sli	v0.4s,v13.4s,2
    252  1.1  christos 	ushr	v2.4s,v13.4s,32-10
    253  1.1  christos 	eor	v1.16b,v0.16b,v13.16b
    254  1.1  christos 	sli	v2.4s,v13.4s,10
    255  1.1  christos 	eor	v1.16b,v2.16b,v1.16b
    256  1.1  christos 	ushr	v0.4s,v13.4s,32-18
    257  1.1  christos 	sli	v0.4s,v13.4s,18
    258  1.1  christos 	ushr	v2.4s,v13.4s,32-24
    259  1.1  christos 	eor	v1.16b,v0.16b,v1.16b
    260  1.1  christos 	sli	v2.4s,v13.4s,24
    261  1.1  christos 	eor	v13.16b,v2.16b,v1.16b
    262  1.1  christos 	eor	v7.16b,v7.16b,v13.16b
    263  1.1  christos 	subs	w11,w11,#1
    264  1.1  christos 	b.ne	10b
    265  1.1  christos #ifndef __AARCH64EB__
    266  1.1  christos 	rev32	v3.16b,v4.16b
    267  1.1  christos #else
    268  1.1  christos 	mov	v3.16b,v4.16b
    269  1.1  christos #endif
    270  1.1  christos #ifndef __AARCH64EB__
    271  1.1  christos 	rev32	v2.16b,v5.16b
    272  1.1  christos #else
    273  1.1  christos 	mov	v2.16b,v5.16b
    274  1.1  christos #endif
    275  1.1  christos #ifndef __AARCH64EB__
    276  1.1  christos 	rev32	v1.16b,v6.16b
    277  1.1  christos #else
    278  1.1  christos 	mov	v1.16b,v6.16b
    279  1.1  christos #endif
    280  1.1  christos #ifndef __AARCH64EB__
    281  1.1  christos 	rev32	v0.16b,v7.16b
    282  1.1  christos #else
    283  1.1  christos 	mov	v0.16b,v7.16b
    284  1.1  christos #endif
    285  1.1  christos 	ret
    286  1.1  christos .size	_vpsm4_enc_4blks,.-_vpsm4_enc_4blks
    287  1.1  christos .type	_vpsm4_enc_8blks,%function
    288  1.1  christos .align	4
    289  1.1  christos _vpsm4_enc_8blks:
    290  1.1  christos 	AARCH64_VALID_CALL_TARGET
    291  1.1  christos 	mov	x10,x3
    292  1.1  christos 	mov	w11,#8
    293  1.1  christos 10:
    294  1.1  christos 	ldp	w7,w8,[x10],8
    295  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
    296  1.1  christos 	dup	v12.4s,w7
    297  1.1  christos 	eor	v14.16b,v6.16b,v7.16b
    298  1.1  christos 	eor	v15.16b,v10.16b,v11.16b
    299  1.1  christos 	eor	v0.16b,v5.16b,v12.16b
    300  1.1  christos 	eor	v1.16b,v9.16b,v12.16b
    301  1.1  christos 	eor	v12.16b,v14.16b,v0.16b
    302  1.1  christos 	eor	v13.16b,v15.16b,v1.16b
    303  1.1  christos 	movi	v3.16b,#64
    304  1.1  christos 	sub	v0.16b,v12.16b,v3.16b
    305  1.1  christos 	sub	v1.16b,v0.16b,v3.16b
    306  1.1  christos 	sub	v2.16b,v1.16b,v3.16b
    307  1.1  christos 	tbl	v12.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v12.16b
    308  1.1  christos 	tbl	v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b
    309  1.1  christos 	tbl	v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b
    310  1.1  christos 	tbl	v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b
    311  1.1  christos 	add	v1.2d,v0.2d,v1.2d
    312  1.1  christos 	add	v12.2d,v2.2d,v12.2d
    313  1.1  christos 	add	v12.2d,v1.2d,v12.2d
    314  1.1  christos 
    315  1.1  christos 	sub	v0.16b,v13.16b,v3.16b
    316  1.1  christos 	sub	v1.16b,v0.16b,v3.16b
    317  1.1  christos 	sub	v2.16b,v1.16b,v3.16b
    318  1.1  christos 	tbl	v13.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v13.16b
    319  1.1  christos 	tbl	v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b
    320  1.1  christos 	tbl	v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b
    321  1.1  christos 	tbl	v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b
    322  1.1  christos 	add	v1.2d,v0.2d,v1.2d
    323  1.1  christos 	add	v13.2d,v2.2d,v13.2d
    324  1.1  christos 	add	v13.2d,v1.2d,v13.2d
    325  1.1  christos 
    326  1.1  christos 	ushr	v0.4s,v12.4s,32-2
    327  1.1  christos 	sli	v0.4s,v12.4s,2
    328  1.1  christos 	ushr	v2.4s,v13.4s,32-2
    329  1.1  christos 	eor	v1.16b,v0.16b,v12.16b
    330  1.1  christos 	sli	v2.4s,v13.4s,2
    331  1.1  christos 
    332  1.1  christos 	ushr	v0.4s,v12.4s,32-10
    333  1.1  christos 	eor	v3.16b,v2.16b,v13.16b
    334  1.1  christos 	sli	v0.4s,v12.4s,10
    335  1.1  christos 	ushr	v2.4s,v13.4s,32-10
    336  1.1  christos 	eor	v1.16b,v0.16b,v1.16b
    337  1.1  christos 	sli	v2.4s,v13.4s,10
    338  1.1  christos 
    339  1.1  christos 	ushr	v0.4s,v12.4s,32-18
    340  1.1  christos 	eor	v3.16b,v2.16b,v3.16b
    341  1.1  christos 	sli	v0.4s,v12.4s,18
    342  1.1  christos 	ushr	v2.4s,v13.4s,32-18
    343  1.1  christos 	eor	v1.16b,v0.16b,v1.16b
    344  1.1  christos 	sli	v2.4s,v13.4s,18
    345  1.1  christos 
    346  1.1  christos 	ushr	v0.4s,v12.4s,32-24
    347  1.1  christos 	eor	v3.16b,v2.16b,v3.16b
    348  1.1  christos 	sli	v0.4s,v12.4s,24
    349  1.1  christos 	ushr	v2.4s,v13.4s,32-24
    350  1.1  christos 	eor	v12.16b,v0.16b,v1.16b
    351  1.1  christos 	sli	v2.4s,v13.4s,24
    352  1.1  christos 	eor	v13.16b,v2.16b,v3.16b
    353  1.1  christos 	eor	v4.16b,v4.16b,v12.16b
    354  1.1  christos 	eor	v8.16b,v8.16b,v13.16b
    355  1.1  christos 
    356  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
    357  1.1  christos 	dup	v13.4s,w8
    358  1.1  christos 	eor	v14.16b,v14.16b,v4.16b
    359  1.1  christos 	eor	v15.16b,v15.16b,v8.16b
    360  1.1  christos 	eor	v12.16b,v14.16b,v13.16b
    361  1.1  christos 	eor	v13.16b,v15.16b,v13.16b
    362  1.1  christos 	movi	v3.16b,#64
    363  1.1  christos 	sub	v0.16b,v12.16b,v3.16b
    364  1.1  christos 	sub	v1.16b,v0.16b,v3.16b
    365  1.1  christos 	sub	v2.16b,v1.16b,v3.16b
    366  1.1  christos 	tbl	v12.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v12.16b
    367  1.1  christos 	tbl	v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b
    368  1.1  christos 	tbl	v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b
    369  1.1  christos 	tbl	v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b
    370  1.1  christos 	add	v1.2d,v0.2d,v1.2d
    371  1.1  christos 	add	v12.2d,v2.2d,v12.2d
    372  1.1  christos 	add	v12.2d,v1.2d,v12.2d
    373  1.1  christos 
    374  1.1  christos 	sub	v0.16b,v13.16b,v3.16b
    375  1.1  christos 	sub	v1.16b,v0.16b,v3.16b
    376  1.1  christos 	sub	v2.16b,v1.16b,v3.16b
    377  1.1  christos 	tbl	v13.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v13.16b
    378  1.1  christos 	tbl	v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b
    379  1.1  christos 	tbl	v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b
    380  1.1  christos 	tbl	v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b
    381  1.1  christos 	add	v1.2d,v0.2d,v1.2d
    382  1.1  christos 	add	v13.2d,v2.2d,v13.2d
    383  1.1  christos 	add	v13.2d,v1.2d,v13.2d
    384  1.1  christos 
    385  1.1  christos 	ushr	v0.4s,v12.4s,32-2
    386  1.1  christos 	sli	v0.4s,v12.4s,2
    387  1.1  christos 	ushr	v2.4s,v13.4s,32-2
    388  1.1  christos 	eor	v1.16b,v0.16b,v12.16b
    389  1.1  christos 	sli	v2.4s,v13.4s,2
    390  1.1  christos 
    391  1.1  christos 	ushr	v0.4s,v12.4s,32-10
    392  1.1  christos 	eor	v3.16b,v2.16b,v13.16b
    393  1.1  christos 	sli	v0.4s,v12.4s,10
    394  1.1  christos 	ushr	v2.4s,v13.4s,32-10
    395  1.1  christos 	eor	v1.16b,v0.16b,v1.16b
    396  1.1  christos 	sli	v2.4s,v13.4s,10
    397  1.1  christos 
    398  1.1  christos 	ushr	v0.4s,v12.4s,32-18
    399  1.1  christos 	eor	v3.16b,v2.16b,v3.16b
    400  1.1  christos 	sli	v0.4s,v12.4s,18
    401  1.1  christos 	ushr	v2.4s,v13.4s,32-18
    402  1.1  christos 	eor	v1.16b,v0.16b,v1.16b
    403  1.1  christos 	sli	v2.4s,v13.4s,18
    404  1.1  christos 
    405  1.1  christos 	ushr	v0.4s,v12.4s,32-24
    406  1.1  christos 	eor	v3.16b,v2.16b,v3.16b
    407  1.1  christos 	sli	v0.4s,v12.4s,24
    408  1.1  christos 	ushr	v2.4s,v13.4s,32-24
    409  1.1  christos 	eor	v12.16b,v0.16b,v1.16b
    410  1.1  christos 	sli	v2.4s,v13.4s,24
    411  1.1  christos 	eor	v13.16b,v2.16b,v3.16b
    412  1.1  christos 	ldp	w7,w8,[x10],8
    413  1.1  christos 	eor	v5.16b,v5.16b,v12.16b
    414  1.1  christos 	eor	v9.16b,v9.16b,v13.16b
    415  1.1  christos 
    416  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
    417  1.1  christos 	dup	v12.4s,w7
    418  1.1  christos 	eor	v14.16b,v4.16b,v5.16b
    419  1.1  christos 	eor	v15.16b,v8.16b,v9.16b
    420  1.1  christos 	eor	v0.16b,v7.16b,v12.16b
    421  1.1  christos 	eor	v1.16b,v11.16b,v12.16b
    422  1.1  christos 	eor	v12.16b,v14.16b,v0.16b
    423  1.1  christos 	eor	v13.16b,v15.16b,v1.16b
    424  1.1  christos 	movi	v3.16b,#64
    425  1.1  christos 	sub	v0.16b,v12.16b,v3.16b
    426  1.1  christos 	sub	v1.16b,v0.16b,v3.16b
    427  1.1  christos 	sub	v2.16b,v1.16b,v3.16b
    428  1.1  christos 	tbl	v12.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v12.16b
    429  1.1  christos 	tbl	v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b
    430  1.1  christos 	tbl	v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b
    431  1.1  christos 	tbl	v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b
    432  1.1  christos 	add	v1.2d,v0.2d,v1.2d
    433  1.1  christos 	add	v12.2d,v2.2d,v12.2d
    434  1.1  christos 	add	v12.2d,v1.2d,v12.2d
    435  1.1  christos 
    436  1.1  christos 	sub	v0.16b,v13.16b,v3.16b
    437  1.1  christos 	sub	v1.16b,v0.16b,v3.16b
    438  1.1  christos 	sub	v2.16b,v1.16b,v3.16b
    439  1.1  christos 	tbl	v13.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v13.16b
    440  1.1  christos 	tbl	v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b
    441  1.1  christos 	tbl	v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b
    442  1.1  christos 	tbl	v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b
    443  1.1  christos 	add	v1.2d,v0.2d,v1.2d
    444  1.1  christos 	add	v13.2d,v2.2d,v13.2d
    445  1.1  christos 	add	v13.2d,v1.2d,v13.2d
    446  1.1  christos 
    447  1.1  christos 	ushr	v0.4s,v12.4s,32-2
    448  1.1  christos 	sli	v0.4s,v12.4s,2
    449  1.1  christos 	ushr	v2.4s,v13.4s,32-2
    450  1.1  christos 	eor	v1.16b,v0.16b,v12.16b
    451  1.1  christos 	sli	v2.4s,v13.4s,2
    452  1.1  christos 
    453  1.1  christos 	ushr	v0.4s,v12.4s,32-10
    454  1.1  christos 	eor	v3.16b,v2.16b,v13.16b
    455  1.1  christos 	sli	v0.4s,v12.4s,10
    456  1.1  christos 	ushr	v2.4s,v13.4s,32-10
    457  1.1  christos 	eor	v1.16b,v0.16b,v1.16b
    458  1.1  christos 	sli	v2.4s,v13.4s,10
    459  1.1  christos 
    460  1.1  christos 	ushr	v0.4s,v12.4s,32-18
    461  1.1  christos 	eor	v3.16b,v2.16b,v3.16b
    462  1.1  christos 	sli	v0.4s,v12.4s,18
    463  1.1  christos 	ushr	v2.4s,v13.4s,32-18
    464  1.1  christos 	eor	v1.16b,v0.16b,v1.16b
    465  1.1  christos 	sli	v2.4s,v13.4s,18
    466  1.1  christos 
    467  1.1  christos 	ushr	v0.4s,v12.4s,32-24
    468  1.1  christos 	eor	v3.16b,v2.16b,v3.16b
    469  1.1  christos 	sli	v0.4s,v12.4s,24
    470  1.1  christos 	ushr	v2.4s,v13.4s,32-24
    471  1.1  christos 	eor	v12.16b,v0.16b,v1.16b
    472  1.1  christos 	sli	v2.4s,v13.4s,24
    473  1.1  christos 	eor	v13.16b,v2.16b,v3.16b
    474  1.1  christos 	eor	v6.16b,v6.16b,v12.16b
    475  1.1  christos 	eor	v10.16b,v10.16b,v13.16b
    476  1.1  christos 
    477  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
    478  1.1  christos 	dup	v13.4s,w8
    479  1.1  christos 	eor	v14.16b,v14.16b,v6.16b
    480  1.1  christos 	eor	v15.16b,v15.16b,v10.16b
    481  1.1  christos 	eor	v12.16b,v14.16b,v13.16b
    482  1.1  christos 	eor	v13.16b,v15.16b,v13.16b
    483  1.1  christos 	movi	v3.16b,#64
    484  1.1  christos 	sub	v0.16b,v12.16b,v3.16b
    485  1.1  christos 	sub	v1.16b,v0.16b,v3.16b
    486  1.1  christos 	sub	v2.16b,v1.16b,v3.16b
    487  1.1  christos 	tbl	v12.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v12.16b
    488  1.1  christos 	tbl	v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b
    489  1.1  christos 	tbl	v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b
    490  1.1  christos 	tbl	v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b
    491  1.1  christos 	add	v1.2d,v0.2d,v1.2d
    492  1.1  christos 	add	v12.2d,v2.2d,v12.2d
    493  1.1  christos 	add	v12.2d,v1.2d,v12.2d
    494  1.1  christos 
    495  1.1  christos 	sub	v0.16b,v13.16b,v3.16b
    496  1.1  christos 	sub	v1.16b,v0.16b,v3.16b
    497  1.1  christos 	sub	v2.16b,v1.16b,v3.16b
    498  1.1  christos 	tbl	v13.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v13.16b
    499  1.1  christos 	tbl	v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b
    500  1.1  christos 	tbl	v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b
    501  1.1  christos 	tbl	v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b
    502  1.1  christos 	add	v1.2d,v0.2d,v1.2d
    503  1.1  christos 	add	v13.2d,v2.2d,v13.2d
    504  1.1  christos 	add	v13.2d,v1.2d,v13.2d
    505  1.1  christos 
    506  1.1  christos 	ushr	v0.4s,v12.4s,32-2
    507  1.1  christos 	sli	v0.4s,v12.4s,2
    508  1.1  christos 	ushr	v2.4s,v13.4s,32-2
    509  1.1  christos 	eor	v1.16b,v0.16b,v12.16b
    510  1.1  christos 	sli	v2.4s,v13.4s,2
    511  1.1  christos 
    512  1.1  christos 	ushr	v0.4s,v12.4s,32-10
    513  1.1  christos 	eor	v3.16b,v2.16b,v13.16b
    514  1.1  christos 	sli	v0.4s,v12.4s,10
    515  1.1  christos 	ushr	v2.4s,v13.4s,32-10
    516  1.1  christos 	eor	v1.16b,v0.16b,v1.16b
    517  1.1  christos 	sli	v2.4s,v13.4s,10
    518  1.1  christos 
    519  1.1  christos 	ushr	v0.4s,v12.4s,32-18
    520  1.1  christos 	eor	v3.16b,v2.16b,v3.16b
    521  1.1  christos 	sli	v0.4s,v12.4s,18
    522  1.1  christos 	ushr	v2.4s,v13.4s,32-18
    523  1.1  christos 	eor	v1.16b,v0.16b,v1.16b
    524  1.1  christos 	sli	v2.4s,v13.4s,18
    525  1.1  christos 
    526  1.1  christos 	ushr	v0.4s,v12.4s,32-24
    527  1.1  christos 	eor	v3.16b,v2.16b,v3.16b
    528  1.1  christos 	sli	v0.4s,v12.4s,24
    529  1.1  christos 	ushr	v2.4s,v13.4s,32-24
    530  1.1  christos 	eor	v12.16b,v0.16b,v1.16b
    531  1.1  christos 	sli	v2.4s,v13.4s,24
    532  1.1  christos 	eor	v13.16b,v2.16b,v3.16b
    533  1.1  christos 	eor	v7.16b,v7.16b,v12.16b
    534  1.1  christos 	eor	v11.16b,v11.16b,v13.16b
    535  1.1  christos 	subs	w11,w11,#1
    536  1.1  christos 	b.ne	10b
    537  1.1  christos #ifndef __AARCH64EB__
    538  1.1  christos 	rev32	v3.16b,v4.16b
    539  1.1  christos #else
    540  1.1  christos 	mov	v3.16b,v4.16b
    541  1.1  christos #endif
    542  1.1  christos #ifndef __AARCH64EB__
    543  1.1  christos 	rev32	v2.16b,v5.16b
    544  1.1  christos #else
    545  1.1  christos 	mov	v2.16b,v5.16b
    546  1.1  christos #endif
    547  1.1  christos #ifndef __AARCH64EB__
    548  1.1  christos 	rev32	v1.16b,v6.16b
    549  1.1  christos #else
    550  1.1  christos 	mov	v1.16b,v6.16b
    551  1.1  christos #endif
    552  1.1  christos #ifndef __AARCH64EB__
    553  1.1  christos 	rev32	v0.16b,v7.16b
    554  1.1  christos #else
    555  1.1  christos 	mov	v0.16b,v7.16b
    556  1.1  christos #endif
    557  1.1  christos #ifndef __AARCH64EB__
    558  1.1  christos 	rev32	v7.16b,v8.16b
    559  1.1  christos #else
    560  1.1  christos 	mov	v7.16b,v8.16b
    561  1.1  christos #endif
    562  1.1  christos #ifndef __AARCH64EB__
    563  1.1  christos 	rev32	v6.16b,v9.16b
    564  1.1  christos #else
    565  1.1  christos 	mov	v6.16b,v9.16b
    566  1.1  christos #endif
    567  1.1  christos #ifndef __AARCH64EB__
    568  1.1  christos 	rev32	v5.16b,v10.16b
    569  1.1  christos #else
    570  1.1  christos 	mov	v5.16b,v10.16b
    571  1.1  christos #endif
    572  1.1  christos #ifndef __AARCH64EB__
    573  1.1  christos 	rev32	v4.16b,v11.16b
    574  1.1  christos #else
    575  1.1  christos 	mov	v4.16b,v11.16b
    576  1.1  christos #endif
    577  1.1  christos 	ret
    578  1.1  christos .size	_vpsm4_enc_8blks,.-_vpsm4_enc_8blks
    579  1.1  christos .globl	vpsm4_set_encrypt_key
    580  1.1  christos .type	vpsm4_set_encrypt_key,%function
    581  1.1  christos .align	5
    582  1.1  christos vpsm4_set_encrypt_key:
    583  1.1  christos 	AARCH64_SIGN_LINK_REGISTER
    584  1.1  christos 	stp	x29,x30,[sp,#-16]!
    585  1.1  christos 	mov	w2,1
    586  1.1  christos 	bl	_vpsm4_set_key
    587  1.1  christos 	ldp	x29,x30,[sp],#16
    588  1.1  christos 	AARCH64_VALIDATE_LINK_REGISTER
    589  1.1  christos 	ret
    590  1.1  christos .size	vpsm4_set_encrypt_key,.-vpsm4_set_encrypt_key
    591  1.1  christos .globl	vpsm4_set_decrypt_key
    592  1.1  christos .type	vpsm4_set_decrypt_key,%function
    593  1.1  christos .align	5
    594  1.1  christos vpsm4_set_decrypt_key:
    595  1.1  christos 	AARCH64_SIGN_LINK_REGISTER
    596  1.1  christos 	stp	x29,x30,[sp,#-16]!
    597  1.1  christos 	mov	w2,0
    598  1.1  christos 	bl	_vpsm4_set_key
    599  1.1  christos 	ldp	x29,x30,[sp],#16
    600  1.1  christos 	AARCH64_VALIDATE_LINK_REGISTER
    601  1.1  christos 	ret
    602  1.1  christos .size	vpsm4_set_decrypt_key,.-vpsm4_set_decrypt_key
    603  1.1  christos .globl	vpsm4_encrypt
    604  1.1  christos .type	vpsm4_encrypt,%function
    605  1.1  christos .align	5
    606  1.1  christos vpsm4_encrypt:
    607  1.1  christos 	AARCH64_VALID_CALL_TARGET
    608  1.1  christos 	ld1	{v4.4s},[x0]
    609  1.1  christos 	adrp	x10,.Lsbox
    610  1.1  christos 	add	x10,x10,#:lo12:.Lsbox
    611  1.1  christos 	ld1	{v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64
    612  1.1  christos 	ld1	{v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64
    613  1.1  christos 	ld1	{v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64
    614  1.1  christos 	ld1	{v28.16b,v29.16b,v30.16b,v31.16b},[x10]
    615  1.1  christos #ifndef __AARCH64EB__
    616  1.1  christos 	rev32	v4.16b,v4.16b
    617  1.1  christos #endif
    618  1.1  christos 	mov	x3,x2
    619  1.1  christos 	mov	x10,x3
    620  1.1  christos 	mov	w11,#8
    621  1.1  christos 	mov	w12,v4.s[0]
    622  1.1  christos 	mov	w13,v4.s[1]
    623  1.1  christos 	mov	w14,v4.s[2]
    624  1.1  christos 	mov	w15,v4.s[3]
    625  1.1  christos 10:
    626  1.1  christos 	ldp	w7,w8,[x10],8
    627  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
    628  1.1  christos 	eor	w6,w14,w15
    629  1.1  christos 	eor	w9,w7,w13
    630  1.1  christos 	eor	w6,w6,w9
    631  1.1  christos 	movi	v1.16b,#64
    632  1.1  christos 	movi	v2.16b,#128
    633  1.1  christos 	movi	v3.16b,#192
    634  1.1  christos 	mov	v0.s[0],w6
    635  1.1  christos 
    636  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
    637  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
    638  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
    639  1.1  christos 
    640  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
    641  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
    642  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
    643  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
    644  1.1  christos 
    645  1.1  christos 	mov	w6,v0.s[0]
    646  1.1  christos 	mov	w7,v1.s[0]
    647  1.1  christos 	mov	w9,v2.s[0]
    648  1.1  christos 	add	w7,w6,w7
    649  1.1  christos 	mov	w6,v3.s[0]
    650  1.1  christos 	add	w7,w7,w9
    651  1.1  christos 	add	w7,w7,w6
    652  1.1  christos 
    653  1.1  christos 	eor	w6,w7,w7,ror #32-2
    654  1.1  christos 	eor	w6,w6,w7,ror #32-10
    655  1.1  christos 	eor	w6,w6,w7,ror #32-18
    656  1.1  christos 	eor	w6,w6,w7,ror #32-24
    657  1.1  christos 	eor	w12,w12,w6
    658  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
    659  1.1  christos 	eor	w6,w14,w15
    660  1.1  christos 	eor	w9,w12,w8
    661  1.1  christos 	eor	w6,w6,w9
    662  1.1  christos 	movi	v1.16b,#64
    663  1.1  christos 	movi	v2.16b,#128
    664  1.1  christos 	movi	v3.16b,#192
    665  1.1  christos 	mov	v0.s[0],w6
    666  1.1  christos 
    667  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
    668  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
    669  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
    670  1.1  christos 
    671  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
    672  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
    673  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
    674  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
    675  1.1  christos 
    676  1.1  christos 	mov	w6,v0.s[0]
    677  1.1  christos 	mov	w7,v1.s[0]
    678  1.1  christos 	mov	w9,v2.s[0]
    679  1.1  christos 	add	w7,w6,w7
    680  1.1  christos 	mov	w6,v3.s[0]
    681  1.1  christos 	add	w7,w7,w9
    682  1.1  christos 	add	w7,w7,w6
    683  1.1  christos 
    684  1.1  christos 	eor	w6,w7,w7,ror #32-2
    685  1.1  christos 	eor	w6,w6,w7,ror #32-10
    686  1.1  christos 	eor	w6,w6,w7,ror #32-18
    687  1.1  christos 	eor	w6,w6,w7,ror #32-24
    688  1.1  christos 	ldp	w7,w8,[x10],8
    689  1.1  christos 	eor	w13,w13,w6
    690  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
    691  1.1  christos 	eor	w6,w12,w13
    692  1.1  christos 	eor	w9,w7,w15
    693  1.1  christos 	eor	w6,w6,w9
    694  1.1  christos 	movi	v1.16b,#64
    695  1.1  christos 	movi	v2.16b,#128
    696  1.1  christos 	movi	v3.16b,#192
    697  1.1  christos 	mov	v0.s[0],w6
    698  1.1  christos 
    699  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
    700  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
    701  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
    702  1.1  christos 
    703  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
    704  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
    705  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
    706  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
    707  1.1  christos 
    708  1.1  christos 	mov	w6,v0.s[0]
    709  1.1  christos 	mov	w7,v1.s[0]
    710  1.1  christos 	mov	w9,v2.s[0]
    711  1.1  christos 	add	w7,w6,w7
    712  1.1  christos 	mov	w6,v3.s[0]
    713  1.1  christos 	add	w7,w7,w9
    714  1.1  christos 	add	w7,w7,w6
    715  1.1  christos 
    716  1.1  christos 	eor	w6,w7,w7,ror #32-2
    717  1.1  christos 	eor	w6,w6,w7,ror #32-10
    718  1.1  christos 	eor	w6,w6,w7,ror #32-18
    719  1.1  christos 	eor	w6,w6,w7,ror #32-24
    720  1.1  christos 	eor	w14,w14,w6
    721  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
    722  1.1  christos 	eor	w6,w12,w13
    723  1.1  christos 	eor	w9,w14,w8
    724  1.1  christos 	eor	w6,w6,w9
    725  1.1  christos 	movi	v1.16b,#64
    726  1.1  christos 	movi	v2.16b,#128
    727  1.1  christos 	movi	v3.16b,#192
    728  1.1  christos 	mov	v0.s[0],w6
    729  1.1  christos 
    730  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
    731  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
    732  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
    733  1.1  christos 
    734  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
    735  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
    736  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
    737  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
    738  1.1  christos 
    739  1.1  christos 	mov	w6,v0.s[0]
    740  1.1  christos 	mov	w7,v1.s[0]
    741  1.1  christos 	mov	w9,v2.s[0]
    742  1.1  christos 	add	w7,w6,w7
    743  1.1  christos 	mov	w6,v3.s[0]
    744  1.1  christos 	add	w7,w7,w9
    745  1.1  christos 	add	w7,w7,w6
    746  1.1  christos 
    747  1.1  christos 	eor	w6,w7,w7,ror #32-2
    748  1.1  christos 	eor	w6,w6,w7,ror #32-10
    749  1.1  christos 	eor	w6,w6,w7,ror #32-18
    750  1.1  christos 	eor	w6,w6,w7,ror #32-24
    751  1.1  christos 	eor	w15,w15,w6
    752  1.1  christos 	subs	w11,w11,#1
    753  1.1  christos 	b.ne	10b
    754  1.1  christos 	mov	v4.s[0],w15
    755  1.1  christos 	mov	v4.s[1],w14
    756  1.1  christos 	mov	v4.s[2],w13
    757  1.1  christos 	mov	v4.s[3],w12
    758  1.1  christos #ifndef __AARCH64EB__
    759  1.1  christos 	rev32	v4.16b,v4.16b
    760  1.1  christos #endif
    761  1.1  christos 	st1	{v4.4s},[x1]
    762  1.1  christos 	ret
    763  1.1  christos .size	vpsm4_encrypt,.-vpsm4_encrypt
    764  1.1  christos .globl	vpsm4_decrypt
    765  1.1  christos .type	vpsm4_decrypt,%function
    766  1.1  christos .align	5
    767  1.1  christos vpsm4_decrypt:
    768  1.1  christos 	AARCH64_VALID_CALL_TARGET
    769  1.1  christos 	ld1	{v4.4s},[x0]
    770  1.1  christos 	adrp	x10,.Lsbox
    771  1.1  christos 	add	x10,x10,#:lo12:.Lsbox
    772  1.1  christos 	ld1	{v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64
    773  1.1  christos 	ld1	{v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64
    774  1.1  christos 	ld1	{v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64
    775  1.1  christos 	ld1	{v28.16b,v29.16b,v30.16b,v31.16b},[x10]
    776  1.1  christos #ifndef __AARCH64EB__
    777  1.1  christos 	rev32	v4.16b,v4.16b
    778  1.1  christos #endif
    779  1.1  christos 	mov	x3,x2
    780  1.1  christos 	mov	x10,x3
    781  1.1  christos 	mov	w11,#8
    782  1.1  christos 	mov	w12,v4.s[0]
    783  1.1  christos 	mov	w13,v4.s[1]
    784  1.1  christos 	mov	w14,v4.s[2]
    785  1.1  christos 	mov	w15,v4.s[3]
    786  1.1  christos 10:
    787  1.1  christos 	ldp	w7,w8,[x10],8
    788  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
    789  1.1  christos 	eor	w6,w14,w15
    790  1.1  christos 	eor	w9,w7,w13
    791  1.1  christos 	eor	w6,w6,w9
    792  1.1  christos 	movi	v1.16b,#64
    793  1.1  christos 	movi	v2.16b,#128
    794  1.1  christos 	movi	v3.16b,#192
    795  1.1  christos 	mov	v0.s[0],w6
    796  1.1  christos 
    797  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
    798  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
    799  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
    800  1.1  christos 
    801  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
    802  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
    803  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
    804  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
    805  1.1  christos 
    806  1.1  christos 	mov	w6,v0.s[0]
    807  1.1  christos 	mov	w7,v1.s[0]
    808  1.1  christos 	mov	w9,v2.s[0]
    809  1.1  christos 	add	w7,w6,w7
    810  1.1  christos 	mov	w6,v3.s[0]
    811  1.1  christos 	add	w7,w7,w9
    812  1.1  christos 	add	w7,w7,w6
    813  1.1  christos 
    814  1.1  christos 	eor	w6,w7,w7,ror #32-2
    815  1.1  christos 	eor	w6,w6,w7,ror #32-10
    816  1.1  christos 	eor	w6,w6,w7,ror #32-18
    817  1.1  christos 	eor	w6,w6,w7,ror #32-24
    818  1.1  christos 	eor	w12,w12,w6
    819  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
    820  1.1  christos 	eor	w6,w14,w15
    821  1.1  christos 	eor	w9,w12,w8
    822  1.1  christos 	eor	w6,w6,w9
    823  1.1  christos 	movi	v1.16b,#64
    824  1.1  christos 	movi	v2.16b,#128
    825  1.1  christos 	movi	v3.16b,#192
    826  1.1  christos 	mov	v0.s[0],w6
    827  1.1  christos 
    828  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
    829  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
    830  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
    831  1.1  christos 
    832  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
    833  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
    834  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
    835  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
    836  1.1  christos 
    837  1.1  christos 	mov	w6,v0.s[0]
    838  1.1  christos 	mov	w7,v1.s[0]
    839  1.1  christos 	mov	w9,v2.s[0]
    840  1.1  christos 	add	w7,w6,w7
    841  1.1  christos 	mov	w6,v3.s[0]
    842  1.1  christos 	add	w7,w7,w9
    843  1.1  christos 	add	w7,w7,w6
    844  1.1  christos 
    845  1.1  christos 	eor	w6,w7,w7,ror #32-2
    846  1.1  christos 	eor	w6,w6,w7,ror #32-10
    847  1.1  christos 	eor	w6,w6,w7,ror #32-18
    848  1.1  christos 	eor	w6,w6,w7,ror #32-24
    849  1.1  christos 	ldp	w7,w8,[x10],8
    850  1.1  christos 	eor	w13,w13,w6
    851  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
    852  1.1  christos 	eor	w6,w12,w13
    853  1.1  christos 	eor	w9,w7,w15
    854  1.1  christos 	eor	w6,w6,w9
    855  1.1  christos 	movi	v1.16b,#64
    856  1.1  christos 	movi	v2.16b,#128
    857  1.1  christos 	movi	v3.16b,#192
    858  1.1  christos 	mov	v0.s[0],w6
    859  1.1  christos 
    860  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
    861  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
    862  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
    863  1.1  christos 
    864  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
    865  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
    866  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
    867  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
    868  1.1  christos 
    869  1.1  christos 	mov	w6,v0.s[0]
    870  1.1  christos 	mov	w7,v1.s[0]
    871  1.1  christos 	mov	w9,v2.s[0]
    872  1.1  christos 	add	w7,w6,w7
    873  1.1  christos 	mov	w6,v3.s[0]
    874  1.1  christos 	add	w7,w7,w9
    875  1.1  christos 	add	w7,w7,w6
    876  1.1  christos 
    877  1.1  christos 	eor	w6,w7,w7,ror #32-2
    878  1.1  christos 	eor	w6,w6,w7,ror #32-10
    879  1.1  christos 	eor	w6,w6,w7,ror #32-18
    880  1.1  christos 	eor	w6,w6,w7,ror #32-24
    881  1.1  christos 	eor	w14,w14,w6
    882  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
    883  1.1  christos 	eor	w6,w12,w13
    884  1.1  christos 	eor	w9,w14,w8
    885  1.1  christos 	eor	w6,w6,w9
    886  1.1  christos 	movi	v1.16b,#64
    887  1.1  christos 	movi	v2.16b,#128
    888  1.1  christos 	movi	v3.16b,#192
    889  1.1  christos 	mov	v0.s[0],w6
    890  1.1  christos 
    891  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
    892  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
    893  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
    894  1.1  christos 
    895  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
    896  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
    897  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
    898  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
    899  1.1  christos 
    900  1.1  christos 	mov	w6,v0.s[0]
    901  1.1  christos 	mov	w7,v1.s[0]
    902  1.1  christos 	mov	w9,v2.s[0]
    903  1.1  christos 	add	w7,w6,w7
    904  1.1  christos 	mov	w6,v3.s[0]
    905  1.1  christos 	add	w7,w7,w9
    906  1.1  christos 	add	w7,w7,w6
    907  1.1  christos 
    908  1.1  christos 	eor	w6,w7,w7,ror #32-2
    909  1.1  christos 	eor	w6,w6,w7,ror #32-10
    910  1.1  christos 	eor	w6,w6,w7,ror #32-18
    911  1.1  christos 	eor	w6,w6,w7,ror #32-24
    912  1.1  christos 	eor	w15,w15,w6
    913  1.1  christos 	subs	w11,w11,#1
    914  1.1  christos 	b.ne	10b
    915  1.1  christos 	mov	v4.s[0],w15
    916  1.1  christos 	mov	v4.s[1],w14
    917  1.1  christos 	mov	v4.s[2],w13
    918  1.1  christos 	mov	v4.s[3],w12
    919  1.1  christos #ifndef __AARCH64EB__
    920  1.1  christos 	rev32	v4.16b,v4.16b
    921  1.1  christos #endif
    922  1.1  christos 	st1	{v4.4s},[x1]
    923  1.1  christos 	ret
    924  1.1  christos .size	vpsm4_decrypt,.-vpsm4_decrypt
    925  1.1  christos .globl	vpsm4_ecb_encrypt
    926  1.1  christos .type	vpsm4_ecb_encrypt,%function
    927  1.1  christos .align	5
    928  1.1  christos vpsm4_ecb_encrypt:
    929  1.1  christos 	AARCH64_SIGN_LINK_REGISTER
    930  1.1  christos 	// convert length into blocks
    931  1.1  christos 	lsr	x2,x2,4
    932  1.1  christos 	stp	d8,d9,[sp,#-80]!
    933  1.1  christos 	stp	d10,d11,[sp,#16]
    934  1.1  christos 	stp	d12,d13,[sp,#32]
    935  1.1  christos 	stp	d14,d15,[sp,#48]
    936  1.1  christos 	stp	x29,x30,[sp,#64]
    937  1.1  christos 	adrp	x10,.Lsbox
    938  1.1  christos 	add	x10,x10,#:lo12:.Lsbox
    939  1.1  christos 	ld1	{v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64
    940  1.1  christos 	ld1	{v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64
    941  1.1  christos 	ld1	{v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64
    942  1.1  christos 	ld1	{v28.16b,v29.16b,v30.16b,v31.16b},[x10]
    943  1.1  christos .Lecb_8_blocks_process:
    944  1.1  christos 	cmp	w2,#8
    945  1.1  christos 	b.lt	.Lecb_4_blocks_process
    946  1.1  christos 	ld4	{v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64
    947  1.1  christos 	ld4	{v8.4s,v9.4s,v10.4s,v11.4s},[x0],#64
    948  1.1  christos #ifndef __AARCH64EB__
    949  1.1  christos 	rev32	v4.16b,v4.16b
    950  1.1  christos #endif
    951  1.1  christos #ifndef __AARCH64EB__
    952  1.1  christos 	rev32	v5.16b,v5.16b
    953  1.1  christos #endif
    954  1.1  christos #ifndef __AARCH64EB__
    955  1.1  christos 	rev32	v6.16b,v6.16b
    956  1.1  christos #endif
    957  1.1  christos #ifndef __AARCH64EB__
    958  1.1  christos 	rev32	v7.16b,v7.16b
    959  1.1  christos #endif
    960  1.1  christos #ifndef __AARCH64EB__
    961  1.1  christos 	rev32	v8.16b,v8.16b
    962  1.1  christos #endif
    963  1.1  christos #ifndef __AARCH64EB__
    964  1.1  christos 	rev32	v9.16b,v9.16b
    965  1.1  christos #endif
    966  1.1  christos #ifndef __AARCH64EB__
    967  1.1  christos 	rev32	v10.16b,v10.16b
    968  1.1  christos #endif
    969  1.1  christos #ifndef __AARCH64EB__
    970  1.1  christos 	rev32	v11.16b,v11.16b
    971  1.1  christos #endif
    972  1.1  christos 	bl	_vpsm4_enc_8blks
    973  1.1  christos 	st4	{v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64
    974  1.1  christos 	st4	{v4.4s,v5.4s,v6.4s,v7.4s},[x1],#64
    975  1.1  christos 	subs	w2,w2,#8
    976  1.1  christos 	b.gt	.Lecb_8_blocks_process
    977  1.1  christos 	b	100f
    978  1.1  christos .Lecb_4_blocks_process:
    979  1.1  christos 	cmp	w2,#4
    980  1.1  christos 	b.lt	1f
    981  1.1  christos 	ld4	{v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64
    982  1.1  christos #ifndef __AARCH64EB__
    983  1.1  christos 	rev32	v4.16b,v4.16b
    984  1.1  christos #endif
    985  1.1  christos #ifndef __AARCH64EB__
    986  1.1  christos 	rev32	v5.16b,v5.16b
    987  1.1  christos #endif
    988  1.1  christos #ifndef __AARCH64EB__
    989  1.1  christos 	rev32	v6.16b,v6.16b
    990  1.1  christos #endif
    991  1.1  christos #ifndef __AARCH64EB__
    992  1.1  christos 	rev32	v7.16b,v7.16b
    993  1.1  christos #endif
    994  1.1  christos 	bl	_vpsm4_enc_4blks
    995  1.1  christos 	st4	{v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64
    996  1.1  christos 	sub	w2,w2,#4
    997  1.1  christos 1:
    998  1.1  christos 	// process last block
    999  1.1  christos 	cmp	w2,#1
   1000  1.1  christos 	b.lt	100f
   1001  1.1  christos 	b.gt	1f
   1002  1.1  christos 	ld1	{v4.4s},[x0]
   1003  1.1  christos #ifndef __AARCH64EB__
   1004  1.1  christos 	rev32	v4.16b,v4.16b
   1005  1.1  christos #endif
   1006  1.1  christos 	mov	x10,x3
   1007  1.1  christos 	mov	w11,#8
   1008  1.1  christos 	mov	w12,v4.s[0]
   1009  1.1  christos 	mov	w13,v4.s[1]
   1010  1.1  christos 	mov	w14,v4.s[2]
   1011  1.1  christos 	mov	w15,v4.s[3]
   1012  1.1  christos 10:
   1013  1.1  christos 	ldp	w7,w8,[x10],8
   1014  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   1015  1.1  christos 	eor	w6,w14,w15
   1016  1.1  christos 	eor	w9,w7,w13
   1017  1.1  christos 	eor	w6,w6,w9
   1018  1.1  christos 	movi	v1.16b,#64
   1019  1.1  christos 	movi	v2.16b,#128
   1020  1.1  christos 	movi	v3.16b,#192
   1021  1.1  christos 	mov	v0.s[0],w6
   1022  1.1  christos 
   1023  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1024  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1025  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1026  1.1  christos 
   1027  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1028  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1029  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1030  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1031  1.1  christos 
   1032  1.1  christos 	mov	w6,v0.s[0]
   1033  1.1  christos 	mov	w7,v1.s[0]
   1034  1.1  christos 	mov	w9,v2.s[0]
   1035  1.1  christos 	add	w7,w6,w7
   1036  1.1  christos 	mov	w6,v3.s[0]
   1037  1.1  christos 	add	w7,w7,w9
   1038  1.1  christos 	add	w7,w7,w6
   1039  1.1  christos 
   1040  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1041  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1042  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1043  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1044  1.1  christos 	eor	w12,w12,w6
   1045  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   1046  1.1  christos 	eor	w6,w14,w15
   1047  1.1  christos 	eor	w9,w12,w8
   1048  1.1  christos 	eor	w6,w6,w9
   1049  1.1  christos 	movi	v1.16b,#64
   1050  1.1  christos 	movi	v2.16b,#128
   1051  1.1  christos 	movi	v3.16b,#192
   1052  1.1  christos 	mov	v0.s[0],w6
   1053  1.1  christos 
   1054  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1055  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1056  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1057  1.1  christos 
   1058  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1059  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1060  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1061  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1062  1.1  christos 
   1063  1.1  christos 	mov	w6,v0.s[0]
   1064  1.1  christos 	mov	w7,v1.s[0]
   1065  1.1  christos 	mov	w9,v2.s[0]
   1066  1.1  christos 	add	w7,w6,w7
   1067  1.1  christos 	mov	w6,v3.s[0]
   1068  1.1  christos 	add	w7,w7,w9
   1069  1.1  christos 	add	w7,w7,w6
   1070  1.1  christos 
   1071  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1072  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1073  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1074  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1075  1.1  christos 	ldp	w7,w8,[x10],8
   1076  1.1  christos 	eor	w13,w13,w6
   1077  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   1078  1.1  christos 	eor	w6,w12,w13
   1079  1.1  christos 	eor	w9,w7,w15
   1080  1.1  christos 	eor	w6,w6,w9
   1081  1.1  christos 	movi	v1.16b,#64
   1082  1.1  christos 	movi	v2.16b,#128
   1083  1.1  christos 	movi	v3.16b,#192
   1084  1.1  christos 	mov	v0.s[0],w6
   1085  1.1  christos 
   1086  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1087  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1088  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1089  1.1  christos 
   1090  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1091  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1092  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1093  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1094  1.1  christos 
   1095  1.1  christos 	mov	w6,v0.s[0]
   1096  1.1  christos 	mov	w7,v1.s[0]
   1097  1.1  christos 	mov	w9,v2.s[0]
   1098  1.1  christos 	add	w7,w6,w7
   1099  1.1  christos 	mov	w6,v3.s[0]
   1100  1.1  christos 	add	w7,w7,w9
   1101  1.1  christos 	add	w7,w7,w6
   1102  1.1  christos 
   1103  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1104  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1105  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1106  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1107  1.1  christos 	eor	w14,w14,w6
   1108  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   1109  1.1  christos 	eor	w6,w12,w13
   1110  1.1  christos 	eor	w9,w14,w8
   1111  1.1  christos 	eor	w6,w6,w9
   1112  1.1  christos 	movi	v1.16b,#64
   1113  1.1  christos 	movi	v2.16b,#128
   1114  1.1  christos 	movi	v3.16b,#192
   1115  1.1  christos 	mov	v0.s[0],w6
   1116  1.1  christos 
   1117  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1118  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1119  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1120  1.1  christos 
   1121  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1122  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1123  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1124  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1125  1.1  christos 
   1126  1.1  christos 	mov	w6,v0.s[0]
   1127  1.1  christos 	mov	w7,v1.s[0]
   1128  1.1  christos 	mov	w9,v2.s[0]
   1129  1.1  christos 	add	w7,w6,w7
   1130  1.1  christos 	mov	w6,v3.s[0]
   1131  1.1  christos 	add	w7,w7,w9
   1132  1.1  christos 	add	w7,w7,w6
   1133  1.1  christos 
   1134  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1135  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1136  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1137  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1138  1.1  christos 	eor	w15,w15,w6
   1139  1.1  christos 	subs	w11,w11,#1
   1140  1.1  christos 	b.ne	10b
   1141  1.1  christos 	mov	v4.s[0],w15
   1142  1.1  christos 	mov	v4.s[1],w14
   1143  1.1  christos 	mov	v4.s[2],w13
   1144  1.1  christos 	mov	v4.s[3],w12
   1145  1.1  christos #ifndef __AARCH64EB__
   1146  1.1  christos 	rev32	v4.16b,v4.16b
   1147  1.1  christos #endif
   1148  1.1  christos 	st1	{v4.4s},[x1]
   1149  1.1  christos 	b	100f
   1150  1.1  christos 1:	//	process last 2 blocks
   1151  1.1  christos 	ld4	{v4.s,v5.s,v6.s,v7.s}[0],[x0],#16
   1152  1.1  christos 	ld4	{v4.s,v5.s,v6.s,v7.s}[1],[x0],#16
   1153  1.1  christos 	cmp	w2,#2
   1154  1.1  christos 	b.gt	1f
   1155  1.1  christos #ifndef __AARCH64EB__
   1156  1.1  christos 	rev32	v4.16b,v4.16b
   1157  1.1  christos #endif
   1158  1.1  christos #ifndef __AARCH64EB__
   1159  1.1  christos 	rev32	v5.16b,v5.16b
   1160  1.1  christos #endif
   1161  1.1  christos #ifndef __AARCH64EB__
   1162  1.1  christos 	rev32	v6.16b,v6.16b
   1163  1.1  christos #endif
   1164  1.1  christos #ifndef __AARCH64EB__
   1165  1.1  christos 	rev32	v7.16b,v7.16b
   1166  1.1  christos #endif
   1167  1.1  christos 	bl	_vpsm4_enc_4blks
   1168  1.1  christos 	st4	{v0.s,v1.s,v2.s,v3.s}[0],[x1],#16
   1169  1.1  christos 	st4	{v0.s,v1.s,v2.s,v3.s}[1],[x1]
   1170  1.1  christos 	b	100f
   1171  1.1  christos 1:	//	process last 3 blocks
   1172  1.1  christos 	ld4	{v4.s,v5.s,v6.s,v7.s}[2],[x0],#16
   1173  1.1  christos #ifndef __AARCH64EB__
   1174  1.1  christos 	rev32	v4.16b,v4.16b
   1175  1.1  christos #endif
   1176  1.1  christos #ifndef __AARCH64EB__
   1177  1.1  christos 	rev32	v5.16b,v5.16b
   1178  1.1  christos #endif
   1179  1.1  christos #ifndef __AARCH64EB__
   1180  1.1  christos 	rev32	v6.16b,v6.16b
   1181  1.1  christos #endif
   1182  1.1  christos #ifndef __AARCH64EB__
   1183  1.1  christos 	rev32	v7.16b,v7.16b
   1184  1.1  christos #endif
   1185  1.1  christos 	bl	_vpsm4_enc_4blks
   1186  1.1  christos 	st4	{v0.s,v1.s,v2.s,v3.s}[0],[x1],#16
   1187  1.1  christos 	st4	{v0.s,v1.s,v2.s,v3.s}[1],[x1],#16
   1188  1.1  christos 	st4	{v0.s,v1.s,v2.s,v3.s}[2],[x1]
   1189  1.1  christos 100:
   1190  1.1  christos 	ldp	d10,d11,[sp,#16]
   1191  1.1  christos 	ldp	d12,d13,[sp,#32]
   1192  1.1  christos 	ldp	d14,d15,[sp,#48]
   1193  1.1  christos 	ldp	x29,x30,[sp,#64]
   1194  1.1  christos 	ldp	d8,d9,[sp],#80
   1195  1.1  christos 	AARCH64_VALIDATE_LINK_REGISTER
   1196  1.1  christos 	ret
   1197  1.1  christos .size	vpsm4_ecb_encrypt,.-vpsm4_ecb_encrypt
   1198  1.1  christos .globl	vpsm4_cbc_encrypt
   1199  1.1  christos .type	vpsm4_cbc_encrypt,%function
   1200  1.1  christos .align	5
   1201  1.1  christos vpsm4_cbc_encrypt:
   1202  1.1  christos 	AARCH64_VALID_CALL_TARGET
   1203  1.1  christos 	lsr	x2,x2,4
   1204  1.1  christos 	adrp	x10,.Lsbox
   1205  1.1  christos 	add	x10,x10,#:lo12:.Lsbox
   1206  1.1  christos 	ld1	{v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64
   1207  1.1  christos 	ld1	{v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64
   1208  1.1  christos 	ld1	{v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64
   1209  1.1  christos 	ld1	{v28.16b,v29.16b,v30.16b,v31.16b},[x10]
   1210  1.1  christos 	cbz	w5,.Ldec
   1211  1.1  christos 	ld1	{v3.4s},[x4]
   1212  1.1  christos .Lcbc_4_blocks_enc:
   1213  1.1  christos 	cmp	w2,#4
   1214  1.1  christos 	b.lt	1f
   1215  1.1  christos 	ld1	{v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64
   1216  1.1  christos 	eor	v4.16b,v4.16b,v3.16b
   1217  1.1  christos #ifndef __AARCH64EB__
   1218  1.1  christos 	rev32	v5.16b,v5.16b
   1219  1.1  christos #endif
   1220  1.1  christos #ifndef __AARCH64EB__
   1221  1.1  christos 	rev32	v4.16b,v4.16b
   1222  1.1  christos #endif
   1223  1.1  christos #ifndef __AARCH64EB__
   1224  1.1  christos 	rev32	v6.16b,v6.16b
   1225  1.1  christos #endif
   1226  1.1  christos #ifndef __AARCH64EB__
   1227  1.1  christos 	rev32	v7.16b,v7.16b
   1228  1.1  christos #endif
   1229  1.1  christos 	mov	x10,x3
   1230  1.1  christos 	mov	w11,#8
   1231  1.1  christos 	mov	w12,v4.s[0]
   1232  1.1  christos 	mov	w13,v4.s[1]
   1233  1.1  christos 	mov	w14,v4.s[2]
   1234  1.1  christos 	mov	w15,v4.s[3]
   1235  1.1  christos 10:
   1236  1.1  christos 	ldp	w7,w8,[x10],8
   1237  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   1238  1.1  christos 	eor	w6,w14,w15
   1239  1.1  christos 	eor	w9,w7,w13
   1240  1.1  christos 	eor	w6,w6,w9
   1241  1.1  christos 	movi	v1.16b,#64
   1242  1.1  christos 	movi	v2.16b,#128
   1243  1.1  christos 	movi	v3.16b,#192
   1244  1.1  christos 	mov	v0.s[0],w6
   1245  1.1  christos 
   1246  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1247  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1248  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1249  1.1  christos 
   1250  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1251  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1252  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1253  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1254  1.1  christos 
   1255  1.1  christos 	mov	w6,v0.s[0]
   1256  1.1  christos 	mov	w7,v1.s[0]
   1257  1.1  christos 	mov	w9,v2.s[0]
   1258  1.1  christos 	add	w7,w6,w7
   1259  1.1  christos 	mov	w6,v3.s[0]
   1260  1.1  christos 	add	w7,w7,w9
   1261  1.1  christos 	add	w7,w7,w6
   1262  1.1  christos 
   1263  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1264  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1265  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1266  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1267  1.1  christos 	eor	w12,w12,w6
   1268  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   1269  1.1  christos 	eor	w6,w14,w15
   1270  1.1  christos 	eor	w9,w12,w8
   1271  1.1  christos 	eor	w6,w6,w9
   1272  1.1  christos 	movi	v1.16b,#64
   1273  1.1  christos 	movi	v2.16b,#128
   1274  1.1  christos 	movi	v3.16b,#192
   1275  1.1  christos 	mov	v0.s[0],w6
   1276  1.1  christos 
   1277  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1278  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1279  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1280  1.1  christos 
   1281  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1282  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1283  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1284  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1285  1.1  christos 
   1286  1.1  christos 	mov	w6,v0.s[0]
   1287  1.1  christos 	mov	w7,v1.s[0]
   1288  1.1  christos 	mov	w9,v2.s[0]
   1289  1.1  christos 	add	w7,w6,w7
   1290  1.1  christos 	mov	w6,v3.s[0]
   1291  1.1  christos 	add	w7,w7,w9
   1292  1.1  christos 	add	w7,w7,w6
   1293  1.1  christos 
   1294  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1295  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1296  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1297  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1298  1.1  christos 	ldp	w7,w8,[x10],8
   1299  1.1  christos 	eor	w13,w13,w6
   1300  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   1301  1.1  christos 	eor	w6,w12,w13
   1302  1.1  christos 	eor	w9,w7,w15
   1303  1.1  christos 	eor	w6,w6,w9
   1304  1.1  christos 	movi	v1.16b,#64
   1305  1.1  christos 	movi	v2.16b,#128
   1306  1.1  christos 	movi	v3.16b,#192
   1307  1.1  christos 	mov	v0.s[0],w6
   1308  1.1  christos 
   1309  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1310  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1311  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1312  1.1  christos 
   1313  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1314  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1315  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1316  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1317  1.1  christos 
   1318  1.1  christos 	mov	w6,v0.s[0]
   1319  1.1  christos 	mov	w7,v1.s[0]
   1320  1.1  christos 	mov	w9,v2.s[0]
   1321  1.1  christos 	add	w7,w6,w7
   1322  1.1  christos 	mov	w6,v3.s[0]
   1323  1.1  christos 	add	w7,w7,w9
   1324  1.1  christos 	add	w7,w7,w6
   1325  1.1  christos 
   1326  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1327  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1328  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1329  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1330  1.1  christos 	eor	w14,w14,w6
   1331  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   1332  1.1  christos 	eor	w6,w12,w13
   1333  1.1  christos 	eor	w9,w14,w8
   1334  1.1  christos 	eor	w6,w6,w9
   1335  1.1  christos 	movi	v1.16b,#64
   1336  1.1  christos 	movi	v2.16b,#128
   1337  1.1  christos 	movi	v3.16b,#192
   1338  1.1  christos 	mov	v0.s[0],w6
   1339  1.1  christos 
   1340  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1341  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1342  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1343  1.1  christos 
   1344  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1345  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1346  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1347  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1348  1.1  christos 
   1349  1.1  christos 	mov	w6,v0.s[0]
   1350  1.1  christos 	mov	w7,v1.s[0]
   1351  1.1  christos 	mov	w9,v2.s[0]
   1352  1.1  christos 	add	w7,w6,w7
   1353  1.1  christos 	mov	w6,v3.s[0]
   1354  1.1  christos 	add	w7,w7,w9
   1355  1.1  christos 	add	w7,w7,w6
   1356  1.1  christos 
   1357  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1358  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1359  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1360  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1361  1.1  christos 	eor	w15,w15,w6
   1362  1.1  christos 	subs	w11,w11,#1
   1363  1.1  christos 	b.ne	10b
   1364  1.1  christos 	mov	v4.s[0],w15
   1365  1.1  christos 	mov	v4.s[1],w14
   1366  1.1  christos 	mov	v4.s[2],w13
   1367  1.1  christos 	mov	v4.s[3],w12
   1368  1.1  christos 	eor	v5.16b,v5.16b,v4.16b
   1369  1.1  christos 	mov	x10,x3
   1370  1.1  christos 	mov	w11,#8
   1371  1.1  christos 	mov	w12,v5.s[0]
   1372  1.1  christos 	mov	w13,v5.s[1]
   1373  1.1  christos 	mov	w14,v5.s[2]
   1374  1.1  christos 	mov	w15,v5.s[3]
   1375  1.1  christos 10:
   1376  1.1  christos 	ldp	w7,w8,[x10],8
   1377  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   1378  1.1  christos 	eor	w6,w14,w15
   1379  1.1  christos 	eor	w9,w7,w13
   1380  1.1  christos 	eor	w6,w6,w9
   1381  1.1  christos 	movi	v1.16b,#64
   1382  1.1  christos 	movi	v2.16b,#128
   1383  1.1  christos 	movi	v3.16b,#192
   1384  1.1  christos 	mov	v0.s[0],w6
   1385  1.1  christos 
   1386  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1387  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1388  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1389  1.1  christos 
   1390  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1391  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1392  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1393  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1394  1.1  christos 
   1395  1.1  christos 	mov	w6,v0.s[0]
   1396  1.1  christos 	mov	w7,v1.s[0]
   1397  1.1  christos 	mov	w9,v2.s[0]
   1398  1.1  christos 	add	w7,w6,w7
   1399  1.1  christos 	mov	w6,v3.s[0]
   1400  1.1  christos 	add	w7,w7,w9
   1401  1.1  christos 	add	w7,w7,w6
   1402  1.1  christos 
   1403  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1404  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1405  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1406  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1407  1.1  christos 	eor	w12,w12,w6
   1408  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   1409  1.1  christos 	eor	w6,w14,w15
   1410  1.1  christos 	eor	w9,w12,w8
   1411  1.1  christos 	eor	w6,w6,w9
   1412  1.1  christos 	movi	v1.16b,#64
   1413  1.1  christos 	movi	v2.16b,#128
   1414  1.1  christos 	movi	v3.16b,#192
   1415  1.1  christos 	mov	v0.s[0],w6
   1416  1.1  christos 
   1417  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1418  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1419  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1420  1.1  christos 
   1421  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1422  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1423  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1424  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1425  1.1  christos 
   1426  1.1  christos 	mov	w6,v0.s[0]
   1427  1.1  christos 	mov	w7,v1.s[0]
   1428  1.1  christos 	mov	w9,v2.s[0]
   1429  1.1  christos 	add	w7,w6,w7
   1430  1.1  christos 	mov	w6,v3.s[0]
   1431  1.1  christos 	add	w7,w7,w9
   1432  1.1  christos 	add	w7,w7,w6
   1433  1.1  christos 
   1434  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1435  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1436  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1437  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1438  1.1  christos 	ldp	w7,w8,[x10],8
   1439  1.1  christos 	eor	w13,w13,w6
   1440  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   1441  1.1  christos 	eor	w6,w12,w13
   1442  1.1  christos 	eor	w9,w7,w15
   1443  1.1  christos 	eor	w6,w6,w9
   1444  1.1  christos 	movi	v1.16b,#64
   1445  1.1  christos 	movi	v2.16b,#128
   1446  1.1  christos 	movi	v3.16b,#192
   1447  1.1  christos 	mov	v0.s[0],w6
   1448  1.1  christos 
   1449  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1450  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1451  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1452  1.1  christos 
   1453  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1454  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1455  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1456  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1457  1.1  christos 
   1458  1.1  christos 	mov	w6,v0.s[0]
   1459  1.1  christos 	mov	w7,v1.s[0]
   1460  1.1  christos 	mov	w9,v2.s[0]
   1461  1.1  christos 	add	w7,w6,w7
   1462  1.1  christos 	mov	w6,v3.s[0]
   1463  1.1  christos 	add	w7,w7,w9
   1464  1.1  christos 	add	w7,w7,w6
   1465  1.1  christos 
   1466  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1467  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1468  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1469  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1470  1.1  christos 	eor	w14,w14,w6
   1471  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   1472  1.1  christos 	eor	w6,w12,w13
   1473  1.1  christos 	eor	w9,w14,w8
   1474  1.1  christos 	eor	w6,w6,w9
   1475  1.1  christos 	movi	v1.16b,#64
   1476  1.1  christos 	movi	v2.16b,#128
   1477  1.1  christos 	movi	v3.16b,#192
   1478  1.1  christos 	mov	v0.s[0],w6
   1479  1.1  christos 
   1480  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1481  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1482  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1483  1.1  christos 
   1484  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1485  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1486  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1487  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1488  1.1  christos 
   1489  1.1  christos 	mov	w6,v0.s[0]
   1490  1.1  christos 	mov	w7,v1.s[0]
   1491  1.1  christos 	mov	w9,v2.s[0]
   1492  1.1  christos 	add	w7,w6,w7
   1493  1.1  christos 	mov	w6,v3.s[0]
   1494  1.1  christos 	add	w7,w7,w9
   1495  1.1  christos 	add	w7,w7,w6
   1496  1.1  christos 
   1497  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1498  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1499  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1500  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1501  1.1  christos 	eor	w15,w15,w6
   1502  1.1  christos 	subs	w11,w11,#1
   1503  1.1  christos 	b.ne	10b
   1504  1.1  christos 	mov	v5.s[0],w15
   1505  1.1  christos 	mov	v5.s[1],w14
   1506  1.1  christos 	mov	v5.s[2],w13
   1507  1.1  christos 	mov	v5.s[3],w12
   1508  1.1  christos #ifndef __AARCH64EB__
   1509  1.1  christos 	rev32	v4.16b,v4.16b
   1510  1.1  christos #endif
   1511  1.1  christos 	eor	v6.16b,v6.16b,v5.16b
   1512  1.1  christos 	mov	x10,x3
   1513  1.1  christos 	mov	w11,#8
   1514  1.1  christos 	mov	w12,v6.s[0]
   1515  1.1  christos 	mov	w13,v6.s[1]
   1516  1.1  christos 	mov	w14,v6.s[2]
   1517  1.1  christos 	mov	w15,v6.s[3]
   1518  1.1  christos 10:
   1519  1.1  christos 	ldp	w7,w8,[x10],8
   1520  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   1521  1.1  christos 	eor	w6,w14,w15
   1522  1.1  christos 	eor	w9,w7,w13
   1523  1.1  christos 	eor	w6,w6,w9
   1524  1.1  christos 	movi	v1.16b,#64
   1525  1.1  christos 	movi	v2.16b,#128
   1526  1.1  christos 	movi	v3.16b,#192
   1527  1.1  christos 	mov	v0.s[0],w6
   1528  1.1  christos 
   1529  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1530  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1531  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1532  1.1  christos 
   1533  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1534  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1535  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1536  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1537  1.1  christos 
   1538  1.1  christos 	mov	w6,v0.s[0]
   1539  1.1  christos 	mov	w7,v1.s[0]
   1540  1.1  christos 	mov	w9,v2.s[0]
   1541  1.1  christos 	add	w7,w6,w7
   1542  1.1  christos 	mov	w6,v3.s[0]
   1543  1.1  christos 	add	w7,w7,w9
   1544  1.1  christos 	add	w7,w7,w6
   1545  1.1  christos 
   1546  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1547  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1548  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1549  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1550  1.1  christos 	eor	w12,w12,w6
   1551  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   1552  1.1  christos 	eor	w6,w14,w15
   1553  1.1  christos 	eor	w9,w12,w8
   1554  1.1  christos 	eor	w6,w6,w9
   1555  1.1  christos 	movi	v1.16b,#64
   1556  1.1  christos 	movi	v2.16b,#128
   1557  1.1  christos 	movi	v3.16b,#192
   1558  1.1  christos 	mov	v0.s[0],w6
   1559  1.1  christos 
   1560  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1561  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1562  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1563  1.1  christos 
   1564  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1565  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1566  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1567  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1568  1.1  christos 
   1569  1.1  christos 	mov	w6,v0.s[0]
   1570  1.1  christos 	mov	w7,v1.s[0]
   1571  1.1  christos 	mov	w9,v2.s[0]
   1572  1.1  christos 	add	w7,w6,w7
   1573  1.1  christos 	mov	w6,v3.s[0]
   1574  1.1  christos 	add	w7,w7,w9
   1575  1.1  christos 	add	w7,w7,w6
   1576  1.1  christos 
   1577  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1578  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1579  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1580  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1581  1.1  christos 	ldp	w7,w8,[x10],8
   1582  1.1  christos 	eor	w13,w13,w6
   1583  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   1584  1.1  christos 	eor	w6,w12,w13
   1585  1.1  christos 	eor	w9,w7,w15
   1586  1.1  christos 	eor	w6,w6,w9
   1587  1.1  christos 	movi	v1.16b,#64
   1588  1.1  christos 	movi	v2.16b,#128
   1589  1.1  christos 	movi	v3.16b,#192
   1590  1.1  christos 	mov	v0.s[0],w6
   1591  1.1  christos 
   1592  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1593  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1594  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1595  1.1  christos 
   1596  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1597  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1598  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1599  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1600  1.1  christos 
   1601  1.1  christos 	mov	w6,v0.s[0]
   1602  1.1  christos 	mov	w7,v1.s[0]
   1603  1.1  christos 	mov	w9,v2.s[0]
   1604  1.1  christos 	add	w7,w6,w7
   1605  1.1  christos 	mov	w6,v3.s[0]
   1606  1.1  christos 	add	w7,w7,w9
   1607  1.1  christos 	add	w7,w7,w6
   1608  1.1  christos 
   1609  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1610  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1611  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1612  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1613  1.1  christos 	eor	w14,w14,w6
   1614  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   1615  1.1  christos 	eor	w6,w12,w13
   1616  1.1  christos 	eor	w9,w14,w8
   1617  1.1  christos 	eor	w6,w6,w9
   1618  1.1  christos 	movi	v1.16b,#64
   1619  1.1  christos 	movi	v2.16b,#128
   1620  1.1  christos 	movi	v3.16b,#192
   1621  1.1  christos 	mov	v0.s[0],w6
   1622  1.1  christos 
   1623  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1624  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1625  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1626  1.1  christos 
   1627  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1628  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1629  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1630  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1631  1.1  christos 
   1632  1.1  christos 	mov	w6,v0.s[0]
   1633  1.1  christos 	mov	w7,v1.s[0]
   1634  1.1  christos 	mov	w9,v2.s[0]
   1635  1.1  christos 	add	w7,w6,w7
   1636  1.1  christos 	mov	w6,v3.s[0]
   1637  1.1  christos 	add	w7,w7,w9
   1638  1.1  christos 	add	w7,w7,w6
   1639  1.1  christos 
   1640  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1641  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1642  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1643  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1644  1.1  christos 	eor	w15,w15,w6
   1645  1.1  christos 	subs	w11,w11,#1
   1646  1.1  christos 	b.ne	10b
   1647  1.1  christos 	mov	v6.s[0],w15
   1648  1.1  christos 	mov	v6.s[1],w14
   1649  1.1  christos 	mov	v6.s[2],w13
   1650  1.1  christos 	mov	v6.s[3],w12
   1651  1.1  christos #ifndef __AARCH64EB__
   1652  1.1  christos 	rev32	v5.16b,v5.16b
   1653  1.1  christos #endif
   1654  1.1  christos 	eor	v7.16b,v7.16b,v6.16b
   1655  1.1  christos 	mov	x10,x3
   1656  1.1  christos 	mov	w11,#8
   1657  1.1  christos 	mov	w12,v7.s[0]
   1658  1.1  christos 	mov	w13,v7.s[1]
   1659  1.1  christos 	mov	w14,v7.s[2]
   1660  1.1  christos 	mov	w15,v7.s[3]
   1661  1.1  christos 10:
   1662  1.1  christos 	ldp	w7,w8,[x10],8
   1663  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   1664  1.1  christos 	eor	w6,w14,w15
   1665  1.1  christos 	eor	w9,w7,w13
   1666  1.1  christos 	eor	w6,w6,w9
   1667  1.1  christos 	movi	v1.16b,#64
   1668  1.1  christos 	movi	v2.16b,#128
   1669  1.1  christos 	movi	v3.16b,#192
   1670  1.1  christos 	mov	v0.s[0],w6
   1671  1.1  christos 
   1672  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1673  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1674  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1675  1.1  christos 
   1676  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1677  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1678  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1679  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1680  1.1  christos 
   1681  1.1  christos 	mov	w6,v0.s[0]
   1682  1.1  christos 	mov	w7,v1.s[0]
   1683  1.1  christos 	mov	w9,v2.s[0]
   1684  1.1  christos 	add	w7,w6,w7
   1685  1.1  christos 	mov	w6,v3.s[0]
   1686  1.1  christos 	add	w7,w7,w9
   1687  1.1  christos 	add	w7,w7,w6
   1688  1.1  christos 
   1689  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1690  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1691  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1692  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1693  1.1  christos 	eor	w12,w12,w6
   1694  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   1695  1.1  christos 	eor	w6,w14,w15
   1696  1.1  christos 	eor	w9,w12,w8
   1697  1.1  christos 	eor	w6,w6,w9
   1698  1.1  christos 	movi	v1.16b,#64
   1699  1.1  christos 	movi	v2.16b,#128
   1700  1.1  christos 	movi	v3.16b,#192
   1701  1.1  christos 	mov	v0.s[0],w6
   1702  1.1  christos 
   1703  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1704  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1705  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1706  1.1  christos 
   1707  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1708  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1709  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1710  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1711  1.1  christos 
   1712  1.1  christos 	mov	w6,v0.s[0]
   1713  1.1  christos 	mov	w7,v1.s[0]
   1714  1.1  christos 	mov	w9,v2.s[0]
   1715  1.1  christos 	add	w7,w6,w7
   1716  1.1  christos 	mov	w6,v3.s[0]
   1717  1.1  christos 	add	w7,w7,w9
   1718  1.1  christos 	add	w7,w7,w6
   1719  1.1  christos 
   1720  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1721  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1722  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1723  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1724  1.1  christos 	ldp	w7,w8,[x10],8
   1725  1.1  christos 	eor	w13,w13,w6
   1726  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   1727  1.1  christos 	eor	w6,w12,w13
   1728  1.1  christos 	eor	w9,w7,w15
   1729  1.1  christos 	eor	w6,w6,w9
   1730  1.1  christos 	movi	v1.16b,#64
   1731  1.1  christos 	movi	v2.16b,#128
   1732  1.1  christos 	movi	v3.16b,#192
   1733  1.1  christos 	mov	v0.s[0],w6
   1734  1.1  christos 
   1735  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1736  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1737  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1738  1.1  christos 
   1739  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1740  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1741  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1742  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1743  1.1  christos 
   1744  1.1  christos 	mov	w6,v0.s[0]
   1745  1.1  christos 	mov	w7,v1.s[0]
   1746  1.1  christos 	mov	w9,v2.s[0]
   1747  1.1  christos 	add	w7,w6,w7
   1748  1.1  christos 	mov	w6,v3.s[0]
   1749  1.1  christos 	add	w7,w7,w9
   1750  1.1  christos 	add	w7,w7,w6
   1751  1.1  christos 
   1752  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1753  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1754  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1755  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1756  1.1  christos 	eor	w14,w14,w6
   1757  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   1758  1.1  christos 	eor	w6,w12,w13
   1759  1.1  christos 	eor	w9,w14,w8
   1760  1.1  christos 	eor	w6,w6,w9
   1761  1.1  christos 	movi	v1.16b,#64
   1762  1.1  christos 	movi	v2.16b,#128
   1763  1.1  christos 	movi	v3.16b,#192
   1764  1.1  christos 	mov	v0.s[0],w6
   1765  1.1  christos 
   1766  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1767  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1768  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1769  1.1  christos 
   1770  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1771  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1772  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1773  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1774  1.1  christos 
   1775  1.1  christos 	mov	w6,v0.s[0]
   1776  1.1  christos 	mov	w7,v1.s[0]
   1777  1.1  christos 	mov	w9,v2.s[0]
   1778  1.1  christos 	add	w7,w6,w7
   1779  1.1  christos 	mov	w6,v3.s[0]
   1780  1.1  christos 	add	w7,w7,w9
   1781  1.1  christos 	add	w7,w7,w6
   1782  1.1  christos 
   1783  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1784  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1785  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1786  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1787  1.1  christos 	eor	w15,w15,w6
   1788  1.1  christos 	subs	w11,w11,#1
   1789  1.1  christos 	b.ne	10b
   1790  1.1  christos 	mov	v7.s[0],w15
   1791  1.1  christos 	mov	v7.s[1],w14
   1792  1.1  christos 	mov	v7.s[2],w13
   1793  1.1  christos 	mov	v7.s[3],w12
   1794  1.1  christos #ifndef __AARCH64EB__
   1795  1.1  christos 	rev32	v6.16b,v6.16b
   1796  1.1  christos #endif
   1797  1.1  christos #ifndef __AARCH64EB__
   1798  1.1  christos 	rev32	v7.16b,v7.16b
   1799  1.1  christos #endif
   1800  1.1  christos 	orr	v3.16b,v7.16b,v7.16b
   1801  1.1  christos 	st1	{v4.4s,v5.4s,v6.4s,v7.4s},[x1],#64
   1802  1.1  christos 	subs	w2,w2,#4
   1803  1.1  christos 	b.ne	.Lcbc_4_blocks_enc
   1804  1.1  christos 	b	2f
   1805  1.1  christos 1:
   1806  1.1  christos 	subs	w2,w2,#1
   1807  1.1  christos 	b.lt	2f
   1808  1.1  christos 	ld1	{v4.4s},[x0],#16
   1809  1.1  christos 	eor	v3.16b,v3.16b,v4.16b
   1810  1.1  christos #ifndef __AARCH64EB__
   1811  1.1  christos 	rev32	v3.16b,v3.16b
   1812  1.1  christos #endif
   1813  1.1  christos 	mov	x10,x3
   1814  1.1  christos 	mov	w11,#8
   1815  1.1  christos 	mov	w12,v3.s[0]
   1816  1.1  christos 	mov	w13,v3.s[1]
   1817  1.1  christos 	mov	w14,v3.s[2]
   1818  1.1  christos 	mov	w15,v3.s[3]
   1819  1.1  christos 10:
   1820  1.1  christos 	ldp	w7,w8,[x10],8
   1821  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   1822  1.1  christos 	eor	w6,w14,w15
   1823  1.1  christos 	eor	w9,w7,w13
   1824  1.1  christos 	eor	w6,w6,w9
   1825  1.1  christos 	movi	v1.16b,#64
   1826  1.1  christos 	movi	v2.16b,#128
   1827  1.1  christos 	movi	v3.16b,#192
   1828  1.1  christos 	mov	v0.s[0],w6
   1829  1.1  christos 
   1830  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1831  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1832  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1833  1.1  christos 
   1834  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1835  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1836  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1837  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1838  1.1  christos 
   1839  1.1  christos 	mov	w6,v0.s[0]
   1840  1.1  christos 	mov	w7,v1.s[0]
   1841  1.1  christos 	mov	w9,v2.s[0]
   1842  1.1  christos 	add	w7,w6,w7
   1843  1.1  christos 	mov	w6,v3.s[0]
   1844  1.1  christos 	add	w7,w7,w9
   1845  1.1  christos 	add	w7,w7,w6
   1846  1.1  christos 
   1847  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1848  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1849  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1850  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1851  1.1  christos 	eor	w12,w12,w6
   1852  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   1853  1.1  christos 	eor	w6,w14,w15
   1854  1.1  christos 	eor	w9,w12,w8
   1855  1.1  christos 	eor	w6,w6,w9
   1856  1.1  christos 	movi	v1.16b,#64
   1857  1.1  christos 	movi	v2.16b,#128
   1858  1.1  christos 	movi	v3.16b,#192
   1859  1.1  christos 	mov	v0.s[0],w6
   1860  1.1  christos 
   1861  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1862  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1863  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1864  1.1  christos 
   1865  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1866  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1867  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1868  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1869  1.1  christos 
   1870  1.1  christos 	mov	w6,v0.s[0]
   1871  1.1  christos 	mov	w7,v1.s[0]
   1872  1.1  christos 	mov	w9,v2.s[0]
   1873  1.1  christos 	add	w7,w6,w7
   1874  1.1  christos 	mov	w6,v3.s[0]
   1875  1.1  christos 	add	w7,w7,w9
   1876  1.1  christos 	add	w7,w7,w6
   1877  1.1  christos 
   1878  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1879  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1880  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1881  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1882  1.1  christos 	ldp	w7,w8,[x10],8
   1883  1.1  christos 	eor	w13,w13,w6
   1884  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   1885  1.1  christos 	eor	w6,w12,w13
   1886  1.1  christos 	eor	w9,w7,w15
   1887  1.1  christos 	eor	w6,w6,w9
   1888  1.1  christos 	movi	v1.16b,#64
   1889  1.1  christos 	movi	v2.16b,#128
   1890  1.1  christos 	movi	v3.16b,#192
   1891  1.1  christos 	mov	v0.s[0],w6
   1892  1.1  christos 
   1893  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1894  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1895  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1896  1.1  christos 
   1897  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1898  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1899  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1900  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1901  1.1  christos 
   1902  1.1  christos 	mov	w6,v0.s[0]
   1903  1.1  christos 	mov	w7,v1.s[0]
   1904  1.1  christos 	mov	w9,v2.s[0]
   1905  1.1  christos 	add	w7,w6,w7
   1906  1.1  christos 	mov	w6,v3.s[0]
   1907  1.1  christos 	add	w7,w7,w9
   1908  1.1  christos 	add	w7,w7,w6
   1909  1.1  christos 
   1910  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1911  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1912  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1913  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1914  1.1  christos 	eor	w14,w14,w6
   1915  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   1916  1.1  christos 	eor	w6,w12,w13
   1917  1.1  christos 	eor	w9,w14,w8
   1918  1.1  christos 	eor	w6,w6,w9
   1919  1.1  christos 	movi	v1.16b,#64
   1920  1.1  christos 	movi	v2.16b,#128
   1921  1.1  christos 	movi	v3.16b,#192
   1922  1.1  christos 	mov	v0.s[0],w6
   1923  1.1  christos 
   1924  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   1925  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   1926  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   1927  1.1  christos 
   1928  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   1929  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   1930  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   1931  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   1932  1.1  christos 
   1933  1.1  christos 	mov	w6,v0.s[0]
   1934  1.1  christos 	mov	w7,v1.s[0]
   1935  1.1  christos 	mov	w9,v2.s[0]
   1936  1.1  christos 	add	w7,w6,w7
   1937  1.1  christos 	mov	w6,v3.s[0]
   1938  1.1  christos 	add	w7,w7,w9
   1939  1.1  christos 	add	w7,w7,w6
   1940  1.1  christos 
   1941  1.1  christos 	eor	w6,w7,w7,ror #32-2
   1942  1.1  christos 	eor	w6,w6,w7,ror #32-10
   1943  1.1  christos 	eor	w6,w6,w7,ror #32-18
   1944  1.1  christos 	eor	w6,w6,w7,ror #32-24
   1945  1.1  christos 	eor	w15,w15,w6
   1946  1.1  christos 	subs	w11,w11,#1
   1947  1.1  christos 	b.ne	10b
   1948  1.1  christos 	mov	v3.s[0],w15
   1949  1.1  christos 	mov	v3.s[1],w14
   1950  1.1  christos 	mov	v3.s[2],w13
   1951  1.1  christos 	mov	v3.s[3],w12
   1952  1.1  christos #ifndef __AARCH64EB__
   1953  1.1  christos 	rev32	v3.16b,v3.16b
   1954  1.1  christos #endif
   1955  1.1  christos 	st1	{v3.4s},[x1],#16
   1956  1.1  christos 	b	1b
   1957  1.1  christos 2:
   1958  1.1  christos 	// save back IV
   1959  1.1  christos 	st1	{v3.4s},[x4]
   1960  1.1  christos 	ret
   1961  1.1  christos 
   1962  1.1  christos .Ldec:
   1963  1.1  christos 	// decryption mode starts
   1964  1.1  christos 	AARCH64_SIGN_LINK_REGISTER
   1965  1.1  christos 	stp	d8,d9,[sp,#-80]!
   1966  1.1  christos 	stp	d10,d11,[sp,#16]
   1967  1.1  christos 	stp	d12,d13,[sp,#32]
   1968  1.1  christos 	stp	d14,d15,[sp,#48]
   1969  1.1  christos 	stp	x29,x30,[sp,#64]
   1970  1.1  christos .Lcbc_8_blocks_dec:
   1971  1.1  christos 	cmp	w2,#8
   1972  1.1  christos 	b.lt	1f
   1973  1.1  christos 	ld4	{v4.4s,v5.4s,v6.4s,v7.4s},[x0]
   1974  1.1  christos 	add	x10,x0,#64
   1975  1.1  christos 	ld4	{v8.4s,v9.4s,v10.4s,v11.4s},[x10]
   1976  1.1  christos #ifndef __AARCH64EB__
   1977  1.1  christos 	rev32	v4.16b,v4.16b
   1978  1.1  christos #endif
   1979  1.1  christos #ifndef __AARCH64EB__
   1980  1.1  christos 	rev32	v5.16b,v5.16b
   1981  1.1  christos #endif
   1982  1.1  christos #ifndef __AARCH64EB__
   1983  1.1  christos 	rev32	v6.16b,v6.16b
   1984  1.1  christos #endif
   1985  1.1  christos #ifndef __AARCH64EB__
   1986  1.1  christos 	rev32	v7.16b,v7.16b
   1987  1.1  christos #endif
   1988  1.1  christos #ifndef __AARCH64EB__
   1989  1.1  christos 	rev32	v8.16b,v8.16b
   1990  1.1  christos #endif
   1991  1.1  christos #ifndef __AARCH64EB__
   1992  1.1  christos 	rev32	v9.16b,v9.16b
   1993  1.1  christos #endif
   1994  1.1  christos #ifndef __AARCH64EB__
   1995  1.1  christos 	rev32	v10.16b,v10.16b
   1996  1.1  christos #endif
   1997  1.1  christos #ifndef __AARCH64EB__
   1998  1.1  christos 	rev32	v11.16b,v11.16b
   1999  1.1  christos #endif
   2000  1.1  christos 	bl	_vpsm4_enc_8blks
   2001  1.1  christos 	zip1	v8.4s,v0.4s,v1.4s
   2002  1.1  christos 	zip2	v9.4s,v0.4s,v1.4s
   2003  1.1  christos 	zip1	v10.4s,v2.4s,v3.4s
   2004  1.1  christos 	zip2	v11.4s,v2.4s,v3.4s
   2005  1.1  christos 	zip1	v0.2d,v8.2d,v10.2d
   2006  1.1  christos 	zip2	v1.2d,v8.2d,v10.2d
   2007  1.1  christos 	zip1	v2.2d,v9.2d,v11.2d
   2008  1.1  christos 	zip2	v3.2d,v9.2d,v11.2d
   2009  1.1  christos 	zip1	v8.4s,v4.4s,v5.4s
   2010  1.1  christos 	zip2	v9.4s,v4.4s,v5.4s
   2011  1.1  christos 	zip1	v10.4s,v6.4s,v7.4s
   2012  1.1  christos 	zip2	v11.4s,v6.4s,v7.4s
   2013  1.1  christos 	zip1	v4.2d,v8.2d,v10.2d
   2014  1.1  christos 	zip2	v5.2d,v8.2d,v10.2d
   2015  1.1  christos 	zip1	v6.2d,v9.2d,v11.2d
   2016  1.1  christos 	zip2	v7.2d,v9.2d,v11.2d
   2017  1.1  christos 	ld1	{v15.4s},[x4]
   2018  1.1  christos 	ld1	{v8.4s,v9.4s,v10.4s,v11.4s},[x0],#64
   2019  1.1  christos 	// note ivec1 and vtmpx[3] are reusing the same register
   2020  1.1  christos 	// care needs to be taken to avoid conflict
   2021  1.1  christos 	eor	v0.16b,v0.16b,v15.16b
   2022  1.1  christos 	ld1	{v12.4s,v13.4s,v14.4s,v15.4s},[x0],#64
   2023  1.1  christos 	eor	v1.16b,v1.16b,v8.16b
   2024  1.1  christos 	eor	v2.16b,v2.16b,v9.16b
   2025  1.1  christos 	eor	v3.16b,v3.16b,v10.16b
   2026  1.1  christos 	// save back IV
   2027  1.1  christos 	st1	{v15.4s}, [x4]
   2028  1.1  christos 	eor	v4.16b,v4.16b,v11.16b
   2029  1.1  christos 	eor	v5.16b,v5.16b,v12.16b
   2030  1.1  christos 	eor	v6.16b,v6.16b,v13.16b
   2031  1.1  christos 	eor	v7.16b,v7.16b,v14.16b
   2032  1.1  christos 	st1	{v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64
   2033  1.1  christos 	st1	{v4.4s,v5.4s,v6.4s,v7.4s},[x1],#64
   2034  1.1  christos 	subs	w2,w2,#8
   2035  1.1  christos 	b.gt	.Lcbc_8_blocks_dec
   2036  1.1  christos 	b.eq	100f
   2037  1.1  christos 1:
   2038  1.1  christos 	ld1	{v15.4s},[x4]
   2039  1.1  christos .Lcbc_4_blocks_dec:
   2040  1.1  christos 	cmp	w2,#4
   2041  1.1  christos 	b.lt	1f
   2042  1.1  christos 	ld4	{v4.4s,v5.4s,v6.4s,v7.4s},[x0]
   2043  1.1  christos #ifndef __AARCH64EB__
   2044  1.1  christos 	rev32	v4.16b,v4.16b
   2045  1.1  christos #endif
   2046  1.1  christos #ifndef __AARCH64EB__
   2047  1.1  christos 	rev32	v5.16b,v5.16b
   2048  1.1  christos #endif
   2049  1.1  christos #ifndef __AARCH64EB__
   2050  1.1  christos 	rev32	v6.16b,v6.16b
   2051  1.1  christos #endif
   2052  1.1  christos #ifndef __AARCH64EB__
   2053  1.1  christos 	rev32	v7.16b,v7.16b
   2054  1.1  christos #endif
   2055  1.1  christos 	bl	_vpsm4_enc_4blks
   2056  1.1  christos 	ld1	{v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64
   2057  1.1  christos 	zip1	v8.4s,v0.4s,v1.4s
   2058  1.1  christos 	zip2	v9.4s,v0.4s,v1.4s
   2059  1.1  christos 	zip1	v10.4s,v2.4s,v3.4s
   2060  1.1  christos 	zip2	v11.4s,v2.4s,v3.4s
   2061  1.1  christos 	zip1	v0.2d,v8.2d,v10.2d
   2062  1.1  christos 	zip2	v1.2d,v8.2d,v10.2d
   2063  1.1  christos 	zip1	v2.2d,v9.2d,v11.2d
   2064  1.1  christos 	zip2	v3.2d,v9.2d,v11.2d
   2065  1.1  christos 	eor	v0.16b,v0.16b,v15.16b
   2066  1.1  christos 	eor	v1.16b,v1.16b,v4.16b
   2067  1.1  christos 	orr	v15.16b,v7.16b,v7.16b
   2068  1.1  christos 	eor	v2.16b,v2.16b,v5.16b
   2069  1.1  christos 	eor	v3.16b,v3.16b,v6.16b
   2070  1.1  christos 	st1	{v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64
   2071  1.1  christos 	subs	w2,w2,#4
   2072  1.1  christos 	b.gt	.Lcbc_4_blocks_dec
   2073  1.1  christos 	// save back IV
   2074  1.1  christos 	st1	{v7.4s}, [x4]
   2075  1.1  christos 	b	100f
   2076  1.1  christos 1:	//	last block
   2077  1.1  christos 	subs	w2,w2,#1
   2078  1.1  christos 	b.lt	100f
   2079  1.1  christos 	b.gt	1f
   2080  1.1  christos 	ld1	{v4.4s},[x0],#16
   2081  1.1  christos 	// save back IV
   2082  1.1  christos 	st1	{v4.4s}, [x4]
   2083  1.1  christos #ifndef __AARCH64EB__
   2084  1.1  christos 	rev32	v8.16b,v4.16b
   2085  1.1  christos #else
   2086  1.1  christos 	mov	v8.16b,v4.16b
   2087  1.1  christos #endif
   2088  1.1  christos 	mov	x10,x3
   2089  1.1  christos 	mov	w11,#8
   2090  1.1  christos 	mov	w12,v8.s[0]
   2091  1.1  christos 	mov	w13,v8.s[1]
   2092  1.1  christos 	mov	w14,v8.s[2]
   2093  1.1  christos 	mov	w15,v8.s[3]
   2094  1.1  christos 10:
   2095  1.1  christos 	ldp	w7,w8,[x10],8
   2096  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   2097  1.1  christos 	eor	w6,w14,w15
   2098  1.1  christos 	eor	w9,w7,w13
   2099  1.1  christos 	eor	w6,w6,w9
   2100  1.1  christos 	movi	v1.16b,#64
   2101  1.1  christos 	movi	v2.16b,#128
   2102  1.1  christos 	movi	v3.16b,#192
   2103  1.1  christos 	mov	v0.s[0],w6
   2104  1.1  christos 
   2105  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2106  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2107  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2108  1.1  christos 
   2109  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2110  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2111  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2112  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2113  1.1  christos 
   2114  1.1  christos 	mov	w6,v0.s[0]
   2115  1.1  christos 	mov	w7,v1.s[0]
   2116  1.1  christos 	mov	w9,v2.s[0]
   2117  1.1  christos 	add	w7,w6,w7
   2118  1.1  christos 	mov	w6,v3.s[0]
   2119  1.1  christos 	add	w7,w7,w9
   2120  1.1  christos 	add	w7,w7,w6
   2121  1.1  christos 
   2122  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2123  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2124  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2125  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2126  1.1  christos 	eor	w12,w12,w6
   2127  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   2128  1.1  christos 	eor	w6,w14,w15
   2129  1.1  christos 	eor	w9,w12,w8
   2130  1.1  christos 	eor	w6,w6,w9
   2131  1.1  christos 	movi	v1.16b,#64
   2132  1.1  christos 	movi	v2.16b,#128
   2133  1.1  christos 	movi	v3.16b,#192
   2134  1.1  christos 	mov	v0.s[0],w6
   2135  1.1  christos 
   2136  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2137  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2138  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2139  1.1  christos 
   2140  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2141  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2142  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2143  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2144  1.1  christos 
   2145  1.1  christos 	mov	w6,v0.s[0]
   2146  1.1  christos 	mov	w7,v1.s[0]
   2147  1.1  christos 	mov	w9,v2.s[0]
   2148  1.1  christos 	add	w7,w6,w7
   2149  1.1  christos 	mov	w6,v3.s[0]
   2150  1.1  christos 	add	w7,w7,w9
   2151  1.1  christos 	add	w7,w7,w6
   2152  1.1  christos 
   2153  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2154  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2155  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2156  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2157  1.1  christos 	ldp	w7,w8,[x10],8
   2158  1.1  christos 	eor	w13,w13,w6
   2159  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   2160  1.1  christos 	eor	w6,w12,w13
   2161  1.1  christos 	eor	w9,w7,w15
   2162  1.1  christos 	eor	w6,w6,w9
   2163  1.1  christos 	movi	v1.16b,#64
   2164  1.1  christos 	movi	v2.16b,#128
   2165  1.1  christos 	movi	v3.16b,#192
   2166  1.1  christos 	mov	v0.s[0],w6
   2167  1.1  christos 
   2168  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2169  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2170  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2171  1.1  christos 
   2172  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2173  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2174  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2175  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2176  1.1  christos 
   2177  1.1  christos 	mov	w6,v0.s[0]
   2178  1.1  christos 	mov	w7,v1.s[0]
   2179  1.1  christos 	mov	w9,v2.s[0]
   2180  1.1  christos 	add	w7,w6,w7
   2181  1.1  christos 	mov	w6,v3.s[0]
   2182  1.1  christos 	add	w7,w7,w9
   2183  1.1  christos 	add	w7,w7,w6
   2184  1.1  christos 
   2185  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2186  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2187  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2188  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2189  1.1  christos 	eor	w14,w14,w6
   2190  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   2191  1.1  christos 	eor	w6,w12,w13
   2192  1.1  christos 	eor	w9,w14,w8
   2193  1.1  christos 	eor	w6,w6,w9
   2194  1.1  christos 	movi	v1.16b,#64
   2195  1.1  christos 	movi	v2.16b,#128
   2196  1.1  christos 	movi	v3.16b,#192
   2197  1.1  christos 	mov	v0.s[0],w6
   2198  1.1  christos 
   2199  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2200  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2201  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2202  1.1  christos 
   2203  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2204  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2205  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2206  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2207  1.1  christos 
   2208  1.1  christos 	mov	w6,v0.s[0]
   2209  1.1  christos 	mov	w7,v1.s[0]
   2210  1.1  christos 	mov	w9,v2.s[0]
   2211  1.1  christos 	add	w7,w6,w7
   2212  1.1  christos 	mov	w6,v3.s[0]
   2213  1.1  christos 	add	w7,w7,w9
   2214  1.1  christos 	add	w7,w7,w6
   2215  1.1  christos 
   2216  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2217  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2218  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2219  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2220  1.1  christos 	eor	w15,w15,w6
   2221  1.1  christos 	subs	w11,w11,#1
   2222  1.1  christos 	b.ne	10b
   2223  1.1  christos 	mov	v8.s[0],w15
   2224  1.1  christos 	mov	v8.s[1],w14
   2225  1.1  christos 	mov	v8.s[2],w13
   2226  1.1  christos 	mov	v8.s[3],w12
   2227  1.1  christos #ifndef __AARCH64EB__
   2228  1.1  christos 	rev32	v8.16b,v8.16b
   2229  1.1  christos #endif
   2230  1.1  christos 	eor	v8.16b,v8.16b,v15.16b
   2231  1.1  christos 	st1	{v8.4s},[x1],#16
   2232  1.1  christos 	b	100f
   2233  1.1  christos 1:	//	last two blocks
   2234  1.1  christos 	ld4	{v4.s,v5.s,v6.s,v7.s}[0],[x0]
   2235  1.1  christos 	add	x10,x0,#16
   2236  1.1  christos 	ld4	{v4.s,v5.s,v6.s,v7.s}[1],[x10],#16
   2237  1.1  christos 	subs	w2,w2,1
   2238  1.1  christos 	b.gt	1f
   2239  1.1  christos #ifndef __AARCH64EB__
   2240  1.1  christos 	rev32	v4.16b,v4.16b
   2241  1.1  christos #endif
   2242  1.1  christos #ifndef __AARCH64EB__
   2243  1.1  christos 	rev32	v5.16b,v5.16b
   2244  1.1  christos #endif
   2245  1.1  christos #ifndef __AARCH64EB__
   2246  1.1  christos 	rev32	v6.16b,v6.16b
   2247  1.1  christos #endif
   2248  1.1  christos #ifndef __AARCH64EB__
   2249  1.1  christos 	rev32	v7.16b,v7.16b
   2250  1.1  christos #endif
   2251  1.1  christos 	bl	_vpsm4_enc_4blks
   2252  1.1  christos 	ld1	{v4.4s,v5.4s},[x0],#32
   2253  1.1  christos 	zip1	v8.4s,v0.4s,v1.4s
   2254  1.1  christos 	zip2	v9.4s,v0.4s,v1.4s
   2255  1.1  christos 	zip1	v10.4s,v2.4s,v3.4s
   2256  1.1  christos 	zip2	v11.4s,v2.4s,v3.4s
   2257  1.1  christos 	zip1	v0.2d,v8.2d,v10.2d
   2258  1.1  christos 	zip2	v1.2d,v8.2d,v10.2d
   2259  1.1  christos 	zip1	v2.2d,v9.2d,v11.2d
   2260  1.1  christos 	zip2	v3.2d,v9.2d,v11.2d
   2261  1.1  christos 	eor	v0.16b,v0.16b,v15.16b
   2262  1.1  christos 	eor	v1.16b,v1.16b,v4.16b
   2263  1.1  christos 	st1	{v0.4s,v1.4s},[x1],#32
   2264  1.1  christos 	// save back IV
   2265  1.1  christos 	st1	{v5.4s}, [x4]
   2266  1.1  christos 	b	100f
   2267  1.1  christos 1:	//	last 3 blocks
   2268  1.1  christos 	ld4	{v4.s,v5.s,v6.s,v7.s}[2],[x10]
   2269  1.1  christos #ifndef __AARCH64EB__
   2270  1.1  christos 	rev32	v4.16b,v4.16b
   2271  1.1  christos #endif
   2272  1.1  christos #ifndef __AARCH64EB__
   2273  1.1  christos 	rev32	v5.16b,v5.16b
   2274  1.1  christos #endif
   2275  1.1  christos #ifndef __AARCH64EB__
   2276  1.1  christos 	rev32	v6.16b,v6.16b
   2277  1.1  christos #endif
   2278  1.1  christos #ifndef __AARCH64EB__
   2279  1.1  christos 	rev32	v7.16b,v7.16b
   2280  1.1  christos #endif
   2281  1.1  christos 	bl	_vpsm4_enc_4blks
   2282  1.1  christos 	ld1	{v4.4s,v5.4s,v6.4s},[x0],#48
   2283  1.1  christos 	zip1	v8.4s,v0.4s,v1.4s
   2284  1.1  christos 	zip2	v9.4s,v0.4s,v1.4s
   2285  1.1  christos 	zip1	v10.4s,v2.4s,v3.4s
   2286  1.1  christos 	zip2	v11.4s,v2.4s,v3.4s
   2287  1.1  christos 	zip1	v0.2d,v8.2d,v10.2d
   2288  1.1  christos 	zip2	v1.2d,v8.2d,v10.2d
   2289  1.1  christos 	zip1	v2.2d,v9.2d,v11.2d
   2290  1.1  christos 	zip2	v3.2d,v9.2d,v11.2d
   2291  1.1  christos 	eor	v0.16b,v0.16b,v15.16b
   2292  1.1  christos 	eor	v1.16b,v1.16b,v4.16b
   2293  1.1  christos 	eor	v2.16b,v2.16b,v5.16b
   2294  1.1  christos 	st1	{v0.4s,v1.4s,v2.4s},[x1],#48
   2295  1.1  christos 	// save back IV
   2296  1.1  christos 	st1	{v6.4s}, [x4]
   2297  1.1  christos 100:
   2298  1.1  christos 	ldp	d10,d11,[sp,#16]
   2299  1.1  christos 	ldp	d12,d13,[sp,#32]
   2300  1.1  christos 	ldp	d14,d15,[sp,#48]
   2301  1.1  christos 	ldp	x29,x30,[sp,#64]
   2302  1.1  christos 	ldp	d8,d9,[sp],#80
   2303  1.1  christos 	AARCH64_VALIDATE_LINK_REGISTER
   2304  1.1  christos 	ret
   2305  1.1  christos .size	vpsm4_cbc_encrypt,.-vpsm4_cbc_encrypt
   2306  1.1  christos .globl	vpsm4_ctr32_encrypt_blocks
   2307  1.1  christos .type	vpsm4_ctr32_encrypt_blocks,%function
   2308  1.1  christos .align	5
   2309  1.1  christos vpsm4_ctr32_encrypt_blocks:
   2310  1.1  christos 	AARCH64_VALID_CALL_TARGET
   2311  1.1  christos 	ld1	{v3.4s},[x4]
   2312  1.1  christos #ifndef __AARCH64EB__
   2313  1.1  christos 	rev32	v3.16b,v3.16b
   2314  1.1  christos #endif
   2315  1.1  christos 	adrp	x10,.Lsbox
   2316  1.1  christos 	add	x10,x10,#:lo12:.Lsbox
   2317  1.1  christos 	ld1	{v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64
   2318  1.1  christos 	ld1	{v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64
   2319  1.1  christos 	ld1	{v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64
   2320  1.1  christos 	ld1	{v28.16b,v29.16b,v30.16b,v31.16b},[x10]
   2321  1.1  christos 	cmp	w2,#1
   2322  1.1  christos 	b.ne	1f
   2323  1.1  christos 	// fast processing for one single block without
   2324  1.1  christos 	// context saving overhead
   2325  1.1  christos 	mov	x10,x3
   2326  1.1  christos 	mov	w11,#8
   2327  1.1  christos 	mov	w12,v3.s[0]
   2328  1.1  christos 	mov	w13,v3.s[1]
   2329  1.1  christos 	mov	w14,v3.s[2]
   2330  1.1  christos 	mov	w15,v3.s[3]
   2331  1.1  christos 10:
   2332  1.1  christos 	ldp	w7,w8,[x10],8
   2333  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   2334  1.1  christos 	eor	w6,w14,w15
   2335  1.1  christos 	eor	w9,w7,w13
   2336  1.1  christos 	eor	w6,w6,w9
   2337  1.1  christos 	movi	v1.16b,#64
   2338  1.1  christos 	movi	v2.16b,#128
   2339  1.1  christos 	movi	v3.16b,#192
   2340  1.1  christos 	mov	v0.s[0],w6
   2341  1.1  christos 
   2342  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2343  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2344  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2345  1.1  christos 
   2346  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2347  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2348  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2349  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2350  1.1  christos 
   2351  1.1  christos 	mov	w6,v0.s[0]
   2352  1.1  christos 	mov	w7,v1.s[0]
   2353  1.1  christos 	mov	w9,v2.s[0]
   2354  1.1  christos 	add	w7,w6,w7
   2355  1.1  christos 	mov	w6,v3.s[0]
   2356  1.1  christos 	add	w7,w7,w9
   2357  1.1  christos 	add	w7,w7,w6
   2358  1.1  christos 
   2359  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2360  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2361  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2362  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2363  1.1  christos 	eor	w12,w12,w6
   2364  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   2365  1.1  christos 	eor	w6,w14,w15
   2366  1.1  christos 	eor	w9,w12,w8
   2367  1.1  christos 	eor	w6,w6,w9
   2368  1.1  christos 	movi	v1.16b,#64
   2369  1.1  christos 	movi	v2.16b,#128
   2370  1.1  christos 	movi	v3.16b,#192
   2371  1.1  christos 	mov	v0.s[0],w6
   2372  1.1  christos 
   2373  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2374  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2375  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2376  1.1  christos 
   2377  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2378  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2379  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2380  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2381  1.1  christos 
   2382  1.1  christos 	mov	w6,v0.s[0]
   2383  1.1  christos 	mov	w7,v1.s[0]
   2384  1.1  christos 	mov	w9,v2.s[0]
   2385  1.1  christos 	add	w7,w6,w7
   2386  1.1  christos 	mov	w6,v3.s[0]
   2387  1.1  christos 	add	w7,w7,w9
   2388  1.1  christos 	add	w7,w7,w6
   2389  1.1  christos 
   2390  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2391  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2392  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2393  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2394  1.1  christos 	ldp	w7,w8,[x10],8
   2395  1.1  christos 	eor	w13,w13,w6
   2396  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   2397  1.1  christos 	eor	w6,w12,w13
   2398  1.1  christos 	eor	w9,w7,w15
   2399  1.1  christos 	eor	w6,w6,w9
   2400  1.1  christos 	movi	v1.16b,#64
   2401  1.1  christos 	movi	v2.16b,#128
   2402  1.1  christos 	movi	v3.16b,#192
   2403  1.1  christos 	mov	v0.s[0],w6
   2404  1.1  christos 
   2405  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2406  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2407  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2408  1.1  christos 
   2409  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2410  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2411  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2412  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2413  1.1  christos 
   2414  1.1  christos 	mov	w6,v0.s[0]
   2415  1.1  christos 	mov	w7,v1.s[0]
   2416  1.1  christos 	mov	w9,v2.s[0]
   2417  1.1  christos 	add	w7,w6,w7
   2418  1.1  christos 	mov	w6,v3.s[0]
   2419  1.1  christos 	add	w7,w7,w9
   2420  1.1  christos 	add	w7,w7,w6
   2421  1.1  christos 
   2422  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2423  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2424  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2425  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2426  1.1  christos 	eor	w14,w14,w6
   2427  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   2428  1.1  christos 	eor	w6,w12,w13
   2429  1.1  christos 	eor	w9,w14,w8
   2430  1.1  christos 	eor	w6,w6,w9
   2431  1.1  christos 	movi	v1.16b,#64
   2432  1.1  christos 	movi	v2.16b,#128
   2433  1.1  christos 	movi	v3.16b,#192
   2434  1.1  christos 	mov	v0.s[0],w6
   2435  1.1  christos 
   2436  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2437  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2438  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2439  1.1  christos 
   2440  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2441  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2442  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2443  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2444  1.1  christos 
   2445  1.1  christos 	mov	w6,v0.s[0]
   2446  1.1  christos 	mov	w7,v1.s[0]
   2447  1.1  christos 	mov	w9,v2.s[0]
   2448  1.1  christos 	add	w7,w6,w7
   2449  1.1  christos 	mov	w6,v3.s[0]
   2450  1.1  christos 	add	w7,w7,w9
   2451  1.1  christos 	add	w7,w7,w6
   2452  1.1  christos 
   2453  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2454  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2455  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2456  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2457  1.1  christos 	eor	w15,w15,w6
   2458  1.1  christos 	subs	w11,w11,#1
   2459  1.1  christos 	b.ne	10b
   2460  1.1  christos 	mov	v3.s[0],w15
   2461  1.1  christos 	mov	v3.s[1],w14
   2462  1.1  christos 	mov	v3.s[2],w13
   2463  1.1  christos 	mov	v3.s[3],w12
   2464  1.1  christos #ifndef __AARCH64EB__
   2465  1.1  christos 	rev32	v3.16b,v3.16b
   2466  1.1  christos #endif
   2467  1.1  christos 	ld1	{v4.4s},[x0]
   2468  1.1  christos 	eor	v4.16b,v4.16b,v3.16b
   2469  1.1  christos 	st1	{v4.4s},[x1]
   2470  1.1  christos 	ret
   2471  1.1  christos 1:
   2472  1.1  christos 	AARCH64_SIGN_LINK_REGISTER
   2473  1.1  christos 	stp	d8,d9,[sp,#-80]!
   2474  1.1  christos 	stp	d10,d11,[sp,#16]
   2475  1.1  christos 	stp	d12,d13,[sp,#32]
   2476  1.1  christos 	stp	d14,d15,[sp,#48]
   2477  1.1  christos 	stp	x29,x30,[sp,#64]
   2478  1.1  christos 	mov	w12,v3.s[0]
   2479  1.1  christos 	mov	w13,v3.s[1]
   2480  1.1  christos 	mov	w14,v3.s[2]
   2481  1.1  christos 	mov	w5,v3.s[3]
   2482  1.1  christos .Lctr32_4_blocks_process:
   2483  1.1  christos 	cmp	w2,#4
   2484  1.1  christos 	b.lt	1f
   2485  1.1  christos 	dup	v4.4s,w12
   2486  1.1  christos 	dup	v5.4s,w13
   2487  1.1  christos 	dup	v6.4s,w14
   2488  1.1  christos 	mov	v7.s[0],w5
   2489  1.1  christos 	add	w5,w5,#1
   2490  1.1  christos 	mov	v7.s[1],w5
   2491  1.1  christos 	add	w5,w5,#1
   2492  1.1  christos 	mov	v7.s[2],w5
   2493  1.1  christos 	add	w5,w5,#1
   2494  1.1  christos 	mov	v7.s[3],w5
   2495  1.1  christos 	add	w5,w5,#1
   2496  1.1  christos 	cmp	w2,#8
   2497  1.1  christos 	b.ge	.Lctr32_8_blocks_process
   2498  1.1  christos 	bl	_vpsm4_enc_4blks
   2499  1.1  christos 	ld4	{v12.4s,v13.4s,v14.4s,v15.4s},[x0],#64
   2500  1.1  christos 	eor	v0.16b,v0.16b,v12.16b
   2501  1.1  christos 	eor	v1.16b,v1.16b,v13.16b
   2502  1.1  christos 	eor	v2.16b,v2.16b,v14.16b
   2503  1.1  christos 	eor	v3.16b,v3.16b,v15.16b
   2504  1.1  christos 	st4	{v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64
   2505  1.1  christos 	subs	w2,w2,#4
   2506  1.1  christos 	b.ne	.Lctr32_4_blocks_process
   2507  1.1  christos 	b	100f
   2508  1.1  christos .Lctr32_8_blocks_process:
   2509  1.1  christos 	dup	v8.4s,w12
   2510  1.1  christos 	dup	v9.4s,w13
   2511  1.1  christos 	dup	v10.4s,w14
   2512  1.1  christos 	mov	v11.s[0],w5
   2513  1.1  christos 	add	w5,w5,#1
   2514  1.1  christos 	mov	v11.s[1],w5
   2515  1.1  christos 	add	w5,w5,#1
   2516  1.1  christos 	mov	v11.s[2],w5
   2517  1.1  christos 	add	w5,w5,#1
   2518  1.1  christos 	mov	v11.s[3],w5
   2519  1.1  christos 	add	w5,w5,#1
   2520  1.1  christos 	bl	_vpsm4_enc_8blks
   2521  1.1  christos 	ld4	{v12.4s,v13.4s,v14.4s,v15.4s},[x0],#64
   2522  1.1  christos 	ld4	{v8.4s,v9.4s,v10.4s,v11.4s},[x0],#64
   2523  1.1  christos 	eor	v0.16b,v0.16b,v12.16b
   2524  1.1  christos 	eor	v1.16b,v1.16b,v13.16b
   2525  1.1  christos 	eor	v2.16b,v2.16b,v14.16b
   2526  1.1  christos 	eor	v3.16b,v3.16b,v15.16b
   2527  1.1  christos 	eor	v4.16b,v4.16b,v8.16b
   2528  1.1  christos 	eor	v5.16b,v5.16b,v9.16b
   2529  1.1  christos 	eor	v6.16b,v6.16b,v10.16b
   2530  1.1  christos 	eor	v7.16b,v7.16b,v11.16b
   2531  1.1  christos 	st4	{v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64
   2532  1.1  christos 	st4	{v4.4s,v5.4s,v6.4s,v7.4s},[x1],#64
   2533  1.1  christos 	subs	w2,w2,#8
   2534  1.1  christos 	b.ne	.Lctr32_4_blocks_process
   2535  1.1  christos 	b	100f
   2536  1.1  christos 1:	//	last block processing
   2537  1.1  christos 	subs	w2,w2,#1
   2538  1.1  christos 	b.lt	100f
   2539  1.1  christos 	b.gt	1f
   2540  1.1  christos 	mov	v3.s[0],w12
   2541  1.1  christos 	mov	v3.s[1],w13
   2542  1.1  christos 	mov	v3.s[2],w14
   2543  1.1  christos 	mov	v3.s[3],w5
   2544  1.1  christos 	mov	x10,x3
   2545  1.1  christos 	mov	w11,#8
   2546  1.1  christos 	mov	w12,v3.s[0]
   2547  1.1  christos 	mov	w13,v3.s[1]
   2548  1.1  christos 	mov	w14,v3.s[2]
   2549  1.1  christos 	mov	w15,v3.s[3]
   2550  1.1  christos 10:
   2551  1.1  christos 	ldp	w7,w8,[x10],8
   2552  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   2553  1.1  christos 	eor	w6,w14,w15
   2554  1.1  christos 	eor	w9,w7,w13
   2555  1.1  christos 	eor	w6,w6,w9
   2556  1.1  christos 	movi	v1.16b,#64
   2557  1.1  christos 	movi	v2.16b,#128
   2558  1.1  christos 	movi	v3.16b,#192
   2559  1.1  christos 	mov	v0.s[0],w6
   2560  1.1  christos 
   2561  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2562  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2563  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2564  1.1  christos 
   2565  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2566  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2567  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2568  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2569  1.1  christos 
   2570  1.1  christos 	mov	w6,v0.s[0]
   2571  1.1  christos 	mov	w7,v1.s[0]
   2572  1.1  christos 	mov	w9,v2.s[0]
   2573  1.1  christos 	add	w7,w6,w7
   2574  1.1  christos 	mov	w6,v3.s[0]
   2575  1.1  christos 	add	w7,w7,w9
   2576  1.1  christos 	add	w7,w7,w6
   2577  1.1  christos 
   2578  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2579  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2580  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2581  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2582  1.1  christos 	eor	w12,w12,w6
   2583  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   2584  1.1  christos 	eor	w6,w14,w15
   2585  1.1  christos 	eor	w9,w12,w8
   2586  1.1  christos 	eor	w6,w6,w9
   2587  1.1  christos 	movi	v1.16b,#64
   2588  1.1  christos 	movi	v2.16b,#128
   2589  1.1  christos 	movi	v3.16b,#192
   2590  1.1  christos 	mov	v0.s[0],w6
   2591  1.1  christos 
   2592  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2593  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2594  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2595  1.1  christos 
   2596  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2597  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2598  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2599  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2600  1.1  christos 
   2601  1.1  christos 	mov	w6,v0.s[0]
   2602  1.1  christos 	mov	w7,v1.s[0]
   2603  1.1  christos 	mov	w9,v2.s[0]
   2604  1.1  christos 	add	w7,w6,w7
   2605  1.1  christos 	mov	w6,v3.s[0]
   2606  1.1  christos 	add	w7,w7,w9
   2607  1.1  christos 	add	w7,w7,w6
   2608  1.1  christos 
   2609  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2610  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2611  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2612  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2613  1.1  christos 	ldp	w7,w8,[x10],8
   2614  1.1  christos 	eor	w13,w13,w6
   2615  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   2616  1.1  christos 	eor	w6,w12,w13
   2617  1.1  christos 	eor	w9,w7,w15
   2618  1.1  christos 	eor	w6,w6,w9
   2619  1.1  christos 	movi	v1.16b,#64
   2620  1.1  christos 	movi	v2.16b,#128
   2621  1.1  christos 	movi	v3.16b,#192
   2622  1.1  christos 	mov	v0.s[0],w6
   2623  1.1  christos 
   2624  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2625  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2626  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2627  1.1  christos 
   2628  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2629  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2630  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2631  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2632  1.1  christos 
   2633  1.1  christos 	mov	w6,v0.s[0]
   2634  1.1  christos 	mov	w7,v1.s[0]
   2635  1.1  christos 	mov	w9,v2.s[0]
   2636  1.1  christos 	add	w7,w6,w7
   2637  1.1  christos 	mov	w6,v3.s[0]
   2638  1.1  christos 	add	w7,w7,w9
   2639  1.1  christos 	add	w7,w7,w6
   2640  1.1  christos 
   2641  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2642  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2643  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2644  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2645  1.1  christos 	eor	w14,w14,w6
   2646  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   2647  1.1  christos 	eor	w6,w12,w13
   2648  1.1  christos 	eor	w9,w14,w8
   2649  1.1  christos 	eor	w6,w6,w9
   2650  1.1  christos 	movi	v1.16b,#64
   2651  1.1  christos 	movi	v2.16b,#128
   2652  1.1  christos 	movi	v3.16b,#192
   2653  1.1  christos 	mov	v0.s[0],w6
   2654  1.1  christos 
   2655  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2656  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2657  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2658  1.1  christos 
   2659  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2660  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2661  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2662  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2663  1.1  christos 
   2664  1.1  christos 	mov	w6,v0.s[0]
   2665  1.1  christos 	mov	w7,v1.s[0]
   2666  1.1  christos 	mov	w9,v2.s[0]
   2667  1.1  christos 	add	w7,w6,w7
   2668  1.1  christos 	mov	w6,v3.s[0]
   2669  1.1  christos 	add	w7,w7,w9
   2670  1.1  christos 	add	w7,w7,w6
   2671  1.1  christos 
   2672  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2673  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2674  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2675  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2676  1.1  christos 	eor	w15,w15,w6
   2677  1.1  christos 	subs	w11,w11,#1
   2678  1.1  christos 	b.ne	10b
   2679  1.1  christos 	mov	v3.s[0],w15
   2680  1.1  christos 	mov	v3.s[1],w14
   2681  1.1  christos 	mov	v3.s[2],w13
   2682  1.1  christos 	mov	v3.s[3],w12
   2683  1.1  christos #ifndef __AARCH64EB__
   2684  1.1  christos 	rev32	v3.16b,v3.16b
   2685  1.1  christos #endif
   2686  1.1  christos 	ld1	{v4.4s},[x0]
   2687  1.1  christos 	eor	v4.16b,v4.16b,v3.16b
   2688  1.1  christos 	st1	{v4.4s},[x1]
   2689  1.1  christos 	b	100f
   2690  1.1  christos 1:	//	last 2 blocks processing
   2691  1.1  christos 	dup	v4.4s,w12
   2692  1.1  christos 	dup	v5.4s,w13
   2693  1.1  christos 	dup	v6.4s,w14
   2694  1.1  christos 	mov	v7.s[0],w5
   2695  1.1  christos 	add	w5,w5,#1
   2696  1.1  christos 	mov	v7.s[1],w5
   2697  1.1  christos 	subs	w2,w2,#1
   2698  1.1  christos 	b.ne	1f
   2699  1.1  christos 	bl	_vpsm4_enc_4blks
   2700  1.1  christos 	ld4	{v12.s,v13.s,v14.s,v15.s}[0],[x0],#16
   2701  1.1  christos 	ld4	{v12.s,v13.s,v14.s,v15.s}[1],[x0],#16
   2702  1.1  christos 	eor	v0.16b,v0.16b,v12.16b
   2703  1.1  christos 	eor	v1.16b,v1.16b,v13.16b
   2704  1.1  christos 	eor	v2.16b,v2.16b,v14.16b
   2705  1.1  christos 	eor	v3.16b,v3.16b,v15.16b
   2706  1.1  christos 	st4	{v0.s,v1.s,v2.s,v3.s}[0],[x1],#16
   2707  1.1  christos 	st4	{v0.s,v1.s,v2.s,v3.s}[1],[x1],#16
   2708  1.1  christos 	b	100f
   2709  1.1  christos 1:	//	last 3 blocks processing
   2710  1.1  christos 	add	w5,w5,#1
   2711  1.1  christos 	mov	v7.s[2],w5
   2712  1.1  christos 	bl	_vpsm4_enc_4blks
   2713  1.1  christos 	ld4	{v12.s,v13.s,v14.s,v15.s}[0],[x0],#16
   2714  1.1  christos 	ld4	{v12.s,v13.s,v14.s,v15.s}[1],[x0],#16
   2715  1.1  christos 	ld4	{v12.s,v13.s,v14.s,v15.s}[2],[x0],#16
   2716  1.1  christos 	eor	v0.16b,v0.16b,v12.16b
   2717  1.1  christos 	eor	v1.16b,v1.16b,v13.16b
   2718  1.1  christos 	eor	v2.16b,v2.16b,v14.16b
   2719  1.1  christos 	eor	v3.16b,v3.16b,v15.16b
   2720  1.1  christos 	st4	{v0.s,v1.s,v2.s,v3.s}[0],[x1],#16
   2721  1.1  christos 	st4	{v0.s,v1.s,v2.s,v3.s}[1],[x1],#16
   2722  1.1  christos 	st4	{v0.s,v1.s,v2.s,v3.s}[2],[x1],#16
   2723  1.1  christos 100:
   2724  1.1  christos 	ldp	d10,d11,[sp,#16]
   2725  1.1  christos 	ldp	d12,d13,[sp,#32]
   2726  1.1  christos 	ldp	d14,d15,[sp,#48]
   2727  1.1  christos 	ldp	x29,x30,[sp,#64]
   2728  1.1  christos 	ldp	d8,d9,[sp],#80
   2729  1.1  christos 	AARCH64_VALIDATE_LINK_REGISTER
   2730  1.1  christos 	ret
   2731  1.1  christos .size	vpsm4_ctr32_encrypt_blocks,.-vpsm4_ctr32_encrypt_blocks
   2732  1.1  christos .globl	vpsm4_xts_encrypt_gb
   2733  1.1  christos .type	vpsm4_xts_encrypt_gb,%function
   2734  1.1  christos .align	5
   2735  1.1  christos vpsm4_xts_encrypt_gb:
   2736  1.1  christos 	AARCH64_SIGN_LINK_REGISTER
   2737  1.1  christos 	stp	x15, x16, [sp, #-0x10]!
   2738  1.1  christos 	stp	x17, x18, [sp, #-0x10]!
   2739  1.1  christos 	stp	x19, x20, [sp, #-0x10]!
   2740  1.1  christos 	stp	x21, x22, [sp, #-0x10]!
   2741  1.1  christos 	stp	x23, x24, [sp, #-0x10]!
   2742  1.1  christos 	stp	x25, x26, [sp, #-0x10]!
   2743  1.1  christos 	stp	x27, x28, [sp, #-0x10]!
   2744  1.1  christos 	stp	x29, x30, [sp, #-0x10]!
   2745  1.1  christos 	stp	d8, d9, [sp, #-0x10]!
   2746  1.1  christos 	stp	d10, d11, [sp, #-0x10]!
   2747  1.1  christos 	stp	d12, d13, [sp, #-0x10]!
   2748  1.1  christos 	stp	d14, d15, [sp, #-0x10]!
   2749  1.1  christos 	mov	x26,x3
   2750  1.1  christos 	mov	x27,x4
   2751  1.1  christos 	mov	w28,w6
   2752  1.1  christos 	ld1	{v8.4s}, [x5]
   2753  1.1  christos 	mov	x3,x27
   2754  1.1  christos 	adrp	x10,.Lsbox
   2755  1.1  christos 	add	x10,x10,#:lo12:.Lsbox
   2756  1.1  christos 	ld1	{v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64
   2757  1.1  christos 	ld1	{v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64
   2758  1.1  christos 	ld1	{v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64
   2759  1.1  christos 	ld1	{v28.16b,v29.16b,v30.16b,v31.16b},[x10]
   2760  1.1  christos #ifndef __AARCH64EB__
   2761  1.1  christos 	rev32	v8.16b,v8.16b
   2762  1.1  christos #endif
   2763  1.1  christos 	mov	x10,x3
   2764  1.1  christos 	mov	w11,#8
   2765  1.1  christos 	mov	w12,v8.s[0]
   2766  1.1  christos 	mov	w13,v8.s[1]
   2767  1.1  christos 	mov	w14,v8.s[2]
   2768  1.1  christos 	mov	w15,v8.s[3]
   2769  1.1  christos 10:
   2770  1.1  christos 	ldp	w7,w8,[x10],8
   2771  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   2772  1.1  christos 	eor	w6,w14,w15
   2773  1.1  christos 	eor	w9,w7,w13
   2774  1.1  christos 	eor	w6,w6,w9
   2775  1.1  christos 	movi	v1.16b,#64
   2776  1.1  christos 	movi	v2.16b,#128
   2777  1.1  christos 	movi	v3.16b,#192
   2778  1.1  christos 	mov	v0.s[0],w6
   2779  1.1  christos 
   2780  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2781  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2782  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2783  1.1  christos 
   2784  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2785  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2786  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2787  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2788  1.1  christos 
   2789  1.1  christos 	mov	w6,v0.s[0]
   2790  1.1  christos 	mov	w7,v1.s[0]
   2791  1.1  christos 	mov	w9,v2.s[0]
   2792  1.1  christos 	add	w7,w6,w7
   2793  1.1  christos 	mov	w6,v3.s[0]
   2794  1.1  christos 	add	w7,w7,w9
   2795  1.1  christos 	add	w7,w7,w6
   2796  1.1  christos 
   2797  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2798  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2799  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2800  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2801  1.1  christos 	eor	w12,w12,w6
   2802  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   2803  1.1  christos 	eor	w6,w14,w15
   2804  1.1  christos 	eor	w9,w12,w8
   2805  1.1  christos 	eor	w6,w6,w9
   2806  1.1  christos 	movi	v1.16b,#64
   2807  1.1  christos 	movi	v2.16b,#128
   2808  1.1  christos 	movi	v3.16b,#192
   2809  1.1  christos 	mov	v0.s[0],w6
   2810  1.1  christos 
   2811  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2812  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2813  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2814  1.1  christos 
   2815  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2816  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2817  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2818  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2819  1.1  christos 
   2820  1.1  christos 	mov	w6,v0.s[0]
   2821  1.1  christos 	mov	w7,v1.s[0]
   2822  1.1  christos 	mov	w9,v2.s[0]
   2823  1.1  christos 	add	w7,w6,w7
   2824  1.1  christos 	mov	w6,v3.s[0]
   2825  1.1  christos 	add	w7,w7,w9
   2826  1.1  christos 	add	w7,w7,w6
   2827  1.1  christos 
   2828  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2829  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2830  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2831  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2832  1.1  christos 	ldp	w7,w8,[x10],8
   2833  1.1  christos 	eor	w13,w13,w6
   2834  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   2835  1.1  christos 	eor	w6,w12,w13
   2836  1.1  christos 	eor	w9,w7,w15
   2837  1.1  christos 	eor	w6,w6,w9
   2838  1.1  christos 	movi	v1.16b,#64
   2839  1.1  christos 	movi	v2.16b,#128
   2840  1.1  christos 	movi	v3.16b,#192
   2841  1.1  christos 	mov	v0.s[0],w6
   2842  1.1  christos 
   2843  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2844  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2845  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2846  1.1  christos 
   2847  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2848  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2849  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2850  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2851  1.1  christos 
   2852  1.1  christos 	mov	w6,v0.s[0]
   2853  1.1  christos 	mov	w7,v1.s[0]
   2854  1.1  christos 	mov	w9,v2.s[0]
   2855  1.1  christos 	add	w7,w6,w7
   2856  1.1  christos 	mov	w6,v3.s[0]
   2857  1.1  christos 	add	w7,w7,w9
   2858  1.1  christos 	add	w7,w7,w6
   2859  1.1  christos 
   2860  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2861  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2862  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2863  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2864  1.1  christos 	eor	w14,w14,w6
   2865  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   2866  1.1  christos 	eor	w6,w12,w13
   2867  1.1  christos 	eor	w9,w14,w8
   2868  1.1  christos 	eor	w6,w6,w9
   2869  1.1  christos 	movi	v1.16b,#64
   2870  1.1  christos 	movi	v2.16b,#128
   2871  1.1  christos 	movi	v3.16b,#192
   2872  1.1  christos 	mov	v0.s[0],w6
   2873  1.1  christos 
   2874  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   2875  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   2876  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   2877  1.1  christos 
   2878  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   2879  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   2880  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   2881  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   2882  1.1  christos 
   2883  1.1  christos 	mov	w6,v0.s[0]
   2884  1.1  christos 	mov	w7,v1.s[0]
   2885  1.1  christos 	mov	w9,v2.s[0]
   2886  1.1  christos 	add	w7,w6,w7
   2887  1.1  christos 	mov	w6,v3.s[0]
   2888  1.1  christos 	add	w7,w7,w9
   2889  1.1  christos 	add	w7,w7,w6
   2890  1.1  christos 
   2891  1.1  christos 	eor	w6,w7,w7,ror #32-2
   2892  1.1  christos 	eor	w6,w6,w7,ror #32-10
   2893  1.1  christos 	eor	w6,w6,w7,ror #32-18
   2894  1.1  christos 	eor	w6,w6,w7,ror #32-24
   2895  1.1  christos 	eor	w15,w15,w6
   2896  1.1  christos 	subs	w11,w11,#1
   2897  1.1  christos 	b.ne	10b
   2898  1.1  christos 	mov	v8.s[0],w15
   2899  1.1  christos 	mov	v8.s[1],w14
   2900  1.1  christos 	mov	v8.s[2],w13
   2901  1.1  christos 	mov	v8.s[3],w12
   2902  1.1  christos #ifndef __AARCH64EB__
   2903  1.1  christos 	rev32	v8.16b,v8.16b
   2904  1.1  christos #endif
   2905  1.1  christos 	mov	x3,x26
   2906  1.1  christos 	and	x29,x2,#0x0F
   2907  1.1  christos 	// convert length into blocks
   2908  1.1  christos 	lsr	x2,x2,4
   2909  1.1  christos 	cmp	x2,#1
   2910  1.1  christos 	b.lt	.return_gb
   2911  1.1  christos 
   2912  1.1  christos 	cmp	x29,0
   2913  1.1  christos 	// If the encryption/decryption Length is N times of 16,
   2914  1.1  christos 	// the all blocks are encrypted/decrypted in .xts_encrypt_blocks_gb
   2915  1.1  christos 	b.eq	.xts_encrypt_blocks_gb
   2916  1.1  christos 
   2917  1.1  christos 	// If the encryption/decryption length is not N times of 16,
   2918  1.1  christos 	// the last two blocks are encrypted/decrypted in .last_2blks_tweak_gb or .only_2blks_tweak_gb
   2919  1.1  christos 	// the other blocks are encrypted/decrypted in .xts_encrypt_blocks_gb
   2920  1.1  christos 	subs	x2,x2,#1
   2921  1.1  christos 	b.eq	.only_2blks_tweak_gb
   2922  1.1  christos .xts_encrypt_blocks_gb:
   2923  1.1  christos 	rbit	v8.16b,v8.16b
   2924  1.1  christos #ifdef __AARCH64EB__
   2925  1.1  christos 	rev32	v8.16b,v8.16b
   2926  1.1  christos #endif
   2927  1.1  christos 	mov	x12,v8.d[0]
   2928  1.1  christos 	mov	x13,v8.d[1]
   2929  1.1  christos 	mov	w7,0x87
   2930  1.1  christos 	extr	x9,x13,x13,#32
   2931  1.1  christos 	extr	x15,x13,x12,#63
   2932  1.1  christos 	and	w8,w7,w9,asr#31
   2933  1.1  christos 	eor	x14,x8,x12,lsl#1
   2934  1.1  christos 	mov	w7,0x87
   2935  1.1  christos 	extr	x9,x15,x15,#32
   2936  1.1  christos 	extr	x17,x15,x14,#63
   2937  1.1  christos 	and	w8,w7,w9,asr#31
   2938  1.1  christos 	eor	x16,x8,x14,lsl#1
   2939  1.1  christos 	mov	w7,0x87
   2940  1.1  christos 	extr	x9,x17,x17,#32
   2941  1.1  christos 	extr	x19,x17,x16,#63
   2942  1.1  christos 	and	w8,w7,w9,asr#31
   2943  1.1  christos 	eor	x18,x8,x16,lsl#1
   2944  1.1  christos 	mov	w7,0x87
   2945  1.1  christos 	extr	x9,x19,x19,#32
   2946  1.1  christos 	extr	x21,x19,x18,#63
   2947  1.1  christos 	and	w8,w7,w9,asr#31
   2948  1.1  christos 	eor	x20,x8,x18,lsl#1
   2949  1.1  christos 	mov	w7,0x87
   2950  1.1  christos 	extr	x9,x21,x21,#32
   2951  1.1  christos 	extr	x23,x21,x20,#63
   2952  1.1  christos 	and	w8,w7,w9,asr#31
   2953  1.1  christos 	eor	x22,x8,x20,lsl#1
   2954  1.1  christos 	mov	w7,0x87
   2955  1.1  christos 	extr	x9,x23,x23,#32
   2956  1.1  christos 	extr	x25,x23,x22,#63
   2957  1.1  christos 	and	w8,w7,w9,asr#31
   2958  1.1  christos 	eor	x24,x8,x22,lsl#1
   2959  1.1  christos 	mov	w7,0x87
   2960  1.1  christos 	extr	x9,x25,x25,#32
   2961  1.1  christos 	extr	x27,x25,x24,#63
   2962  1.1  christos 	and	w8,w7,w9,asr#31
   2963  1.1  christos 	eor	x26,x8,x24,lsl#1
   2964  1.1  christos .Lxts_8_blocks_process_gb:
   2965  1.1  christos 	cmp	x2,#8
   2966  1.1  christos 	b.lt	.Lxts_4_blocks_process_gb
   2967  1.1  christos 	mov	v0.d[0],x12
   2968  1.1  christos 	mov	v0.d[1],x13
   2969  1.1  christos #ifdef __AARCH64EB__
   2970  1.1  christos 	rev32	v0.16b,v0.16b
   2971  1.1  christos #endif
   2972  1.1  christos 	mov	v1.d[0],x14
   2973  1.1  christos 	mov	v1.d[1],x15
   2974  1.1  christos #ifdef __AARCH64EB__
   2975  1.1  christos 	rev32	v1.16b,v1.16b
   2976  1.1  christos #endif
   2977  1.1  christos 	mov	v2.d[0],x16
   2978  1.1  christos 	mov	v2.d[1],x17
   2979  1.1  christos #ifdef __AARCH64EB__
   2980  1.1  christos 	rev32	v2.16b,v2.16b
   2981  1.1  christos #endif
   2982  1.1  christos 	mov	v3.d[0],x18
   2983  1.1  christos 	mov	v3.d[1],x19
   2984  1.1  christos #ifdef __AARCH64EB__
   2985  1.1  christos 	rev32	v3.16b,v3.16b
   2986  1.1  christos #endif
   2987  1.1  christos 	mov	v12.d[0],x20
   2988  1.1  christos 	mov	v12.d[1],x21
   2989  1.1  christos #ifdef __AARCH64EB__
   2990  1.1  christos 	rev32	v12.16b,v12.16b
   2991  1.1  christos #endif
   2992  1.1  christos 	mov	v13.d[0],x22
   2993  1.1  christos 	mov	v13.d[1],x23
   2994  1.1  christos #ifdef __AARCH64EB__
   2995  1.1  christos 	rev32	v13.16b,v13.16b
   2996  1.1  christos #endif
   2997  1.1  christos 	mov	v14.d[0],x24
   2998  1.1  christos 	mov	v14.d[1],x25
   2999  1.1  christos #ifdef __AARCH64EB__
   3000  1.1  christos 	rev32	v14.16b,v14.16b
   3001  1.1  christos #endif
   3002  1.1  christos 	mov	v15.d[0],x26
   3003  1.1  christos 	mov	v15.d[1],x27
   3004  1.1  christos #ifdef __AARCH64EB__
   3005  1.1  christos 	rev32	v15.16b,v15.16b
   3006  1.1  christos #endif
   3007  1.1  christos 	ld1	{v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64
   3008  1.1  christos 	rbit	v0.16b,v0.16b
   3009  1.1  christos 	rbit	v1.16b,v1.16b
   3010  1.1  christos 	rbit	v2.16b,v2.16b
   3011  1.1  christos 	rbit	v3.16b,v3.16b
   3012  1.1  christos 	eor	v4.16b, v4.16b, v0.16b
   3013  1.1  christos 	eor	v5.16b, v5.16b, v1.16b
   3014  1.1  christos 	eor	v6.16b, v6.16b, v2.16b
   3015  1.1  christos 	eor	v7.16b, v7.16b, v3.16b
   3016  1.1  christos 	ld1	{v8.4s,v9.4s,v10.4s,v11.4s},[x0],#64
   3017  1.1  christos 	rbit	v12.16b,v12.16b
   3018  1.1  christos 	rbit	v13.16b,v13.16b
   3019  1.1  christos 	rbit	v14.16b,v14.16b
   3020  1.1  christos 	rbit	v15.16b,v15.16b
   3021  1.1  christos 	eor	v8.16b, v8.16b, v12.16b
   3022  1.1  christos 	eor	v9.16b, v9.16b, v13.16b
   3023  1.1  christos 	eor	v10.16b, v10.16b, v14.16b
   3024  1.1  christos 	eor	v11.16b, v11.16b, v15.16b
   3025  1.1  christos #ifndef __AARCH64EB__
   3026  1.1  christos 	rev32	v4.16b,v4.16b
   3027  1.1  christos #endif
   3028  1.1  christos #ifndef __AARCH64EB__
   3029  1.1  christos 	rev32	v5.16b,v5.16b
   3030  1.1  christos #endif
   3031  1.1  christos #ifndef __AARCH64EB__
   3032  1.1  christos 	rev32	v6.16b,v6.16b
   3033  1.1  christos #endif
   3034  1.1  christos #ifndef __AARCH64EB__
   3035  1.1  christos 	rev32	v7.16b,v7.16b
   3036  1.1  christos #endif
   3037  1.1  christos #ifndef __AARCH64EB__
   3038  1.1  christos 	rev32	v8.16b,v8.16b
   3039  1.1  christos #endif
   3040  1.1  christos #ifndef __AARCH64EB__
   3041  1.1  christos 	rev32	v9.16b,v9.16b
   3042  1.1  christos #endif
   3043  1.1  christos #ifndef __AARCH64EB__
   3044  1.1  christos 	rev32	v10.16b,v10.16b
   3045  1.1  christos #endif
   3046  1.1  christos #ifndef __AARCH64EB__
   3047  1.1  christos 	rev32	v11.16b,v11.16b
   3048  1.1  christos #endif
   3049  1.1  christos 	zip1	v0.4s,v4.4s,v5.4s
   3050  1.1  christos 	zip2	v1.4s,v4.4s,v5.4s
   3051  1.1  christos 	zip1	v2.4s,v6.4s,v7.4s
   3052  1.1  christos 	zip2	v3.4s,v6.4s,v7.4s
   3053  1.1  christos 	zip1	v4.2d,v0.2d,v2.2d
   3054  1.1  christos 	zip2	v5.2d,v0.2d,v2.2d
   3055  1.1  christos 	zip1	v6.2d,v1.2d,v3.2d
   3056  1.1  christos 	zip2	v7.2d,v1.2d,v3.2d
   3057  1.1  christos 	zip1	v0.4s,v8.4s,v9.4s
   3058  1.1  christos 	zip2	v1.4s,v8.4s,v9.4s
   3059  1.1  christos 	zip1	v2.4s,v10.4s,v11.4s
   3060  1.1  christos 	zip2	v3.4s,v10.4s,v11.4s
   3061  1.1  christos 	zip1	v8.2d,v0.2d,v2.2d
   3062  1.1  christos 	zip2	v9.2d,v0.2d,v2.2d
   3063  1.1  christos 	zip1	v10.2d,v1.2d,v3.2d
   3064  1.1  christos 	zip2	v11.2d,v1.2d,v3.2d
   3065  1.1  christos 	bl	_vpsm4_enc_8blks
   3066  1.1  christos 	zip1	v8.4s,v0.4s,v1.4s
   3067  1.1  christos 	zip2	v9.4s,v0.4s,v1.4s
   3068  1.1  christos 	zip1	v10.4s,v2.4s,v3.4s
   3069  1.1  christos 	zip2	v11.4s,v2.4s,v3.4s
   3070  1.1  christos 	zip1	v0.2d,v8.2d,v10.2d
   3071  1.1  christos 	zip2	v1.2d,v8.2d,v10.2d
   3072  1.1  christos 	zip1	v2.2d,v9.2d,v11.2d
   3073  1.1  christos 	zip2	v3.2d,v9.2d,v11.2d
   3074  1.1  christos 	zip1	v8.4s,v4.4s,v5.4s
   3075  1.1  christos 	zip2	v9.4s,v4.4s,v5.4s
   3076  1.1  christos 	zip1	v10.4s,v6.4s,v7.4s
   3077  1.1  christos 	zip2	v11.4s,v6.4s,v7.4s
   3078  1.1  christos 	zip1	v4.2d,v8.2d,v10.2d
   3079  1.1  christos 	zip2	v5.2d,v8.2d,v10.2d
   3080  1.1  christos 	zip1	v6.2d,v9.2d,v11.2d
   3081  1.1  christos 	zip2	v7.2d,v9.2d,v11.2d
   3082  1.1  christos 	mov	v12.d[0],x12
   3083  1.1  christos 	mov	v12.d[1],x13
   3084  1.1  christos #ifdef __AARCH64EB__
   3085  1.1  christos 	rev32	v12.16b,v12.16b
   3086  1.1  christos #endif
   3087  1.1  christos 	mov	w7,0x87
   3088  1.1  christos 	extr	x9,x27,x27,#32
   3089  1.1  christos 	extr	x13,x27,x26,#63
   3090  1.1  christos 	and	w8,w7,w9,asr#31
   3091  1.1  christos 	eor	x12,x8,x26,lsl#1
   3092  1.1  christos 	mov	v13.d[0],x14
   3093  1.1  christos 	mov	v13.d[1],x15
   3094  1.1  christos #ifdef __AARCH64EB__
   3095  1.1  christos 	rev32	v13.16b,v13.16b
   3096  1.1  christos #endif
   3097  1.1  christos 	mov	w7,0x87
   3098  1.1  christos 	extr	x9,x13,x13,#32
   3099  1.1  christos 	extr	x15,x13,x12,#63
   3100  1.1  christos 	and	w8,w7,w9,asr#31
   3101  1.1  christos 	eor	x14,x8,x12,lsl#1
   3102  1.1  christos 	mov	v14.d[0],x16
   3103  1.1  christos 	mov	v14.d[1],x17
   3104  1.1  christos #ifdef __AARCH64EB__
   3105  1.1  christos 	rev32	v14.16b,v14.16b
   3106  1.1  christos #endif
   3107  1.1  christos 	mov	w7,0x87
   3108  1.1  christos 	extr	x9,x15,x15,#32
   3109  1.1  christos 	extr	x17,x15,x14,#63
   3110  1.1  christos 	and	w8,w7,w9,asr#31
   3111  1.1  christos 	eor	x16,x8,x14,lsl#1
   3112  1.1  christos 	mov	v15.d[0],x18
   3113  1.1  christos 	mov	v15.d[1],x19
   3114  1.1  christos #ifdef __AARCH64EB__
   3115  1.1  christos 	rev32	v15.16b,v15.16b
   3116  1.1  christos #endif
   3117  1.1  christos 	mov	w7,0x87
   3118  1.1  christos 	extr	x9,x17,x17,#32
   3119  1.1  christos 	extr	x19,x17,x16,#63
   3120  1.1  christos 	and	w8,w7,w9,asr#31
   3121  1.1  christos 	eor	x18,x8,x16,lsl#1
   3122  1.1  christos 	mov	v8.d[0],x20
   3123  1.1  christos 	mov	v8.d[1],x21
   3124  1.1  christos #ifdef __AARCH64EB__
   3125  1.1  christos 	rev32	v8.16b,v8.16b
   3126  1.1  christos #endif
   3127  1.1  christos 	mov	w7,0x87
   3128  1.1  christos 	extr	x9,x19,x19,#32
   3129  1.1  christos 	extr	x21,x19,x18,#63
   3130  1.1  christos 	and	w8,w7,w9,asr#31
   3131  1.1  christos 	eor	x20,x8,x18,lsl#1
   3132  1.1  christos 	mov	v9.d[0],x22
   3133  1.1  christos 	mov	v9.d[1],x23
   3134  1.1  christos #ifdef __AARCH64EB__
   3135  1.1  christos 	rev32	v9.16b,v9.16b
   3136  1.1  christos #endif
   3137  1.1  christos 	mov	w7,0x87
   3138  1.1  christos 	extr	x9,x21,x21,#32
   3139  1.1  christos 	extr	x23,x21,x20,#63
   3140  1.1  christos 	and	w8,w7,w9,asr#31
   3141  1.1  christos 	eor	x22,x8,x20,lsl#1
   3142  1.1  christos 	mov	v10.d[0],x24
   3143  1.1  christos 	mov	v10.d[1],x25
   3144  1.1  christos #ifdef __AARCH64EB__
   3145  1.1  christos 	rev32	v10.16b,v10.16b
   3146  1.1  christos #endif
   3147  1.1  christos 	mov	w7,0x87
   3148  1.1  christos 	extr	x9,x23,x23,#32
   3149  1.1  christos 	extr	x25,x23,x22,#63
   3150  1.1  christos 	and	w8,w7,w9,asr#31
   3151  1.1  christos 	eor	x24,x8,x22,lsl#1
   3152  1.1  christos 	mov	v11.d[0],x26
   3153  1.1  christos 	mov	v11.d[1],x27
   3154  1.1  christos #ifdef __AARCH64EB__
   3155  1.1  christos 	rev32	v11.16b,v11.16b
   3156  1.1  christos #endif
   3157  1.1  christos 	mov	w7,0x87
   3158  1.1  christos 	extr	x9,x25,x25,#32
   3159  1.1  christos 	extr	x27,x25,x24,#63
   3160  1.1  christos 	and	w8,w7,w9,asr#31
   3161  1.1  christos 	eor	x26,x8,x24,lsl#1
   3162  1.1  christos 	eor	v0.16b, v0.16b, v12.16b
   3163  1.1  christos 	eor	v1.16b, v1.16b, v13.16b
   3164  1.1  christos 	eor	v2.16b, v2.16b, v14.16b
   3165  1.1  christos 	eor	v3.16b, v3.16b, v15.16b
   3166  1.1  christos 	eor	v4.16b, v4.16b, v8.16b
   3167  1.1  christos 	eor	v5.16b, v5.16b, v9.16b
   3168  1.1  christos 	eor	v6.16b, v6.16b, v10.16b
   3169  1.1  christos 	eor	v7.16b, v7.16b, v11.16b
   3170  1.1  christos 
   3171  1.1  christos 	// save the last tweak
   3172  1.1  christos 	st1	{v11.4s},[x5]
   3173  1.1  christos 	st1	{v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64
   3174  1.1  christos 	st1	{v4.4s,v5.4s,v6.4s,v7.4s},[x1],#64
   3175  1.1  christos 	subs	x2,x2,#8
   3176  1.1  christos 	b.gt	.Lxts_8_blocks_process_gb
   3177  1.1  christos 	b	100f
   3178  1.1  christos .Lxts_4_blocks_process_gb:
   3179  1.1  christos 	mov	v8.d[0],x12
   3180  1.1  christos 	mov	v8.d[1],x13
   3181  1.1  christos #ifdef __AARCH64EB__
   3182  1.1  christos 	rev32	v8.16b,v8.16b
   3183  1.1  christos #endif
   3184  1.1  christos 	mov	v9.d[0],x14
   3185  1.1  christos 	mov	v9.d[1],x15
   3186  1.1  christos #ifdef __AARCH64EB__
   3187  1.1  christos 	rev32	v9.16b,v9.16b
   3188  1.1  christos #endif
   3189  1.1  christos 	mov	v10.d[0],x16
   3190  1.1  christos 	mov	v10.d[1],x17
   3191  1.1  christos #ifdef __AARCH64EB__
   3192  1.1  christos 	rev32	v10.16b,v10.16b
   3193  1.1  christos #endif
   3194  1.1  christos 	mov	v11.d[0],x18
   3195  1.1  christos 	mov	v11.d[1],x19
   3196  1.1  christos #ifdef __AARCH64EB__
   3197  1.1  christos 	rev32	v11.16b,v11.16b
   3198  1.1  christos #endif
   3199  1.1  christos 	cmp	x2,#4
   3200  1.1  christos 	b.lt	1f
   3201  1.1  christos 	ld1	{v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64
   3202  1.1  christos 	rbit	v8.16b,v8.16b
   3203  1.1  christos 	rbit	v9.16b,v9.16b
   3204  1.1  christos 	rbit	v10.16b,v10.16b
   3205  1.1  christos 	rbit	v11.16b,v11.16b
   3206  1.1  christos 	eor	v4.16b, v4.16b, v8.16b
   3207  1.1  christos 	eor	v5.16b, v5.16b, v9.16b
   3208  1.1  christos 	eor	v6.16b, v6.16b, v10.16b
   3209  1.1  christos 	eor	v7.16b, v7.16b, v11.16b
   3210  1.1  christos #ifndef __AARCH64EB__
   3211  1.1  christos 	rev32	v4.16b,v4.16b
   3212  1.1  christos #endif
   3213  1.1  christos #ifndef __AARCH64EB__
   3214  1.1  christos 	rev32	v5.16b,v5.16b
   3215  1.1  christos #endif
   3216  1.1  christos #ifndef __AARCH64EB__
   3217  1.1  christos 	rev32	v6.16b,v6.16b
   3218  1.1  christos #endif
   3219  1.1  christos #ifndef __AARCH64EB__
   3220  1.1  christos 	rev32	v7.16b,v7.16b
   3221  1.1  christos #endif
   3222  1.1  christos 	zip1	v0.4s,v4.4s,v5.4s
   3223  1.1  christos 	zip2	v1.4s,v4.4s,v5.4s
   3224  1.1  christos 	zip1	v2.4s,v6.4s,v7.4s
   3225  1.1  christos 	zip2	v3.4s,v6.4s,v7.4s
   3226  1.1  christos 	zip1	v4.2d,v0.2d,v2.2d
   3227  1.1  christos 	zip2	v5.2d,v0.2d,v2.2d
   3228  1.1  christos 	zip1	v6.2d,v1.2d,v3.2d
   3229  1.1  christos 	zip2	v7.2d,v1.2d,v3.2d
   3230  1.1  christos 	bl	_vpsm4_enc_4blks
   3231  1.1  christos 	zip1	v4.4s,v0.4s,v1.4s
   3232  1.1  christos 	zip2	v5.4s,v0.4s,v1.4s
   3233  1.1  christos 	zip1	v6.4s,v2.4s,v3.4s
   3234  1.1  christos 	zip2	v7.4s,v2.4s,v3.4s
   3235  1.1  christos 	zip1	v0.2d,v4.2d,v6.2d
   3236  1.1  christos 	zip2	v1.2d,v4.2d,v6.2d
   3237  1.1  christos 	zip1	v2.2d,v5.2d,v7.2d
   3238  1.1  christos 	zip2	v3.2d,v5.2d,v7.2d
   3239  1.1  christos 	eor	v0.16b, v0.16b, v8.16b
   3240  1.1  christos 	eor	v1.16b, v1.16b, v9.16b
   3241  1.1  christos 	eor	v2.16b, v2.16b, v10.16b
   3242  1.1  christos 	eor	v3.16b, v3.16b, v11.16b
   3243  1.1  christos 	st1	{v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64
   3244  1.1  christos 	sub	x2,x2,#4
   3245  1.1  christos 	mov	v8.d[0],x20
   3246  1.1  christos 	mov	v8.d[1],x21
   3247  1.1  christos #ifdef __AARCH64EB__
   3248  1.1  christos 	rev32	v8.16b,v8.16b
   3249  1.1  christos #endif
   3250  1.1  christos 	mov	v9.d[0],x22
   3251  1.1  christos 	mov	v9.d[1],x23
   3252  1.1  christos #ifdef __AARCH64EB__
   3253  1.1  christos 	rev32	v9.16b,v9.16b
   3254  1.1  christos #endif
   3255  1.1  christos 	mov	v10.d[0],x24
   3256  1.1  christos 	mov	v10.d[1],x25
   3257  1.1  christos #ifdef __AARCH64EB__
   3258  1.1  christos 	rev32	v10.16b,v10.16b
   3259  1.1  christos #endif
   3260  1.1  christos 	// save the last tweak
   3261  1.1  christos 	st1	{v11.4s},[x5]
   3262  1.1  christos 1:
   3263  1.1  christos 	// process last block
   3264  1.1  christos 	cmp	x2,#1
   3265  1.1  christos 	b.lt	100f
   3266  1.1  christos 	b.gt	1f
   3267  1.1  christos 	ld1	{v4.4s},[x0],#16
   3268  1.1  christos 	rbit	v8.16b,v8.16b
   3269  1.1  christos 	eor	v4.16b, v4.16b, v8.16b
   3270  1.1  christos #ifndef __AARCH64EB__
   3271  1.1  christos 	rev32	v4.16b,v4.16b
   3272  1.1  christos #endif
   3273  1.1  christos 	mov	x10,x3
   3274  1.1  christos 	mov	w11,#8
   3275  1.1  christos 	mov	w12,v4.s[0]
   3276  1.1  christos 	mov	w13,v4.s[1]
   3277  1.1  christos 	mov	w14,v4.s[2]
   3278  1.1  christos 	mov	w15,v4.s[3]
   3279  1.1  christos 10:
   3280  1.1  christos 	ldp	w7,w8,[x10],8
   3281  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   3282  1.1  christos 	eor	w6,w14,w15
   3283  1.1  christos 	eor	w9,w7,w13
   3284  1.1  christos 	eor	w6,w6,w9
   3285  1.1  christos 	movi	v1.16b,#64
   3286  1.1  christos 	movi	v2.16b,#128
   3287  1.1  christos 	movi	v3.16b,#192
   3288  1.1  christos 	mov	v0.s[0],w6
   3289  1.1  christos 
   3290  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   3291  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   3292  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   3293  1.1  christos 
   3294  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   3295  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   3296  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   3297  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   3298  1.1  christos 
   3299  1.1  christos 	mov	w6,v0.s[0]
   3300  1.1  christos 	mov	w7,v1.s[0]
   3301  1.1  christos 	mov	w9,v2.s[0]
   3302  1.1  christos 	add	w7,w6,w7
   3303  1.1  christos 	mov	w6,v3.s[0]
   3304  1.1  christos 	add	w7,w7,w9
   3305  1.1  christos 	add	w7,w7,w6
   3306  1.1  christos 
   3307  1.1  christos 	eor	w6,w7,w7,ror #32-2
   3308  1.1  christos 	eor	w6,w6,w7,ror #32-10
   3309  1.1  christos 	eor	w6,w6,w7,ror #32-18
   3310  1.1  christos 	eor	w6,w6,w7,ror #32-24
   3311  1.1  christos 	eor	w12,w12,w6
   3312  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   3313  1.1  christos 	eor	w6,w14,w15
   3314  1.1  christos 	eor	w9,w12,w8
   3315  1.1  christos 	eor	w6,w6,w9
   3316  1.1  christos 	movi	v1.16b,#64
   3317  1.1  christos 	movi	v2.16b,#128
   3318  1.1  christos 	movi	v3.16b,#192
   3319  1.1  christos 	mov	v0.s[0],w6
   3320  1.1  christos 
   3321  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   3322  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   3323  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   3324  1.1  christos 
   3325  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   3326  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   3327  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   3328  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   3329  1.1  christos 
   3330  1.1  christos 	mov	w6,v0.s[0]
   3331  1.1  christos 	mov	w7,v1.s[0]
   3332  1.1  christos 	mov	w9,v2.s[0]
   3333  1.1  christos 	add	w7,w6,w7
   3334  1.1  christos 	mov	w6,v3.s[0]
   3335  1.1  christos 	add	w7,w7,w9
   3336  1.1  christos 	add	w7,w7,w6
   3337  1.1  christos 
   3338  1.1  christos 	eor	w6,w7,w7,ror #32-2
   3339  1.1  christos 	eor	w6,w6,w7,ror #32-10
   3340  1.1  christos 	eor	w6,w6,w7,ror #32-18
   3341  1.1  christos 	eor	w6,w6,w7,ror #32-24
   3342  1.1  christos 	ldp	w7,w8,[x10],8
   3343  1.1  christos 	eor	w13,w13,w6
   3344  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   3345  1.1  christos 	eor	w6,w12,w13
   3346  1.1  christos 	eor	w9,w7,w15
   3347  1.1  christos 	eor	w6,w6,w9
   3348  1.1  christos 	movi	v1.16b,#64
   3349  1.1  christos 	movi	v2.16b,#128
   3350  1.1  christos 	movi	v3.16b,#192
   3351  1.1  christos 	mov	v0.s[0],w6
   3352  1.1  christos 
   3353  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   3354  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   3355  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   3356  1.1  christos 
   3357  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   3358  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   3359  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   3360  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   3361  1.1  christos 
   3362  1.1  christos 	mov	w6,v0.s[0]
   3363  1.1  christos 	mov	w7,v1.s[0]
   3364  1.1  christos 	mov	w9,v2.s[0]
   3365  1.1  christos 	add	w7,w6,w7
   3366  1.1  christos 	mov	w6,v3.s[0]
   3367  1.1  christos 	add	w7,w7,w9
   3368  1.1  christos 	add	w7,w7,w6
   3369  1.1  christos 
   3370  1.1  christos 	eor	w6,w7,w7,ror #32-2
   3371  1.1  christos 	eor	w6,w6,w7,ror #32-10
   3372  1.1  christos 	eor	w6,w6,w7,ror #32-18
   3373  1.1  christos 	eor	w6,w6,w7,ror #32-24
   3374  1.1  christos 	eor	w14,w14,w6
   3375  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   3376  1.1  christos 	eor	w6,w12,w13
   3377  1.1  christos 	eor	w9,w14,w8
   3378  1.1  christos 	eor	w6,w6,w9
   3379  1.1  christos 	movi	v1.16b,#64
   3380  1.1  christos 	movi	v2.16b,#128
   3381  1.1  christos 	movi	v3.16b,#192
   3382  1.1  christos 	mov	v0.s[0],w6
   3383  1.1  christos 
   3384  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   3385  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   3386  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   3387  1.1  christos 
   3388  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   3389  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   3390  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   3391  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   3392  1.1  christos 
   3393  1.1  christos 	mov	w6,v0.s[0]
   3394  1.1  christos 	mov	w7,v1.s[0]
   3395  1.1  christos 	mov	w9,v2.s[0]
   3396  1.1  christos 	add	w7,w6,w7
   3397  1.1  christos 	mov	w6,v3.s[0]
   3398  1.1  christos 	add	w7,w7,w9
   3399  1.1  christos 	add	w7,w7,w6
   3400  1.1  christos 
   3401  1.1  christos 	eor	w6,w7,w7,ror #32-2
   3402  1.1  christos 	eor	w6,w6,w7,ror #32-10
   3403  1.1  christos 	eor	w6,w6,w7,ror #32-18
   3404  1.1  christos 	eor	w6,w6,w7,ror #32-24
   3405  1.1  christos 	eor	w15,w15,w6
   3406  1.1  christos 	subs	w11,w11,#1
   3407  1.1  christos 	b.ne	10b
   3408  1.1  christos 	mov	v4.s[0],w15
   3409  1.1  christos 	mov	v4.s[1],w14
   3410  1.1  christos 	mov	v4.s[2],w13
   3411  1.1  christos 	mov	v4.s[3],w12
   3412  1.1  christos #ifndef __AARCH64EB__
   3413  1.1  christos 	rev32	v4.16b,v4.16b
   3414  1.1  christos #endif
   3415  1.1  christos 	eor	v4.16b, v4.16b, v8.16b
   3416  1.1  christos 	st1	{v4.4s},[x1],#16
   3417  1.1  christos 	// save the last tweak
   3418  1.1  christos 	st1	{v8.4s},[x5]
   3419  1.1  christos 	b	100f
   3420  1.1  christos 1:	//	process last 2 blocks
   3421  1.1  christos 	cmp	x2,#2
   3422  1.1  christos 	b.gt	1f
   3423  1.1  christos 	ld1	{v4.4s,v5.4s},[x0],#32
   3424  1.1  christos 	rbit	v8.16b,v8.16b
   3425  1.1  christos 	rbit	v9.16b,v9.16b
   3426  1.1  christos 	eor	v4.16b, v4.16b, v8.16b
   3427  1.1  christos 	eor	v5.16b, v5.16b, v9.16b
   3428  1.1  christos #ifndef __AARCH64EB__
   3429  1.1  christos 	rev32	v4.16b,v4.16b
   3430  1.1  christos #endif
   3431  1.1  christos #ifndef __AARCH64EB__
   3432  1.1  christos 	rev32	v5.16b,v5.16b
   3433  1.1  christos #endif
   3434  1.1  christos 	zip1	v0.4s,v4.4s,v5.4s
   3435  1.1  christos 	zip2	v1.4s,v4.4s,v5.4s
   3436  1.1  christos 	zip1	v2.4s,v6.4s,v7.4s
   3437  1.1  christos 	zip2	v3.4s,v6.4s,v7.4s
   3438  1.1  christos 	zip1	v4.2d,v0.2d,v2.2d
   3439  1.1  christos 	zip2	v5.2d,v0.2d,v2.2d
   3440  1.1  christos 	zip1	v6.2d,v1.2d,v3.2d
   3441  1.1  christos 	zip2	v7.2d,v1.2d,v3.2d
   3442  1.1  christos 	bl	_vpsm4_enc_4blks
   3443  1.1  christos 	zip1	v4.4s,v0.4s,v1.4s
   3444  1.1  christos 	zip2	v5.4s,v0.4s,v1.4s
   3445  1.1  christos 	zip1	v6.4s,v2.4s,v3.4s
   3446  1.1  christos 	zip2	v7.4s,v2.4s,v3.4s
   3447  1.1  christos 	zip1	v0.2d,v4.2d,v6.2d
   3448  1.1  christos 	zip2	v1.2d,v4.2d,v6.2d
   3449  1.1  christos 	zip1	v2.2d,v5.2d,v7.2d
   3450  1.1  christos 	zip2	v3.2d,v5.2d,v7.2d
   3451  1.1  christos 	eor	v0.16b, v0.16b, v8.16b
   3452  1.1  christos 	eor	v1.16b, v1.16b, v9.16b
   3453  1.1  christos 	st1	{v0.4s,v1.4s},[x1],#32
   3454  1.1  christos 	// save the last tweak
   3455  1.1  christos 	st1	{v9.4s},[x5]
   3456  1.1  christos 	b	100f
   3457  1.1  christos 1:	//	process last 3 blocks
   3458  1.1  christos 	ld1	{v4.4s,v5.4s,v6.4s},[x0],#48
   3459  1.1  christos 	rbit	v8.16b,v8.16b
   3460  1.1  christos 	rbit	v9.16b,v9.16b
   3461  1.1  christos 	rbit	v10.16b,v10.16b
   3462  1.1  christos 	eor	v4.16b, v4.16b, v8.16b
   3463  1.1  christos 	eor	v5.16b, v5.16b, v9.16b
   3464  1.1  christos 	eor	v6.16b, v6.16b, v10.16b
   3465  1.1  christos #ifndef __AARCH64EB__
   3466  1.1  christos 	rev32	v4.16b,v4.16b
   3467  1.1  christos #endif
   3468  1.1  christos #ifndef __AARCH64EB__
   3469  1.1  christos 	rev32	v5.16b,v5.16b
   3470  1.1  christos #endif
   3471  1.1  christos #ifndef __AARCH64EB__
   3472  1.1  christos 	rev32	v6.16b,v6.16b
   3473  1.1  christos #endif
   3474  1.1  christos 	zip1	v0.4s,v4.4s,v5.4s
   3475  1.1  christos 	zip2	v1.4s,v4.4s,v5.4s
   3476  1.1  christos 	zip1	v2.4s,v6.4s,v7.4s
   3477  1.1  christos 	zip2	v3.4s,v6.4s,v7.4s
   3478  1.1  christos 	zip1	v4.2d,v0.2d,v2.2d
   3479  1.1  christos 	zip2	v5.2d,v0.2d,v2.2d
   3480  1.1  christos 	zip1	v6.2d,v1.2d,v3.2d
   3481  1.1  christos 	zip2	v7.2d,v1.2d,v3.2d
   3482  1.1  christos 	bl	_vpsm4_enc_4blks
   3483  1.1  christos 	zip1	v4.4s,v0.4s,v1.4s
   3484  1.1  christos 	zip2	v5.4s,v0.4s,v1.4s
   3485  1.1  christos 	zip1	v6.4s,v2.4s,v3.4s
   3486  1.1  christos 	zip2	v7.4s,v2.4s,v3.4s
   3487  1.1  christos 	zip1	v0.2d,v4.2d,v6.2d
   3488  1.1  christos 	zip2	v1.2d,v4.2d,v6.2d
   3489  1.1  christos 	zip1	v2.2d,v5.2d,v7.2d
   3490  1.1  christos 	zip2	v3.2d,v5.2d,v7.2d
   3491  1.1  christos 	eor	v0.16b, v0.16b, v8.16b
   3492  1.1  christos 	eor	v1.16b, v1.16b, v9.16b
   3493  1.1  christos 	eor	v2.16b, v2.16b, v10.16b
   3494  1.1  christos 	st1	{v0.4s,v1.4s,v2.4s},[x1],#48
   3495  1.1  christos 	// save the last tweak
   3496  1.1  christos 	st1	{v10.4s},[x5]
   3497  1.1  christos 100:
   3498  1.1  christos 	cmp	x29,0
   3499  1.1  christos 	b.eq	.return_gb
   3500  1.1  christos 
   3501  1.1  christos // This branch calculates the last two tweaks,
   3502  1.1  christos // while the encryption/decryption length is larger than 32
   3503  1.1  christos .last_2blks_tweak_gb:
   3504  1.1  christos 	ld1	{v8.4s},[x5]
   3505  1.1  christos #ifdef __AARCH64EB__
   3506  1.1  christos 	rev32	v8.16b,v8.16b
   3507  1.1  christos #endif
   3508  1.1  christos 	rbit	v2.16b,v8.16b
   3509  1.1  christos 	adrp	x10,.Lxts_magic
   3510  1.1  christos 	ldr	q0, [x10, #:lo12:.Lxts_magic]
   3511  1.1  christos 	shl	v9.16b, v2.16b, #1
   3512  1.1  christos 	ext	v1.16b, v2.16b, v2.16b,#15
   3513  1.1  christos 	ushr	v1.16b, v1.16b, #7
   3514  1.1  christos 	mul	v1.16b, v1.16b, v0.16b
   3515  1.1  christos 	eor	v9.16b, v9.16b, v1.16b
   3516  1.1  christos 	rbit	v9.16b,v9.16b
   3517  1.1  christos 	rbit	v2.16b,v9.16b
   3518  1.1  christos 	adrp	x10,.Lxts_magic
   3519  1.1  christos 	ldr	q0, [x10, #:lo12:.Lxts_magic]
   3520  1.1  christos 	shl	v10.16b, v2.16b, #1
   3521  1.1  christos 	ext	v1.16b, v2.16b, v2.16b,#15
   3522  1.1  christos 	ushr	v1.16b, v1.16b, #7
   3523  1.1  christos 	mul	v1.16b, v1.16b, v0.16b
   3524  1.1  christos 	eor	v10.16b, v10.16b, v1.16b
   3525  1.1  christos 	rbit	v10.16b,v10.16b
   3526  1.1  christos 	b	.check_dec_gb
   3527  1.1  christos 
   3528  1.1  christos 
   3529  1.1  christos // This branch calculates the last two tweaks,
   3530  1.1  christos // while the encryption/decryption length is equal to 32, who only need two tweaks
   3531  1.1  christos .only_2blks_tweak_gb:
   3532  1.1  christos 	mov	v9.16b,v8.16b
   3533  1.1  christos #ifdef __AARCH64EB__
   3534  1.1  christos 	rev32	v9.16b,v9.16b
   3535  1.1  christos #endif
   3536  1.1  christos 	rbit	v2.16b,v9.16b
   3537  1.1  christos 	adrp	x10,.Lxts_magic
   3538  1.1  christos 	ldr	q0, [x10, #:lo12:.Lxts_magic]
   3539  1.1  christos 	shl	v10.16b, v2.16b, #1
   3540  1.1  christos 	ext	v1.16b, v2.16b, v2.16b,#15
   3541  1.1  christos 	ushr	v1.16b, v1.16b, #7
   3542  1.1  christos 	mul	v1.16b, v1.16b, v0.16b
   3543  1.1  christos 	eor	v10.16b, v10.16b, v1.16b
   3544  1.1  christos 	rbit	v10.16b,v10.16b
   3545  1.1  christos 	b	.check_dec_gb
   3546  1.1  christos 
   3547  1.1  christos 
   3548  1.1  christos // Determine whether encryption or decryption is required.
   3549  1.1  christos // The last two tweaks need to be swapped for decryption.
   3550  1.1  christos .check_dec_gb:
   3551  1.1  christos 	// encryption:1 decryption:0
   3552  1.1  christos 	cmp	w28,1
   3553  1.1  christos 	b.eq	.process_last_2blks_gb
   3554  1.1  christos 	mov	v0.16B,v9.16b
   3555  1.1  christos 	mov	v9.16B,v10.16b
   3556  1.1  christos 	mov	v10.16B,v0.16b
   3557  1.1  christos 
   3558  1.1  christos .process_last_2blks_gb:
   3559  1.1  christos #ifdef __AARCH64EB__
   3560  1.1  christos 	rev32	v9.16b,v9.16b
   3561  1.1  christos #endif
   3562  1.1  christos #ifdef __AARCH64EB__
   3563  1.1  christos 	rev32	v10.16b,v10.16b
   3564  1.1  christos #endif
   3565  1.1  christos 	ld1	{v4.4s},[x0],#16
   3566  1.1  christos 	eor	v4.16b, v4.16b, v9.16b
   3567  1.1  christos #ifndef __AARCH64EB__
   3568  1.1  christos 	rev32	v4.16b,v4.16b
   3569  1.1  christos #endif
   3570  1.1  christos 	mov	x10,x3
   3571  1.1  christos 	mov	w11,#8
   3572  1.1  christos 	mov	w12,v4.s[0]
   3573  1.1  christos 	mov	w13,v4.s[1]
   3574  1.1  christos 	mov	w14,v4.s[2]
   3575  1.1  christos 	mov	w15,v4.s[3]
   3576  1.1  christos 10:
   3577  1.1  christos 	ldp	w7,w8,[x10],8
   3578  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   3579  1.1  christos 	eor	w6,w14,w15
   3580  1.1  christos 	eor	w9,w7,w13
   3581  1.1  christos 	eor	w6,w6,w9
   3582  1.1  christos 	movi	v1.16b,#64
   3583  1.1  christos 	movi	v2.16b,#128
   3584  1.1  christos 	movi	v3.16b,#192
   3585  1.1  christos 	mov	v0.s[0],w6
   3586  1.1  christos 
   3587  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   3588  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   3589  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   3590  1.1  christos 
   3591  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   3592  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   3593  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   3594  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   3595  1.1  christos 
   3596  1.1  christos 	mov	w6,v0.s[0]
   3597  1.1  christos 	mov	w7,v1.s[0]
   3598  1.1  christos 	mov	w9,v2.s[0]
   3599  1.1  christos 	add	w7,w6,w7
   3600  1.1  christos 	mov	w6,v3.s[0]
   3601  1.1  christos 	add	w7,w7,w9
   3602  1.1  christos 	add	w7,w7,w6
   3603  1.1  christos 
   3604  1.1  christos 	eor	w6,w7,w7,ror #32-2
   3605  1.1  christos 	eor	w6,w6,w7,ror #32-10
   3606  1.1  christos 	eor	w6,w6,w7,ror #32-18
   3607  1.1  christos 	eor	w6,w6,w7,ror #32-24
   3608  1.1  christos 	eor	w12,w12,w6
   3609  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   3610  1.1  christos 	eor	w6,w14,w15
   3611  1.1  christos 	eor	w9,w12,w8
   3612  1.1  christos 	eor	w6,w6,w9
   3613  1.1  christos 	movi	v1.16b,#64
   3614  1.1  christos 	movi	v2.16b,#128
   3615  1.1  christos 	movi	v3.16b,#192
   3616  1.1  christos 	mov	v0.s[0],w6
   3617  1.1  christos 
   3618  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   3619  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   3620  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   3621  1.1  christos 
   3622  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   3623  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   3624  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   3625  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   3626  1.1  christos 
   3627  1.1  christos 	mov	w6,v0.s[0]
   3628  1.1  christos 	mov	w7,v1.s[0]
   3629  1.1  christos 	mov	w9,v2.s[0]
   3630  1.1  christos 	add	w7,w6,w7
   3631  1.1  christos 	mov	w6,v3.s[0]
   3632  1.1  christos 	add	w7,w7,w9
   3633  1.1  christos 	add	w7,w7,w6
   3634  1.1  christos 
   3635  1.1  christos 	eor	w6,w7,w7,ror #32-2
   3636  1.1  christos 	eor	w6,w6,w7,ror #32-10
   3637  1.1  christos 	eor	w6,w6,w7,ror #32-18
   3638  1.1  christos 	eor	w6,w6,w7,ror #32-24
   3639  1.1  christos 	ldp	w7,w8,[x10],8
   3640  1.1  christos 	eor	w13,w13,w6
   3641  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   3642  1.1  christos 	eor	w6,w12,w13
   3643  1.1  christos 	eor	w9,w7,w15
   3644  1.1  christos 	eor	w6,w6,w9
   3645  1.1  christos 	movi	v1.16b,#64
   3646  1.1  christos 	movi	v2.16b,#128
   3647  1.1  christos 	movi	v3.16b,#192
   3648  1.1  christos 	mov	v0.s[0],w6
   3649  1.1  christos 
   3650  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   3651  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   3652  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   3653  1.1  christos 
   3654  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   3655  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   3656  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   3657  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   3658  1.1  christos 
   3659  1.1  christos 	mov	w6,v0.s[0]
   3660  1.1  christos 	mov	w7,v1.s[0]
   3661  1.1  christos 	mov	w9,v2.s[0]
   3662  1.1  christos 	add	w7,w6,w7
   3663  1.1  christos 	mov	w6,v3.s[0]
   3664  1.1  christos 	add	w7,w7,w9
   3665  1.1  christos 	add	w7,w7,w6
   3666  1.1  christos 
   3667  1.1  christos 	eor	w6,w7,w7,ror #32-2
   3668  1.1  christos 	eor	w6,w6,w7,ror #32-10
   3669  1.1  christos 	eor	w6,w6,w7,ror #32-18
   3670  1.1  christos 	eor	w6,w6,w7,ror #32-24
   3671  1.1  christos 	eor	w14,w14,w6
   3672  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   3673  1.1  christos 	eor	w6,w12,w13
   3674  1.1  christos 	eor	w9,w14,w8
   3675  1.1  christos 	eor	w6,w6,w9
   3676  1.1  christos 	movi	v1.16b,#64
   3677  1.1  christos 	movi	v2.16b,#128
   3678  1.1  christos 	movi	v3.16b,#192
   3679  1.1  christos 	mov	v0.s[0],w6
   3680  1.1  christos 
   3681  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   3682  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   3683  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   3684  1.1  christos 
   3685  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   3686  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   3687  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   3688  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   3689  1.1  christos 
   3690  1.1  christos 	mov	w6,v0.s[0]
   3691  1.1  christos 	mov	w7,v1.s[0]
   3692  1.1  christos 	mov	w9,v2.s[0]
   3693  1.1  christos 	add	w7,w6,w7
   3694  1.1  christos 	mov	w6,v3.s[0]
   3695  1.1  christos 	add	w7,w7,w9
   3696  1.1  christos 	add	w7,w7,w6
   3697  1.1  christos 
   3698  1.1  christos 	eor	w6,w7,w7,ror #32-2
   3699  1.1  christos 	eor	w6,w6,w7,ror #32-10
   3700  1.1  christos 	eor	w6,w6,w7,ror #32-18
   3701  1.1  christos 	eor	w6,w6,w7,ror #32-24
   3702  1.1  christos 	eor	w15,w15,w6
   3703  1.1  christos 	subs	w11,w11,#1
   3704  1.1  christos 	b.ne	10b
   3705  1.1  christos 	mov	v4.s[0],w15
   3706  1.1  christos 	mov	v4.s[1],w14
   3707  1.1  christos 	mov	v4.s[2],w13
   3708  1.1  christos 	mov	v4.s[3],w12
   3709  1.1  christos #ifndef __AARCH64EB__
   3710  1.1  christos 	rev32	v4.16b,v4.16b
   3711  1.1  christos #endif
   3712  1.1  christos 	eor	v4.16b, v4.16b, v9.16b
   3713  1.1  christos 	st1	{v4.4s},[x1],#16
   3714  1.1  christos 
   3715  1.1  christos 	sub	x26,x1,16
   3716  1.1  christos .loop_gb:
   3717  1.1  christos 	subs	x29,x29,1
   3718  1.1  christos 	ldrb	w7,[x26,x29]
   3719  1.1  christos 	ldrb	w8,[x0,x29]
   3720  1.1  christos 	strb	w8,[x26,x29]
   3721  1.1  christos 	strb	w7,[x1,x29]
   3722  1.1  christos 	b.gt	.loop_gb
   3723  1.1  christos 	ld1	{v4.4s}, [x26]
   3724  1.1  christos 	eor	v4.16b, v4.16b, v10.16b
   3725  1.1  christos #ifndef __AARCH64EB__
   3726  1.1  christos 	rev32	v4.16b,v4.16b
   3727  1.1  christos #endif
   3728  1.1  christos 	mov	x10,x3
   3729  1.1  christos 	mov	w11,#8
   3730  1.1  christos 	mov	w12,v4.s[0]
   3731  1.1  christos 	mov	w13,v4.s[1]
   3732  1.1  christos 	mov	w14,v4.s[2]
   3733  1.1  christos 	mov	w15,v4.s[3]
   3734  1.1  christos 10:
   3735  1.1  christos 	ldp	w7,w8,[x10],8
   3736  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   3737  1.1  christos 	eor	w6,w14,w15
   3738  1.1  christos 	eor	w9,w7,w13
   3739  1.1  christos 	eor	w6,w6,w9
   3740  1.1  christos 	movi	v1.16b,#64
   3741  1.1  christos 	movi	v2.16b,#128
   3742  1.1  christos 	movi	v3.16b,#192
   3743  1.1  christos 	mov	v0.s[0],w6
   3744  1.1  christos 
   3745  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   3746  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   3747  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   3748  1.1  christos 
   3749  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   3750  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   3751  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   3752  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   3753  1.1  christos 
   3754  1.1  christos 	mov	w6,v0.s[0]
   3755  1.1  christos 	mov	w7,v1.s[0]
   3756  1.1  christos 	mov	w9,v2.s[0]
   3757  1.1  christos 	add	w7,w6,w7
   3758  1.1  christos 	mov	w6,v3.s[0]
   3759  1.1  christos 	add	w7,w7,w9
   3760  1.1  christos 	add	w7,w7,w6
   3761  1.1  christos 
   3762  1.1  christos 	eor	w6,w7,w7,ror #32-2
   3763  1.1  christos 	eor	w6,w6,w7,ror #32-10
   3764  1.1  christos 	eor	w6,w6,w7,ror #32-18
   3765  1.1  christos 	eor	w6,w6,w7,ror #32-24
   3766  1.1  christos 	eor	w12,w12,w6
   3767  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   3768  1.1  christos 	eor	w6,w14,w15
   3769  1.1  christos 	eor	w9,w12,w8
   3770  1.1  christos 	eor	w6,w6,w9
   3771  1.1  christos 	movi	v1.16b,#64
   3772  1.1  christos 	movi	v2.16b,#128
   3773  1.1  christos 	movi	v3.16b,#192
   3774  1.1  christos 	mov	v0.s[0],w6
   3775  1.1  christos 
   3776  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   3777  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   3778  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   3779  1.1  christos 
   3780  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   3781  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   3782  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   3783  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   3784  1.1  christos 
   3785  1.1  christos 	mov	w6,v0.s[0]
   3786  1.1  christos 	mov	w7,v1.s[0]
   3787  1.1  christos 	mov	w9,v2.s[0]
   3788  1.1  christos 	add	w7,w6,w7
   3789  1.1  christos 	mov	w6,v3.s[0]
   3790  1.1  christos 	add	w7,w7,w9
   3791  1.1  christos 	add	w7,w7,w6
   3792  1.1  christos 
   3793  1.1  christos 	eor	w6,w7,w7,ror #32-2
   3794  1.1  christos 	eor	w6,w6,w7,ror #32-10
   3795  1.1  christos 	eor	w6,w6,w7,ror #32-18
   3796  1.1  christos 	eor	w6,w6,w7,ror #32-24
   3797  1.1  christos 	ldp	w7,w8,[x10],8
   3798  1.1  christos 	eor	w13,w13,w6
   3799  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   3800  1.1  christos 	eor	w6,w12,w13
   3801  1.1  christos 	eor	w9,w7,w15
   3802  1.1  christos 	eor	w6,w6,w9
   3803  1.1  christos 	movi	v1.16b,#64
   3804  1.1  christos 	movi	v2.16b,#128
   3805  1.1  christos 	movi	v3.16b,#192
   3806  1.1  christos 	mov	v0.s[0],w6
   3807  1.1  christos 
   3808  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   3809  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   3810  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   3811  1.1  christos 
   3812  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   3813  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   3814  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   3815  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   3816  1.1  christos 
   3817  1.1  christos 	mov	w6,v0.s[0]
   3818  1.1  christos 	mov	w7,v1.s[0]
   3819  1.1  christos 	mov	w9,v2.s[0]
   3820  1.1  christos 	add	w7,w6,w7
   3821  1.1  christos 	mov	w6,v3.s[0]
   3822  1.1  christos 	add	w7,w7,w9
   3823  1.1  christos 	add	w7,w7,w6
   3824  1.1  christos 
   3825  1.1  christos 	eor	w6,w7,w7,ror #32-2
   3826  1.1  christos 	eor	w6,w6,w7,ror #32-10
   3827  1.1  christos 	eor	w6,w6,w7,ror #32-18
   3828  1.1  christos 	eor	w6,w6,w7,ror #32-24
   3829  1.1  christos 	eor	w14,w14,w6
   3830  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   3831  1.1  christos 	eor	w6,w12,w13
   3832  1.1  christos 	eor	w9,w14,w8
   3833  1.1  christos 	eor	w6,w6,w9
   3834  1.1  christos 	movi	v1.16b,#64
   3835  1.1  christos 	movi	v2.16b,#128
   3836  1.1  christos 	movi	v3.16b,#192
   3837  1.1  christos 	mov	v0.s[0],w6
   3838  1.1  christos 
   3839  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   3840  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   3841  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   3842  1.1  christos 
   3843  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   3844  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   3845  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   3846  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   3847  1.1  christos 
   3848  1.1  christos 	mov	w6,v0.s[0]
   3849  1.1  christos 	mov	w7,v1.s[0]
   3850  1.1  christos 	mov	w9,v2.s[0]
   3851  1.1  christos 	add	w7,w6,w7
   3852  1.1  christos 	mov	w6,v3.s[0]
   3853  1.1  christos 	add	w7,w7,w9
   3854  1.1  christos 	add	w7,w7,w6
   3855  1.1  christos 
   3856  1.1  christos 	eor	w6,w7,w7,ror #32-2
   3857  1.1  christos 	eor	w6,w6,w7,ror #32-10
   3858  1.1  christos 	eor	w6,w6,w7,ror #32-18
   3859  1.1  christos 	eor	w6,w6,w7,ror #32-24
   3860  1.1  christos 	eor	w15,w15,w6
   3861  1.1  christos 	subs	w11,w11,#1
   3862  1.1  christos 	b.ne	10b
   3863  1.1  christos 	mov	v4.s[0],w15
   3864  1.1  christos 	mov	v4.s[1],w14
   3865  1.1  christos 	mov	v4.s[2],w13
   3866  1.1  christos 	mov	v4.s[3],w12
   3867  1.1  christos #ifndef __AARCH64EB__
   3868  1.1  christos 	rev32	v4.16b,v4.16b
   3869  1.1  christos #endif
   3870  1.1  christos 	eor	v4.16b, v4.16b, v10.16b
   3871  1.1  christos 	st1	{v4.4s}, [x26]
   3872  1.1  christos .return_gb:
   3873  1.1  christos 	ldp	d14, d15, [sp], #0x10
   3874  1.1  christos 	ldp	d12, d13, [sp], #0x10
   3875  1.1  christos 	ldp	d10, d11, [sp], #0x10
   3876  1.1  christos 	ldp	d8, d9, [sp], #0x10
   3877  1.1  christos 	ldp	x29, x30, [sp], #0x10
   3878  1.1  christos 	ldp	x27, x28, [sp], #0x10
   3879  1.1  christos 	ldp	x25, x26, [sp], #0x10
   3880  1.1  christos 	ldp	x23, x24, [sp], #0x10
   3881  1.1  christos 	ldp	x21, x22, [sp], #0x10
   3882  1.1  christos 	ldp	x19, x20, [sp], #0x10
   3883  1.1  christos 	ldp	x17, x18, [sp], #0x10
   3884  1.1  christos 	ldp	x15, x16, [sp], #0x10
   3885  1.1  christos 	AARCH64_VALIDATE_LINK_REGISTER
   3886  1.1  christos 	ret
   3887  1.1  christos .size	vpsm4_xts_encrypt_gb,.-vpsm4_xts_encrypt_gb
   3888  1.1  christos .globl	vpsm4_xts_encrypt
   3889  1.1  christos .type	vpsm4_xts_encrypt,%function
   3890  1.1  christos .align	5
   3891  1.1  christos vpsm4_xts_encrypt:
   3892  1.1  christos 	AARCH64_SIGN_LINK_REGISTER
   3893  1.1  christos 	stp	x15, x16, [sp, #-0x10]!
   3894  1.1  christos 	stp	x17, x18, [sp, #-0x10]!
   3895  1.1  christos 	stp	x19, x20, [sp, #-0x10]!
   3896  1.1  christos 	stp	x21, x22, [sp, #-0x10]!
   3897  1.1  christos 	stp	x23, x24, [sp, #-0x10]!
   3898  1.1  christos 	stp	x25, x26, [sp, #-0x10]!
   3899  1.1  christos 	stp	x27, x28, [sp, #-0x10]!
   3900  1.1  christos 	stp	x29, x30, [sp, #-0x10]!
   3901  1.1  christos 	stp	d8, d9, [sp, #-0x10]!
   3902  1.1  christos 	stp	d10, d11, [sp, #-0x10]!
   3903  1.1  christos 	stp	d12, d13, [sp, #-0x10]!
   3904  1.1  christos 	stp	d14, d15, [sp, #-0x10]!
   3905  1.1  christos 	mov	x26,x3
   3906  1.1  christos 	mov	x27,x4
   3907  1.1  christos 	mov	w28,w6
   3908  1.1  christos 	ld1	{v8.4s}, [x5]
   3909  1.1  christos 	mov	x3,x27
   3910  1.1  christos 	adrp	x10,.Lsbox
   3911  1.1  christos 	add	x10,x10,#:lo12:.Lsbox
   3912  1.1  christos 	ld1	{v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64
   3913  1.1  christos 	ld1	{v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64
   3914  1.1  christos 	ld1	{v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64
   3915  1.1  christos 	ld1	{v28.16b,v29.16b,v30.16b,v31.16b},[x10]
   3916  1.1  christos #ifndef __AARCH64EB__
   3917  1.1  christos 	rev32	v8.16b,v8.16b
   3918  1.1  christos #endif
   3919  1.1  christos 	mov	x10,x3
   3920  1.1  christos 	mov	w11,#8
   3921  1.1  christos 	mov	w12,v8.s[0]
   3922  1.1  christos 	mov	w13,v8.s[1]
   3923  1.1  christos 	mov	w14,v8.s[2]
   3924  1.1  christos 	mov	w15,v8.s[3]
   3925  1.1  christos 10:
   3926  1.1  christos 	ldp	w7,w8,[x10],8
   3927  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   3928  1.1  christos 	eor	w6,w14,w15
   3929  1.1  christos 	eor	w9,w7,w13
   3930  1.1  christos 	eor	w6,w6,w9
   3931  1.1  christos 	movi	v1.16b,#64
   3932  1.1  christos 	movi	v2.16b,#128
   3933  1.1  christos 	movi	v3.16b,#192
   3934  1.1  christos 	mov	v0.s[0],w6
   3935  1.1  christos 
   3936  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   3937  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   3938  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   3939  1.1  christos 
   3940  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   3941  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   3942  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   3943  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   3944  1.1  christos 
   3945  1.1  christos 	mov	w6,v0.s[0]
   3946  1.1  christos 	mov	w7,v1.s[0]
   3947  1.1  christos 	mov	w9,v2.s[0]
   3948  1.1  christos 	add	w7,w6,w7
   3949  1.1  christos 	mov	w6,v3.s[0]
   3950  1.1  christos 	add	w7,w7,w9
   3951  1.1  christos 	add	w7,w7,w6
   3952  1.1  christos 
   3953  1.1  christos 	eor	w6,w7,w7,ror #32-2
   3954  1.1  christos 	eor	w6,w6,w7,ror #32-10
   3955  1.1  christos 	eor	w6,w6,w7,ror #32-18
   3956  1.1  christos 	eor	w6,w6,w7,ror #32-24
   3957  1.1  christos 	eor	w12,w12,w6
   3958  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   3959  1.1  christos 	eor	w6,w14,w15
   3960  1.1  christos 	eor	w9,w12,w8
   3961  1.1  christos 	eor	w6,w6,w9
   3962  1.1  christos 	movi	v1.16b,#64
   3963  1.1  christos 	movi	v2.16b,#128
   3964  1.1  christos 	movi	v3.16b,#192
   3965  1.1  christos 	mov	v0.s[0],w6
   3966  1.1  christos 
   3967  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   3968  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   3969  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   3970  1.1  christos 
   3971  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   3972  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   3973  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   3974  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   3975  1.1  christos 
   3976  1.1  christos 	mov	w6,v0.s[0]
   3977  1.1  christos 	mov	w7,v1.s[0]
   3978  1.1  christos 	mov	w9,v2.s[0]
   3979  1.1  christos 	add	w7,w6,w7
   3980  1.1  christos 	mov	w6,v3.s[0]
   3981  1.1  christos 	add	w7,w7,w9
   3982  1.1  christos 	add	w7,w7,w6
   3983  1.1  christos 
   3984  1.1  christos 	eor	w6,w7,w7,ror #32-2
   3985  1.1  christos 	eor	w6,w6,w7,ror #32-10
   3986  1.1  christos 	eor	w6,w6,w7,ror #32-18
   3987  1.1  christos 	eor	w6,w6,w7,ror #32-24
   3988  1.1  christos 	ldp	w7,w8,[x10],8
   3989  1.1  christos 	eor	w13,w13,w6
   3990  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   3991  1.1  christos 	eor	w6,w12,w13
   3992  1.1  christos 	eor	w9,w7,w15
   3993  1.1  christos 	eor	w6,w6,w9
   3994  1.1  christos 	movi	v1.16b,#64
   3995  1.1  christos 	movi	v2.16b,#128
   3996  1.1  christos 	movi	v3.16b,#192
   3997  1.1  christos 	mov	v0.s[0],w6
   3998  1.1  christos 
   3999  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   4000  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   4001  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   4002  1.1  christos 
   4003  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   4004  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   4005  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   4006  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   4007  1.1  christos 
   4008  1.1  christos 	mov	w6,v0.s[0]
   4009  1.1  christos 	mov	w7,v1.s[0]
   4010  1.1  christos 	mov	w9,v2.s[0]
   4011  1.1  christos 	add	w7,w6,w7
   4012  1.1  christos 	mov	w6,v3.s[0]
   4013  1.1  christos 	add	w7,w7,w9
   4014  1.1  christos 	add	w7,w7,w6
   4015  1.1  christos 
   4016  1.1  christos 	eor	w6,w7,w7,ror #32-2
   4017  1.1  christos 	eor	w6,w6,w7,ror #32-10
   4018  1.1  christos 	eor	w6,w6,w7,ror #32-18
   4019  1.1  christos 	eor	w6,w6,w7,ror #32-24
   4020  1.1  christos 	eor	w14,w14,w6
   4021  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   4022  1.1  christos 	eor	w6,w12,w13
   4023  1.1  christos 	eor	w9,w14,w8
   4024  1.1  christos 	eor	w6,w6,w9
   4025  1.1  christos 	movi	v1.16b,#64
   4026  1.1  christos 	movi	v2.16b,#128
   4027  1.1  christos 	movi	v3.16b,#192
   4028  1.1  christos 	mov	v0.s[0],w6
   4029  1.1  christos 
   4030  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   4031  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   4032  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   4033  1.1  christos 
   4034  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   4035  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   4036  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   4037  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   4038  1.1  christos 
   4039  1.1  christos 	mov	w6,v0.s[0]
   4040  1.1  christos 	mov	w7,v1.s[0]
   4041  1.1  christos 	mov	w9,v2.s[0]
   4042  1.1  christos 	add	w7,w6,w7
   4043  1.1  christos 	mov	w6,v3.s[0]
   4044  1.1  christos 	add	w7,w7,w9
   4045  1.1  christos 	add	w7,w7,w6
   4046  1.1  christos 
   4047  1.1  christos 	eor	w6,w7,w7,ror #32-2
   4048  1.1  christos 	eor	w6,w6,w7,ror #32-10
   4049  1.1  christos 	eor	w6,w6,w7,ror #32-18
   4050  1.1  christos 	eor	w6,w6,w7,ror #32-24
   4051  1.1  christos 	eor	w15,w15,w6
   4052  1.1  christos 	subs	w11,w11,#1
   4053  1.1  christos 	b.ne	10b
   4054  1.1  christos 	mov	v8.s[0],w15
   4055  1.1  christos 	mov	v8.s[1],w14
   4056  1.1  christos 	mov	v8.s[2],w13
   4057  1.1  christos 	mov	v8.s[3],w12
   4058  1.1  christos #ifndef __AARCH64EB__
   4059  1.1  christos 	rev32	v8.16b,v8.16b
   4060  1.1  christos #endif
   4061  1.1  christos 	mov	x3,x26
   4062  1.1  christos 	and	x29,x2,#0x0F
   4063  1.1  christos 	// convert length into blocks
   4064  1.1  christos 	lsr	x2,x2,4
   4065  1.1  christos 	cmp	x2,#1
   4066  1.1  christos 	b.lt	.return
   4067  1.1  christos 
   4068  1.1  christos 	cmp	x29,0
   4069  1.1  christos 	// If the encryption/decryption Length is N times of 16,
   4070  1.1  christos 	// the all blocks are encrypted/decrypted in .xts_encrypt_blocks
   4071  1.1  christos 	b.eq	.xts_encrypt_blocks
   4072  1.1  christos 
   4073  1.1  christos 	// If the encryption/decryption length is not N times of 16,
   4074  1.1  christos 	// the last two blocks are encrypted/decrypted in .last_2blks_tweak or .only_2blks_tweak
   4075  1.1  christos 	// the other blocks are encrypted/decrypted in .xts_encrypt_blocks
   4076  1.1  christos 	subs	x2,x2,#1
   4077  1.1  christos 	b.eq	.only_2blks_tweak
   4078  1.1  christos .xts_encrypt_blocks:
   4079  1.1  christos #ifdef __AARCH64EB__
   4080  1.1  christos 	rev32	v8.16b,v8.16b
   4081  1.1  christos #endif
   4082  1.1  christos 	mov	x12,v8.d[0]
   4083  1.1  christos 	mov	x13,v8.d[1]
   4084  1.1  christos 	mov	w7,0x87
   4085  1.1  christos 	extr	x9,x13,x13,#32
   4086  1.1  christos 	extr	x15,x13,x12,#63
   4087  1.1  christos 	and	w8,w7,w9,asr#31
   4088  1.1  christos 	eor	x14,x8,x12,lsl#1
   4089  1.1  christos 	mov	w7,0x87
   4090  1.1  christos 	extr	x9,x15,x15,#32
   4091  1.1  christos 	extr	x17,x15,x14,#63
   4092  1.1  christos 	and	w8,w7,w9,asr#31
   4093  1.1  christos 	eor	x16,x8,x14,lsl#1
   4094  1.1  christos 	mov	w7,0x87
   4095  1.1  christos 	extr	x9,x17,x17,#32
   4096  1.1  christos 	extr	x19,x17,x16,#63
   4097  1.1  christos 	and	w8,w7,w9,asr#31
   4098  1.1  christos 	eor	x18,x8,x16,lsl#1
   4099  1.1  christos 	mov	w7,0x87
   4100  1.1  christos 	extr	x9,x19,x19,#32
   4101  1.1  christos 	extr	x21,x19,x18,#63
   4102  1.1  christos 	and	w8,w7,w9,asr#31
   4103  1.1  christos 	eor	x20,x8,x18,lsl#1
   4104  1.1  christos 	mov	w7,0x87
   4105  1.1  christos 	extr	x9,x21,x21,#32
   4106  1.1  christos 	extr	x23,x21,x20,#63
   4107  1.1  christos 	and	w8,w7,w9,asr#31
   4108  1.1  christos 	eor	x22,x8,x20,lsl#1
   4109  1.1  christos 	mov	w7,0x87
   4110  1.1  christos 	extr	x9,x23,x23,#32
   4111  1.1  christos 	extr	x25,x23,x22,#63
   4112  1.1  christos 	and	w8,w7,w9,asr#31
   4113  1.1  christos 	eor	x24,x8,x22,lsl#1
   4114  1.1  christos 	mov	w7,0x87
   4115  1.1  christos 	extr	x9,x25,x25,#32
   4116  1.1  christos 	extr	x27,x25,x24,#63
   4117  1.1  christos 	and	w8,w7,w9,asr#31
   4118  1.1  christos 	eor	x26,x8,x24,lsl#1
   4119  1.1  christos .Lxts_8_blocks_process:
   4120  1.1  christos 	cmp	x2,#8
   4121  1.1  christos 	b.lt	.Lxts_4_blocks_process
   4122  1.1  christos 	mov	v0.d[0],x12
   4123  1.1  christos 	mov	v0.d[1],x13
   4124  1.1  christos #ifdef __AARCH64EB__
   4125  1.1  christos 	rev32	v0.16b,v0.16b
   4126  1.1  christos #endif
   4127  1.1  christos 	mov	v1.d[0],x14
   4128  1.1  christos 	mov	v1.d[1],x15
   4129  1.1  christos #ifdef __AARCH64EB__
   4130  1.1  christos 	rev32	v1.16b,v1.16b
   4131  1.1  christos #endif
   4132  1.1  christos 	mov	v2.d[0],x16
   4133  1.1  christos 	mov	v2.d[1],x17
   4134  1.1  christos #ifdef __AARCH64EB__
   4135  1.1  christos 	rev32	v2.16b,v2.16b
   4136  1.1  christos #endif
   4137  1.1  christos 	mov	v3.d[0],x18
   4138  1.1  christos 	mov	v3.d[1],x19
   4139  1.1  christos #ifdef __AARCH64EB__
   4140  1.1  christos 	rev32	v3.16b,v3.16b
   4141  1.1  christos #endif
   4142  1.1  christos 	mov	v12.d[0],x20
   4143  1.1  christos 	mov	v12.d[1],x21
   4144  1.1  christos #ifdef __AARCH64EB__
   4145  1.1  christos 	rev32	v12.16b,v12.16b
   4146  1.1  christos #endif
   4147  1.1  christos 	mov	v13.d[0],x22
   4148  1.1  christos 	mov	v13.d[1],x23
   4149  1.1  christos #ifdef __AARCH64EB__
   4150  1.1  christos 	rev32	v13.16b,v13.16b
   4151  1.1  christos #endif
   4152  1.1  christos 	mov	v14.d[0],x24
   4153  1.1  christos 	mov	v14.d[1],x25
   4154  1.1  christos #ifdef __AARCH64EB__
   4155  1.1  christos 	rev32	v14.16b,v14.16b
   4156  1.1  christos #endif
   4157  1.1  christos 	mov	v15.d[0],x26
   4158  1.1  christos 	mov	v15.d[1],x27
   4159  1.1  christos #ifdef __AARCH64EB__
   4160  1.1  christos 	rev32	v15.16b,v15.16b
   4161  1.1  christos #endif
   4162  1.1  christos 	ld1	{v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64
   4163  1.1  christos 	eor	v4.16b, v4.16b, v0.16b
   4164  1.1  christos 	eor	v5.16b, v5.16b, v1.16b
   4165  1.1  christos 	eor	v6.16b, v6.16b, v2.16b
   4166  1.1  christos 	eor	v7.16b, v7.16b, v3.16b
   4167  1.1  christos 	ld1	{v8.4s,v9.4s,v10.4s,v11.4s},[x0],#64
   4168  1.1  christos 	eor	v8.16b, v8.16b, v12.16b
   4169  1.1  christos 	eor	v9.16b, v9.16b, v13.16b
   4170  1.1  christos 	eor	v10.16b, v10.16b, v14.16b
   4171  1.1  christos 	eor	v11.16b, v11.16b, v15.16b
   4172  1.1  christos #ifndef __AARCH64EB__
   4173  1.1  christos 	rev32	v4.16b,v4.16b
   4174  1.1  christos #endif
   4175  1.1  christos #ifndef __AARCH64EB__
   4176  1.1  christos 	rev32	v5.16b,v5.16b
   4177  1.1  christos #endif
   4178  1.1  christos #ifndef __AARCH64EB__
   4179  1.1  christos 	rev32	v6.16b,v6.16b
   4180  1.1  christos #endif
   4181  1.1  christos #ifndef __AARCH64EB__
   4182  1.1  christos 	rev32	v7.16b,v7.16b
   4183  1.1  christos #endif
   4184  1.1  christos #ifndef __AARCH64EB__
   4185  1.1  christos 	rev32	v8.16b,v8.16b
   4186  1.1  christos #endif
   4187  1.1  christos #ifndef __AARCH64EB__
   4188  1.1  christos 	rev32	v9.16b,v9.16b
   4189  1.1  christos #endif
   4190  1.1  christos #ifndef __AARCH64EB__
   4191  1.1  christos 	rev32	v10.16b,v10.16b
   4192  1.1  christos #endif
   4193  1.1  christos #ifndef __AARCH64EB__
   4194  1.1  christos 	rev32	v11.16b,v11.16b
   4195  1.1  christos #endif
   4196  1.1  christos 	zip1	v0.4s,v4.4s,v5.4s
   4197  1.1  christos 	zip2	v1.4s,v4.4s,v5.4s
   4198  1.1  christos 	zip1	v2.4s,v6.4s,v7.4s
   4199  1.1  christos 	zip2	v3.4s,v6.4s,v7.4s
   4200  1.1  christos 	zip1	v4.2d,v0.2d,v2.2d
   4201  1.1  christos 	zip2	v5.2d,v0.2d,v2.2d
   4202  1.1  christos 	zip1	v6.2d,v1.2d,v3.2d
   4203  1.1  christos 	zip2	v7.2d,v1.2d,v3.2d
   4204  1.1  christos 	zip1	v0.4s,v8.4s,v9.4s
   4205  1.1  christos 	zip2	v1.4s,v8.4s,v9.4s
   4206  1.1  christos 	zip1	v2.4s,v10.4s,v11.4s
   4207  1.1  christos 	zip2	v3.4s,v10.4s,v11.4s
   4208  1.1  christos 	zip1	v8.2d,v0.2d,v2.2d
   4209  1.1  christos 	zip2	v9.2d,v0.2d,v2.2d
   4210  1.1  christos 	zip1	v10.2d,v1.2d,v3.2d
   4211  1.1  christos 	zip2	v11.2d,v1.2d,v3.2d
   4212  1.1  christos 	bl	_vpsm4_enc_8blks
   4213  1.1  christos 	zip1	v8.4s,v0.4s,v1.4s
   4214  1.1  christos 	zip2	v9.4s,v0.4s,v1.4s
   4215  1.1  christos 	zip1	v10.4s,v2.4s,v3.4s
   4216  1.1  christos 	zip2	v11.4s,v2.4s,v3.4s
   4217  1.1  christos 	zip1	v0.2d,v8.2d,v10.2d
   4218  1.1  christos 	zip2	v1.2d,v8.2d,v10.2d
   4219  1.1  christos 	zip1	v2.2d,v9.2d,v11.2d
   4220  1.1  christos 	zip2	v3.2d,v9.2d,v11.2d
   4221  1.1  christos 	zip1	v8.4s,v4.4s,v5.4s
   4222  1.1  christos 	zip2	v9.4s,v4.4s,v5.4s
   4223  1.1  christos 	zip1	v10.4s,v6.4s,v7.4s
   4224  1.1  christos 	zip2	v11.4s,v6.4s,v7.4s
   4225  1.1  christos 	zip1	v4.2d,v8.2d,v10.2d
   4226  1.1  christos 	zip2	v5.2d,v8.2d,v10.2d
   4227  1.1  christos 	zip1	v6.2d,v9.2d,v11.2d
   4228  1.1  christos 	zip2	v7.2d,v9.2d,v11.2d
   4229  1.1  christos 	mov	v12.d[0],x12
   4230  1.1  christos 	mov	v12.d[1],x13
   4231  1.1  christos #ifdef __AARCH64EB__
   4232  1.1  christos 	rev32	v12.16b,v12.16b
   4233  1.1  christos #endif
   4234  1.1  christos 	mov	w7,0x87
   4235  1.1  christos 	extr	x9,x27,x27,#32
   4236  1.1  christos 	extr	x13,x27,x26,#63
   4237  1.1  christos 	and	w8,w7,w9,asr#31
   4238  1.1  christos 	eor	x12,x8,x26,lsl#1
   4239  1.1  christos 	mov	v13.d[0],x14
   4240  1.1  christos 	mov	v13.d[1],x15
   4241  1.1  christos #ifdef __AARCH64EB__
   4242  1.1  christos 	rev32	v13.16b,v13.16b
   4243  1.1  christos #endif
   4244  1.1  christos 	mov	w7,0x87
   4245  1.1  christos 	extr	x9,x13,x13,#32
   4246  1.1  christos 	extr	x15,x13,x12,#63
   4247  1.1  christos 	and	w8,w7,w9,asr#31
   4248  1.1  christos 	eor	x14,x8,x12,lsl#1
   4249  1.1  christos 	mov	v14.d[0],x16
   4250  1.1  christos 	mov	v14.d[1],x17
   4251  1.1  christos #ifdef __AARCH64EB__
   4252  1.1  christos 	rev32	v14.16b,v14.16b
   4253  1.1  christos #endif
   4254  1.1  christos 	mov	w7,0x87
   4255  1.1  christos 	extr	x9,x15,x15,#32
   4256  1.1  christos 	extr	x17,x15,x14,#63
   4257  1.1  christos 	and	w8,w7,w9,asr#31
   4258  1.1  christos 	eor	x16,x8,x14,lsl#1
   4259  1.1  christos 	mov	v15.d[0],x18
   4260  1.1  christos 	mov	v15.d[1],x19
   4261  1.1  christos #ifdef __AARCH64EB__
   4262  1.1  christos 	rev32	v15.16b,v15.16b
   4263  1.1  christos #endif
   4264  1.1  christos 	mov	w7,0x87
   4265  1.1  christos 	extr	x9,x17,x17,#32
   4266  1.1  christos 	extr	x19,x17,x16,#63
   4267  1.1  christos 	and	w8,w7,w9,asr#31
   4268  1.1  christos 	eor	x18,x8,x16,lsl#1
   4269  1.1  christos 	mov	v8.d[0],x20
   4270  1.1  christos 	mov	v8.d[1],x21
   4271  1.1  christos #ifdef __AARCH64EB__
   4272  1.1  christos 	rev32	v8.16b,v8.16b
   4273  1.1  christos #endif
   4274  1.1  christos 	mov	w7,0x87
   4275  1.1  christos 	extr	x9,x19,x19,#32
   4276  1.1  christos 	extr	x21,x19,x18,#63
   4277  1.1  christos 	and	w8,w7,w9,asr#31
   4278  1.1  christos 	eor	x20,x8,x18,lsl#1
   4279  1.1  christos 	mov	v9.d[0],x22
   4280  1.1  christos 	mov	v9.d[1],x23
   4281  1.1  christos #ifdef __AARCH64EB__
   4282  1.1  christos 	rev32	v9.16b,v9.16b
   4283  1.1  christos #endif
   4284  1.1  christos 	mov	w7,0x87
   4285  1.1  christos 	extr	x9,x21,x21,#32
   4286  1.1  christos 	extr	x23,x21,x20,#63
   4287  1.1  christos 	and	w8,w7,w9,asr#31
   4288  1.1  christos 	eor	x22,x8,x20,lsl#1
   4289  1.1  christos 	mov	v10.d[0],x24
   4290  1.1  christos 	mov	v10.d[1],x25
   4291  1.1  christos #ifdef __AARCH64EB__
   4292  1.1  christos 	rev32	v10.16b,v10.16b
   4293  1.1  christos #endif
   4294  1.1  christos 	mov	w7,0x87
   4295  1.1  christos 	extr	x9,x23,x23,#32
   4296  1.1  christos 	extr	x25,x23,x22,#63
   4297  1.1  christos 	and	w8,w7,w9,asr#31
   4298  1.1  christos 	eor	x24,x8,x22,lsl#1
   4299  1.1  christos 	mov	v11.d[0],x26
   4300  1.1  christos 	mov	v11.d[1],x27
   4301  1.1  christos #ifdef __AARCH64EB__
   4302  1.1  christos 	rev32	v11.16b,v11.16b
   4303  1.1  christos #endif
   4304  1.1  christos 	mov	w7,0x87
   4305  1.1  christos 	extr	x9,x25,x25,#32
   4306  1.1  christos 	extr	x27,x25,x24,#63
   4307  1.1  christos 	and	w8,w7,w9,asr#31
   4308  1.1  christos 	eor	x26,x8,x24,lsl#1
   4309  1.1  christos 	eor	v0.16b, v0.16b, v12.16b
   4310  1.1  christos 	eor	v1.16b, v1.16b, v13.16b
   4311  1.1  christos 	eor	v2.16b, v2.16b, v14.16b
   4312  1.1  christos 	eor	v3.16b, v3.16b, v15.16b
   4313  1.1  christos 	eor	v4.16b, v4.16b, v8.16b
   4314  1.1  christos 	eor	v5.16b, v5.16b, v9.16b
   4315  1.1  christos 	eor	v6.16b, v6.16b, v10.16b
   4316  1.1  christos 	eor	v7.16b, v7.16b, v11.16b
   4317  1.1  christos 
   4318  1.1  christos 	// save the last tweak
   4319  1.1  christos 	st1	{v11.4s},[x5]
   4320  1.1  christos 	st1	{v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64
   4321  1.1  christos 	st1	{v4.4s,v5.4s,v6.4s,v7.4s},[x1],#64
   4322  1.1  christos 	subs	x2,x2,#8
   4323  1.1  christos 	b.gt	.Lxts_8_blocks_process
   4324  1.1  christos 	b	100f
   4325  1.1  christos .Lxts_4_blocks_process:
   4326  1.1  christos 	mov	v8.d[0],x12
   4327  1.1  christos 	mov	v8.d[1],x13
   4328  1.1  christos #ifdef __AARCH64EB__
   4329  1.1  christos 	rev32	v8.16b,v8.16b
   4330  1.1  christos #endif
   4331  1.1  christos 	mov	v9.d[0],x14
   4332  1.1  christos 	mov	v9.d[1],x15
   4333  1.1  christos #ifdef __AARCH64EB__
   4334  1.1  christos 	rev32	v9.16b,v9.16b
   4335  1.1  christos #endif
   4336  1.1  christos 	mov	v10.d[0],x16
   4337  1.1  christos 	mov	v10.d[1],x17
   4338  1.1  christos #ifdef __AARCH64EB__
   4339  1.1  christos 	rev32	v10.16b,v10.16b
   4340  1.1  christos #endif
   4341  1.1  christos 	mov	v11.d[0],x18
   4342  1.1  christos 	mov	v11.d[1],x19
   4343  1.1  christos #ifdef __AARCH64EB__
   4344  1.1  christos 	rev32	v11.16b,v11.16b
   4345  1.1  christos #endif
   4346  1.1  christos 	cmp	x2,#4
   4347  1.1  christos 	b.lt	1f
   4348  1.1  christos 	ld1	{v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64
   4349  1.1  christos 	eor	v4.16b, v4.16b, v8.16b
   4350  1.1  christos 	eor	v5.16b, v5.16b, v9.16b
   4351  1.1  christos 	eor	v6.16b, v6.16b, v10.16b
   4352  1.1  christos 	eor	v7.16b, v7.16b, v11.16b
   4353  1.1  christos #ifndef __AARCH64EB__
   4354  1.1  christos 	rev32	v4.16b,v4.16b
   4355  1.1  christos #endif
   4356  1.1  christos #ifndef __AARCH64EB__
   4357  1.1  christos 	rev32	v5.16b,v5.16b
   4358  1.1  christos #endif
   4359  1.1  christos #ifndef __AARCH64EB__
   4360  1.1  christos 	rev32	v6.16b,v6.16b
   4361  1.1  christos #endif
   4362  1.1  christos #ifndef __AARCH64EB__
   4363  1.1  christos 	rev32	v7.16b,v7.16b
   4364  1.1  christos #endif
   4365  1.1  christos 	zip1	v0.4s,v4.4s,v5.4s
   4366  1.1  christos 	zip2	v1.4s,v4.4s,v5.4s
   4367  1.1  christos 	zip1	v2.4s,v6.4s,v7.4s
   4368  1.1  christos 	zip2	v3.4s,v6.4s,v7.4s
   4369  1.1  christos 	zip1	v4.2d,v0.2d,v2.2d
   4370  1.1  christos 	zip2	v5.2d,v0.2d,v2.2d
   4371  1.1  christos 	zip1	v6.2d,v1.2d,v3.2d
   4372  1.1  christos 	zip2	v7.2d,v1.2d,v3.2d
   4373  1.1  christos 	bl	_vpsm4_enc_4blks
   4374  1.1  christos 	zip1	v4.4s,v0.4s,v1.4s
   4375  1.1  christos 	zip2	v5.4s,v0.4s,v1.4s
   4376  1.1  christos 	zip1	v6.4s,v2.4s,v3.4s
   4377  1.1  christos 	zip2	v7.4s,v2.4s,v3.4s
   4378  1.1  christos 	zip1	v0.2d,v4.2d,v6.2d
   4379  1.1  christos 	zip2	v1.2d,v4.2d,v6.2d
   4380  1.1  christos 	zip1	v2.2d,v5.2d,v7.2d
   4381  1.1  christos 	zip2	v3.2d,v5.2d,v7.2d
   4382  1.1  christos 	eor	v0.16b, v0.16b, v8.16b
   4383  1.1  christos 	eor	v1.16b, v1.16b, v9.16b
   4384  1.1  christos 	eor	v2.16b, v2.16b, v10.16b
   4385  1.1  christos 	eor	v3.16b, v3.16b, v11.16b
   4386  1.1  christos 	st1	{v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64
   4387  1.1  christos 	sub	x2,x2,#4
   4388  1.1  christos 	mov	v8.d[0],x20
   4389  1.1  christos 	mov	v8.d[1],x21
   4390  1.1  christos #ifdef __AARCH64EB__
   4391  1.1  christos 	rev32	v8.16b,v8.16b
   4392  1.1  christos #endif
   4393  1.1  christos 	mov	v9.d[0],x22
   4394  1.1  christos 	mov	v9.d[1],x23
   4395  1.1  christos #ifdef __AARCH64EB__
   4396  1.1  christos 	rev32	v9.16b,v9.16b
   4397  1.1  christos #endif
   4398  1.1  christos 	mov	v10.d[0],x24
   4399  1.1  christos 	mov	v10.d[1],x25
   4400  1.1  christos #ifdef __AARCH64EB__
   4401  1.1  christos 	rev32	v10.16b,v10.16b
   4402  1.1  christos #endif
   4403  1.1  christos 	// save the last tweak
   4404  1.1  christos 	st1	{v11.4s},[x5]
   4405  1.1  christos 1:
   4406  1.1  christos 	// process last block
   4407  1.1  christos 	cmp	x2,#1
   4408  1.1  christos 	b.lt	100f
   4409  1.1  christos 	b.gt	1f
   4410  1.1  christos 	ld1	{v4.4s},[x0],#16
   4411  1.1  christos 	eor	v4.16b, v4.16b, v8.16b
   4412  1.1  christos #ifndef __AARCH64EB__
   4413  1.1  christos 	rev32	v4.16b,v4.16b
   4414  1.1  christos #endif
   4415  1.1  christos 	mov	x10,x3
   4416  1.1  christos 	mov	w11,#8
   4417  1.1  christos 	mov	w12,v4.s[0]
   4418  1.1  christos 	mov	w13,v4.s[1]
   4419  1.1  christos 	mov	w14,v4.s[2]
   4420  1.1  christos 	mov	w15,v4.s[3]
   4421  1.1  christos 10:
   4422  1.1  christos 	ldp	w7,w8,[x10],8
   4423  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   4424  1.1  christos 	eor	w6,w14,w15
   4425  1.1  christos 	eor	w9,w7,w13
   4426  1.1  christos 	eor	w6,w6,w9
   4427  1.1  christos 	movi	v1.16b,#64
   4428  1.1  christos 	movi	v2.16b,#128
   4429  1.1  christos 	movi	v3.16b,#192
   4430  1.1  christos 	mov	v0.s[0],w6
   4431  1.1  christos 
   4432  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   4433  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   4434  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   4435  1.1  christos 
   4436  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   4437  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   4438  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   4439  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   4440  1.1  christos 
   4441  1.1  christos 	mov	w6,v0.s[0]
   4442  1.1  christos 	mov	w7,v1.s[0]
   4443  1.1  christos 	mov	w9,v2.s[0]
   4444  1.1  christos 	add	w7,w6,w7
   4445  1.1  christos 	mov	w6,v3.s[0]
   4446  1.1  christos 	add	w7,w7,w9
   4447  1.1  christos 	add	w7,w7,w6
   4448  1.1  christos 
   4449  1.1  christos 	eor	w6,w7,w7,ror #32-2
   4450  1.1  christos 	eor	w6,w6,w7,ror #32-10
   4451  1.1  christos 	eor	w6,w6,w7,ror #32-18
   4452  1.1  christos 	eor	w6,w6,w7,ror #32-24
   4453  1.1  christos 	eor	w12,w12,w6
   4454  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   4455  1.1  christos 	eor	w6,w14,w15
   4456  1.1  christos 	eor	w9,w12,w8
   4457  1.1  christos 	eor	w6,w6,w9
   4458  1.1  christos 	movi	v1.16b,#64
   4459  1.1  christos 	movi	v2.16b,#128
   4460  1.1  christos 	movi	v3.16b,#192
   4461  1.1  christos 	mov	v0.s[0],w6
   4462  1.1  christos 
   4463  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   4464  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   4465  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   4466  1.1  christos 
   4467  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   4468  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   4469  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   4470  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   4471  1.1  christos 
   4472  1.1  christos 	mov	w6,v0.s[0]
   4473  1.1  christos 	mov	w7,v1.s[0]
   4474  1.1  christos 	mov	w9,v2.s[0]
   4475  1.1  christos 	add	w7,w6,w7
   4476  1.1  christos 	mov	w6,v3.s[0]
   4477  1.1  christos 	add	w7,w7,w9
   4478  1.1  christos 	add	w7,w7,w6
   4479  1.1  christos 
   4480  1.1  christos 	eor	w6,w7,w7,ror #32-2
   4481  1.1  christos 	eor	w6,w6,w7,ror #32-10
   4482  1.1  christos 	eor	w6,w6,w7,ror #32-18
   4483  1.1  christos 	eor	w6,w6,w7,ror #32-24
   4484  1.1  christos 	ldp	w7,w8,[x10],8
   4485  1.1  christos 	eor	w13,w13,w6
   4486  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   4487  1.1  christos 	eor	w6,w12,w13
   4488  1.1  christos 	eor	w9,w7,w15
   4489  1.1  christos 	eor	w6,w6,w9
   4490  1.1  christos 	movi	v1.16b,#64
   4491  1.1  christos 	movi	v2.16b,#128
   4492  1.1  christos 	movi	v3.16b,#192
   4493  1.1  christos 	mov	v0.s[0],w6
   4494  1.1  christos 
   4495  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   4496  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   4497  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   4498  1.1  christos 
   4499  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   4500  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   4501  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   4502  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   4503  1.1  christos 
   4504  1.1  christos 	mov	w6,v0.s[0]
   4505  1.1  christos 	mov	w7,v1.s[0]
   4506  1.1  christos 	mov	w9,v2.s[0]
   4507  1.1  christos 	add	w7,w6,w7
   4508  1.1  christos 	mov	w6,v3.s[0]
   4509  1.1  christos 	add	w7,w7,w9
   4510  1.1  christos 	add	w7,w7,w6
   4511  1.1  christos 
   4512  1.1  christos 	eor	w6,w7,w7,ror #32-2
   4513  1.1  christos 	eor	w6,w6,w7,ror #32-10
   4514  1.1  christos 	eor	w6,w6,w7,ror #32-18
   4515  1.1  christos 	eor	w6,w6,w7,ror #32-24
   4516  1.1  christos 	eor	w14,w14,w6
   4517  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   4518  1.1  christos 	eor	w6,w12,w13
   4519  1.1  christos 	eor	w9,w14,w8
   4520  1.1  christos 	eor	w6,w6,w9
   4521  1.1  christos 	movi	v1.16b,#64
   4522  1.1  christos 	movi	v2.16b,#128
   4523  1.1  christos 	movi	v3.16b,#192
   4524  1.1  christos 	mov	v0.s[0],w6
   4525  1.1  christos 
   4526  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   4527  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   4528  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   4529  1.1  christos 
   4530  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   4531  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   4532  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   4533  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   4534  1.1  christos 
   4535  1.1  christos 	mov	w6,v0.s[0]
   4536  1.1  christos 	mov	w7,v1.s[0]
   4537  1.1  christos 	mov	w9,v2.s[0]
   4538  1.1  christos 	add	w7,w6,w7
   4539  1.1  christos 	mov	w6,v3.s[0]
   4540  1.1  christos 	add	w7,w7,w9
   4541  1.1  christos 	add	w7,w7,w6
   4542  1.1  christos 
   4543  1.1  christos 	eor	w6,w7,w7,ror #32-2
   4544  1.1  christos 	eor	w6,w6,w7,ror #32-10
   4545  1.1  christos 	eor	w6,w6,w7,ror #32-18
   4546  1.1  christos 	eor	w6,w6,w7,ror #32-24
   4547  1.1  christos 	eor	w15,w15,w6
   4548  1.1  christos 	subs	w11,w11,#1
   4549  1.1  christos 	b.ne	10b
   4550  1.1  christos 	mov	v4.s[0],w15
   4551  1.1  christos 	mov	v4.s[1],w14
   4552  1.1  christos 	mov	v4.s[2],w13
   4553  1.1  christos 	mov	v4.s[3],w12
   4554  1.1  christos #ifndef __AARCH64EB__
   4555  1.1  christos 	rev32	v4.16b,v4.16b
   4556  1.1  christos #endif
   4557  1.1  christos 	eor	v4.16b, v4.16b, v8.16b
   4558  1.1  christos 	st1	{v4.4s},[x1],#16
   4559  1.1  christos 	// save the last tweak
   4560  1.1  christos 	st1	{v8.4s},[x5]
   4561  1.1  christos 	b	100f
   4562  1.1  christos 1:	//	process last 2 blocks
   4563  1.1  christos 	cmp	x2,#2
   4564  1.1  christos 	b.gt	1f
   4565  1.1  christos 	ld1	{v4.4s,v5.4s},[x0],#32
   4566  1.1  christos 	eor	v4.16b, v4.16b, v8.16b
   4567  1.1  christos 	eor	v5.16b, v5.16b, v9.16b
   4568  1.1  christos #ifndef __AARCH64EB__
   4569  1.1  christos 	rev32	v4.16b,v4.16b
   4570  1.1  christos #endif
   4571  1.1  christos #ifndef __AARCH64EB__
   4572  1.1  christos 	rev32	v5.16b,v5.16b
   4573  1.1  christos #endif
   4574  1.1  christos 	zip1	v0.4s,v4.4s,v5.4s
   4575  1.1  christos 	zip2	v1.4s,v4.4s,v5.4s
   4576  1.1  christos 	zip1	v2.4s,v6.4s,v7.4s
   4577  1.1  christos 	zip2	v3.4s,v6.4s,v7.4s
   4578  1.1  christos 	zip1	v4.2d,v0.2d,v2.2d
   4579  1.1  christos 	zip2	v5.2d,v0.2d,v2.2d
   4580  1.1  christos 	zip1	v6.2d,v1.2d,v3.2d
   4581  1.1  christos 	zip2	v7.2d,v1.2d,v3.2d
   4582  1.1  christos 	bl	_vpsm4_enc_4blks
   4583  1.1  christos 	zip1	v4.4s,v0.4s,v1.4s
   4584  1.1  christos 	zip2	v5.4s,v0.4s,v1.4s
   4585  1.1  christos 	zip1	v6.4s,v2.4s,v3.4s
   4586  1.1  christos 	zip2	v7.4s,v2.4s,v3.4s
   4587  1.1  christos 	zip1	v0.2d,v4.2d,v6.2d
   4588  1.1  christos 	zip2	v1.2d,v4.2d,v6.2d
   4589  1.1  christos 	zip1	v2.2d,v5.2d,v7.2d
   4590  1.1  christos 	zip2	v3.2d,v5.2d,v7.2d
   4591  1.1  christos 	eor	v0.16b, v0.16b, v8.16b
   4592  1.1  christos 	eor	v1.16b, v1.16b, v9.16b
   4593  1.1  christos 	st1	{v0.4s,v1.4s},[x1],#32
   4594  1.1  christos 	// save the last tweak
   4595  1.1  christos 	st1	{v9.4s},[x5]
   4596  1.1  christos 	b	100f
   4597  1.1  christos 1:	//	process last 3 blocks
   4598  1.1  christos 	ld1	{v4.4s,v5.4s,v6.4s},[x0],#48
   4599  1.1  christos 	eor	v4.16b, v4.16b, v8.16b
   4600  1.1  christos 	eor	v5.16b, v5.16b, v9.16b
   4601  1.1  christos 	eor	v6.16b, v6.16b, v10.16b
   4602  1.1  christos #ifndef __AARCH64EB__
   4603  1.1  christos 	rev32	v4.16b,v4.16b
   4604  1.1  christos #endif
   4605  1.1  christos #ifndef __AARCH64EB__
   4606  1.1  christos 	rev32	v5.16b,v5.16b
   4607  1.1  christos #endif
   4608  1.1  christos #ifndef __AARCH64EB__
   4609  1.1  christos 	rev32	v6.16b,v6.16b
   4610  1.1  christos #endif
   4611  1.1  christos 	zip1	v0.4s,v4.4s,v5.4s
   4612  1.1  christos 	zip2	v1.4s,v4.4s,v5.4s
   4613  1.1  christos 	zip1	v2.4s,v6.4s,v7.4s
   4614  1.1  christos 	zip2	v3.4s,v6.4s,v7.4s
   4615  1.1  christos 	zip1	v4.2d,v0.2d,v2.2d
   4616  1.1  christos 	zip2	v5.2d,v0.2d,v2.2d
   4617  1.1  christos 	zip1	v6.2d,v1.2d,v3.2d
   4618  1.1  christos 	zip2	v7.2d,v1.2d,v3.2d
   4619  1.1  christos 	bl	_vpsm4_enc_4blks
   4620  1.1  christos 	zip1	v4.4s,v0.4s,v1.4s
   4621  1.1  christos 	zip2	v5.4s,v0.4s,v1.4s
   4622  1.1  christos 	zip1	v6.4s,v2.4s,v3.4s
   4623  1.1  christos 	zip2	v7.4s,v2.4s,v3.4s
   4624  1.1  christos 	zip1	v0.2d,v4.2d,v6.2d
   4625  1.1  christos 	zip2	v1.2d,v4.2d,v6.2d
   4626  1.1  christos 	zip1	v2.2d,v5.2d,v7.2d
   4627  1.1  christos 	zip2	v3.2d,v5.2d,v7.2d
   4628  1.1  christos 	eor	v0.16b, v0.16b, v8.16b
   4629  1.1  christos 	eor	v1.16b, v1.16b, v9.16b
   4630  1.1  christos 	eor	v2.16b, v2.16b, v10.16b
   4631  1.1  christos 	st1	{v0.4s,v1.4s,v2.4s},[x1],#48
   4632  1.1  christos 	// save the last tweak
   4633  1.1  christos 	st1	{v10.4s},[x5]
   4634  1.1  christos 100:
   4635  1.1  christos 	cmp	x29,0
   4636  1.1  christos 	b.eq	.return
   4637  1.1  christos 
   4638  1.1  christos // This branch calculates the last two tweaks,
   4639  1.1  christos // while the encryption/decryption length is larger than 32
   4640  1.1  christos .last_2blks_tweak:
   4641  1.1  christos 	ld1	{v8.4s},[x5]
   4642  1.1  christos #ifdef __AARCH64EB__
   4643  1.1  christos 	rev32	v8.16b,v8.16b
   4644  1.1  christos #endif
   4645  1.1  christos 	mov	v2.16b,v8.16b
   4646  1.1  christos 	adrp	x10,.Lxts_magic
   4647  1.1  christos 	ldr	q0, [x10, #:lo12:.Lxts_magic]
   4648  1.1  christos 	shl	v9.16b, v2.16b, #1
   4649  1.1  christos 	ext	v1.16b, v2.16b, v2.16b,#15
   4650  1.1  christos 	ushr	v1.16b, v1.16b, #7
   4651  1.1  christos 	mul	v1.16b, v1.16b, v0.16b
   4652  1.1  christos 	eor	v9.16b, v9.16b, v1.16b
   4653  1.1  christos 	mov	v2.16b,v9.16b
   4654  1.1  christos 	adrp	x10,.Lxts_magic
   4655  1.1  christos 	ldr	q0, [x10, #:lo12:.Lxts_magic]
   4656  1.1  christos 	shl	v10.16b, v2.16b, #1
   4657  1.1  christos 	ext	v1.16b, v2.16b, v2.16b,#15
   4658  1.1  christos 	ushr	v1.16b, v1.16b, #7
   4659  1.1  christos 	mul	v1.16b, v1.16b, v0.16b
   4660  1.1  christos 	eor	v10.16b, v10.16b, v1.16b
   4661  1.1  christos 	b	.check_dec
   4662  1.1  christos 
   4663  1.1  christos 
   4664  1.1  christos // This branch calculates the last two tweaks,
   4665  1.1  christos // while the encryption/decryption length is equal to 32, who only need two tweaks
   4666  1.1  christos .only_2blks_tweak:
   4667  1.1  christos 	mov	v9.16b,v8.16b
   4668  1.1  christos #ifdef __AARCH64EB__
   4669  1.1  christos 	rev32	v9.16b,v9.16b
   4670  1.1  christos #endif
   4671  1.1  christos 	mov	v2.16b,v9.16b
   4672  1.1  christos 	adrp	x10,.Lxts_magic
   4673  1.1  christos 	ldr	q0, [x10, #:lo12:.Lxts_magic]
   4674  1.1  christos 	shl	v10.16b, v2.16b, #1
   4675  1.1  christos 	ext	v1.16b, v2.16b, v2.16b,#15
   4676  1.1  christos 	ushr	v1.16b, v1.16b, #7
   4677  1.1  christos 	mul	v1.16b, v1.16b, v0.16b
   4678  1.1  christos 	eor	v10.16b, v10.16b, v1.16b
   4679  1.1  christos 	b	.check_dec
   4680  1.1  christos 
   4681  1.1  christos 
   4682  1.1  christos // Determine whether encryption or decryption is required.
   4683  1.1  christos // The last two tweaks need to be swapped for decryption.
   4684  1.1  christos .check_dec:
   4685  1.1  christos 	// encryption:1 decryption:0
   4686  1.1  christos 	cmp	w28,1
   4687  1.1  christos 	b.eq	.process_last_2blks
   4688  1.1  christos 	mov	v0.16B,v9.16b
   4689  1.1  christos 	mov	v9.16B,v10.16b
   4690  1.1  christos 	mov	v10.16B,v0.16b
   4691  1.1  christos 
   4692  1.1  christos .process_last_2blks:
   4693  1.1  christos #ifdef __AARCH64EB__
   4694  1.1  christos 	rev32	v9.16b,v9.16b
   4695  1.1  christos #endif
   4696  1.1  christos #ifdef __AARCH64EB__
   4697  1.1  christos 	rev32	v10.16b,v10.16b
   4698  1.1  christos #endif
   4699  1.1  christos 	ld1	{v4.4s},[x0],#16
   4700  1.1  christos 	eor	v4.16b, v4.16b, v9.16b
   4701  1.1  christos #ifndef __AARCH64EB__
   4702  1.1  christos 	rev32	v4.16b,v4.16b
   4703  1.1  christos #endif
   4704  1.1  christos 	mov	x10,x3
   4705  1.1  christos 	mov	w11,#8
   4706  1.1  christos 	mov	w12,v4.s[0]
   4707  1.1  christos 	mov	w13,v4.s[1]
   4708  1.1  christos 	mov	w14,v4.s[2]
   4709  1.1  christos 	mov	w15,v4.s[3]
   4710  1.1  christos 10:
   4711  1.1  christos 	ldp	w7,w8,[x10],8
   4712  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   4713  1.1  christos 	eor	w6,w14,w15
   4714  1.1  christos 	eor	w9,w7,w13
   4715  1.1  christos 	eor	w6,w6,w9
   4716  1.1  christos 	movi	v1.16b,#64
   4717  1.1  christos 	movi	v2.16b,#128
   4718  1.1  christos 	movi	v3.16b,#192
   4719  1.1  christos 	mov	v0.s[0],w6
   4720  1.1  christos 
   4721  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   4722  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   4723  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   4724  1.1  christos 
   4725  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   4726  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   4727  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   4728  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   4729  1.1  christos 
   4730  1.1  christos 	mov	w6,v0.s[0]
   4731  1.1  christos 	mov	w7,v1.s[0]
   4732  1.1  christos 	mov	w9,v2.s[0]
   4733  1.1  christos 	add	w7,w6,w7
   4734  1.1  christos 	mov	w6,v3.s[0]
   4735  1.1  christos 	add	w7,w7,w9
   4736  1.1  christos 	add	w7,w7,w6
   4737  1.1  christos 
   4738  1.1  christos 	eor	w6,w7,w7,ror #32-2
   4739  1.1  christos 	eor	w6,w6,w7,ror #32-10
   4740  1.1  christos 	eor	w6,w6,w7,ror #32-18
   4741  1.1  christos 	eor	w6,w6,w7,ror #32-24
   4742  1.1  christos 	eor	w12,w12,w6
   4743  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   4744  1.1  christos 	eor	w6,w14,w15
   4745  1.1  christos 	eor	w9,w12,w8
   4746  1.1  christos 	eor	w6,w6,w9
   4747  1.1  christos 	movi	v1.16b,#64
   4748  1.1  christos 	movi	v2.16b,#128
   4749  1.1  christos 	movi	v3.16b,#192
   4750  1.1  christos 	mov	v0.s[0],w6
   4751  1.1  christos 
   4752  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   4753  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   4754  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   4755  1.1  christos 
   4756  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   4757  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   4758  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   4759  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   4760  1.1  christos 
   4761  1.1  christos 	mov	w6,v0.s[0]
   4762  1.1  christos 	mov	w7,v1.s[0]
   4763  1.1  christos 	mov	w9,v2.s[0]
   4764  1.1  christos 	add	w7,w6,w7
   4765  1.1  christos 	mov	w6,v3.s[0]
   4766  1.1  christos 	add	w7,w7,w9
   4767  1.1  christos 	add	w7,w7,w6
   4768  1.1  christos 
   4769  1.1  christos 	eor	w6,w7,w7,ror #32-2
   4770  1.1  christos 	eor	w6,w6,w7,ror #32-10
   4771  1.1  christos 	eor	w6,w6,w7,ror #32-18
   4772  1.1  christos 	eor	w6,w6,w7,ror #32-24
   4773  1.1  christos 	ldp	w7,w8,[x10],8
   4774  1.1  christos 	eor	w13,w13,w6
   4775  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   4776  1.1  christos 	eor	w6,w12,w13
   4777  1.1  christos 	eor	w9,w7,w15
   4778  1.1  christos 	eor	w6,w6,w9
   4779  1.1  christos 	movi	v1.16b,#64
   4780  1.1  christos 	movi	v2.16b,#128
   4781  1.1  christos 	movi	v3.16b,#192
   4782  1.1  christos 	mov	v0.s[0],w6
   4783  1.1  christos 
   4784  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   4785  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   4786  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   4787  1.1  christos 
   4788  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   4789  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   4790  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   4791  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   4792  1.1  christos 
   4793  1.1  christos 	mov	w6,v0.s[0]
   4794  1.1  christos 	mov	w7,v1.s[0]
   4795  1.1  christos 	mov	w9,v2.s[0]
   4796  1.1  christos 	add	w7,w6,w7
   4797  1.1  christos 	mov	w6,v3.s[0]
   4798  1.1  christos 	add	w7,w7,w9
   4799  1.1  christos 	add	w7,w7,w6
   4800  1.1  christos 
   4801  1.1  christos 	eor	w6,w7,w7,ror #32-2
   4802  1.1  christos 	eor	w6,w6,w7,ror #32-10
   4803  1.1  christos 	eor	w6,w6,w7,ror #32-18
   4804  1.1  christos 	eor	w6,w6,w7,ror #32-24
   4805  1.1  christos 	eor	w14,w14,w6
   4806  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   4807  1.1  christos 	eor	w6,w12,w13
   4808  1.1  christos 	eor	w9,w14,w8
   4809  1.1  christos 	eor	w6,w6,w9
   4810  1.1  christos 	movi	v1.16b,#64
   4811  1.1  christos 	movi	v2.16b,#128
   4812  1.1  christos 	movi	v3.16b,#192
   4813  1.1  christos 	mov	v0.s[0],w6
   4814  1.1  christos 
   4815  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   4816  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   4817  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   4818  1.1  christos 
   4819  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   4820  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   4821  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   4822  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   4823  1.1  christos 
   4824  1.1  christos 	mov	w6,v0.s[0]
   4825  1.1  christos 	mov	w7,v1.s[0]
   4826  1.1  christos 	mov	w9,v2.s[0]
   4827  1.1  christos 	add	w7,w6,w7
   4828  1.1  christos 	mov	w6,v3.s[0]
   4829  1.1  christos 	add	w7,w7,w9
   4830  1.1  christos 	add	w7,w7,w6
   4831  1.1  christos 
   4832  1.1  christos 	eor	w6,w7,w7,ror #32-2
   4833  1.1  christos 	eor	w6,w6,w7,ror #32-10
   4834  1.1  christos 	eor	w6,w6,w7,ror #32-18
   4835  1.1  christos 	eor	w6,w6,w7,ror #32-24
   4836  1.1  christos 	eor	w15,w15,w6
   4837  1.1  christos 	subs	w11,w11,#1
   4838  1.1  christos 	b.ne	10b
   4839  1.1  christos 	mov	v4.s[0],w15
   4840  1.1  christos 	mov	v4.s[1],w14
   4841  1.1  christos 	mov	v4.s[2],w13
   4842  1.1  christos 	mov	v4.s[3],w12
   4843  1.1  christos #ifndef __AARCH64EB__
   4844  1.1  christos 	rev32	v4.16b,v4.16b
   4845  1.1  christos #endif
   4846  1.1  christos 	eor	v4.16b, v4.16b, v9.16b
   4847  1.1  christos 	st1	{v4.4s},[x1],#16
   4848  1.1  christos 
   4849  1.1  christos 	sub	x26,x1,16
   4850  1.1  christos .loop:
   4851  1.1  christos 	subs	x29,x29,1
   4852  1.1  christos 	ldrb	w7,[x26,x29]
   4853  1.1  christos 	ldrb	w8,[x0,x29]
   4854  1.1  christos 	strb	w8,[x26,x29]
   4855  1.1  christos 	strb	w7,[x1,x29]
   4856  1.1  christos 	b.gt	.loop
   4857  1.1  christos 	ld1	{v4.4s}, [x26]
   4858  1.1  christos 	eor	v4.16b, v4.16b, v10.16b
   4859  1.1  christos #ifndef __AARCH64EB__
   4860  1.1  christos 	rev32	v4.16b,v4.16b
   4861  1.1  christos #endif
   4862  1.1  christos 	mov	x10,x3
   4863  1.1  christos 	mov	w11,#8
   4864  1.1  christos 	mov	w12,v4.s[0]
   4865  1.1  christos 	mov	w13,v4.s[1]
   4866  1.1  christos 	mov	w14,v4.s[2]
   4867  1.1  christos 	mov	w15,v4.s[3]
   4868  1.1  christos 10:
   4869  1.1  christos 	ldp	w7,w8,[x10],8
   4870  1.1  christos 	// B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0)
   4871  1.1  christos 	eor	w6,w14,w15
   4872  1.1  christos 	eor	w9,w7,w13
   4873  1.1  christos 	eor	w6,w6,w9
   4874  1.1  christos 	movi	v1.16b,#64
   4875  1.1  christos 	movi	v2.16b,#128
   4876  1.1  christos 	movi	v3.16b,#192
   4877  1.1  christos 	mov	v0.s[0],w6
   4878  1.1  christos 
   4879  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   4880  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   4881  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   4882  1.1  christos 
   4883  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   4884  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   4885  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   4886  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   4887  1.1  christos 
   4888  1.1  christos 	mov	w6,v0.s[0]
   4889  1.1  christos 	mov	w7,v1.s[0]
   4890  1.1  christos 	mov	w9,v2.s[0]
   4891  1.1  christos 	add	w7,w6,w7
   4892  1.1  christos 	mov	w6,v3.s[0]
   4893  1.1  christos 	add	w7,w7,w9
   4894  1.1  christos 	add	w7,w7,w6
   4895  1.1  christos 
   4896  1.1  christos 	eor	w6,w7,w7,ror #32-2
   4897  1.1  christos 	eor	w6,w6,w7,ror #32-10
   4898  1.1  christos 	eor	w6,w6,w7,ror #32-18
   4899  1.1  christos 	eor	w6,w6,w7,ror #32-24
   4900  1.1  christos 	eor	w12,w12,w6
   4901  1.1  christos 	// B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1)
   4902  1.1  christos 	eor	w6,w14,w15
   4903  1.1  christos 	eor	w9,w12,w8
   4904  1.1  christos 	eor	w6,w6,w9
   4905  1.1  christos 	movi	v1.16b,#64
   4906  1.1  christos 	movi	v2.16b,#128
   4907  1.1  christos 	movi	v3.16b,#192
   4908  1.1  christos 	mov	v0.s[0],w6
   4909  1.1  christos 
   4910  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   4911  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   4912  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   4913  1.1  christos 
   4914  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   4915  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   4916  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   4917  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   4918  1.1  christos 
   4919  1.1  christos 	mov	w6,v0.s[0]
   4920  1.1  christos 	mov	w7,v1.s[0]
   4921  1.1  christos 	mov	w9,v2.s[0]
   4922  1.1  christos 	add	w7,w6,w7
   4923  1.1  christos 	mov	w6,v3.s[0]
   4924  1.1  christos 	add	w7,w7,w9
   4925  1.1  christos 	add	w7,w7,w6
   4926  1.1  christos 
   4927  1.1  christos 	eor	w6,w7,w7,ror #32-2
   4928  1.1  christos 	eor	w6,w6,w7,ror #32-10
   4929  1.1  christos 	eor	w6,w6,w7,ror #32-18
   4930  1.1  christos 	eor	w6,w6,w7,ror #32-24
   4931  1.1  christos 	ldp	w7,w8,[x10],8
   4932  1.1  christos 	eor	w13,w13,w6
   4933  1.1  christos 	// B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2)
   4934  1.1  christos 	eor	w6,w12,w13
   4935  1.1  christos 	eor	w9,w7,w15
   4936  1.1  christos 	eor	w6,w6,w9
   4937  1.1  christos 	movi	v1.16b,#64
   4938  1.1  christos 	movi	v2.16b,#128
   4939  1.1  christos 	movi	v3.16b,#192
   4940  1.1  christos 	mov	v0.s[0],w6
   4941  1.1  christos 
   4942  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   4943  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   4944  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   4945  1.1  christos 
   4946  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   4947  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   4948  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   4949  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   4950  1.1  christos 
   4951  1.1  christos 	mov	w6,v0.s[0]
   4952  1.1  christos 	mov	w7,v1.s[0]
   4953  1.1  christos 	mov	w9,v2.s[0]
   4954  1.1  christos 	add	w7,w6,w7
   4955  1.1  christos 	mov	w6,v3.s[0]
   4956  1.1  christos 	add	w7,w7,w9
   4957  1.1  christos 	add	w7,w7,w6
   4958  1.1  christos 
   4959  1.1  christos 	eor	w6,w7,w7,ror #32-2
   4960  1.1  christos 	eor	w6,w6,w7,ror #32-10
   4961  1.1  christos 	eor	w6,w6,w7,ror #32-18
   4962  1.1  christos 	eor	w6,w6,w7,ror #32-24
   4963  1.1  christos 	eor	w14,w14,w6
   4964  1.1  christos 	// B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3)
   4965  1.1  christos 	eor	w6,w12,w13
   4966  1.1  christos 	eor	w9,w14,w8
   4967  1.1  christos 	eor	w6,w6,w9
   4968  1.1  christos 	movi	v1.16b,#64
   4969  1.1  christos 	movi	v2.16b,#128
   4970  1.1  christos 	movi	v3.16b,#192
   4971  1.1  christos 	mov	v0.s[0],w6
   4972  1.1  christos 
   4973  1.1  christos 	sub	v1.16b,v0.16b,v1.16b
   4974  1.1  christos 	sub	v2.16b,v0.16b,v2.16b
   4975  1.1  christos 	sub	v3.16b,v0.16b,v3.16b
   4976  1.1  christos 
   4977  1.1  christos 	tbl	v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b
   4978  1.1  christos 	tbl	v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b
   4979  1.1  christos 	tbl	v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b
   4980  1.1  christos 	tbl	v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b
   4981  1.1  christos 
   4982  1.1  christos 	mov	w6,v0.s[0]
   4983  1.1  christos 	mov	w7,v1.s[0]
   4984  1.1  christos 	mov	w9,v2.s[0]
   4985  1.1  christos 	add	w7,w6,w7
   4986  1.1  christos 	mov	w6,v3.s[0]
   4987  1.1  christos 	add	w7,w7,w9
   4988  1.1  christos 	add	w7,w7,w6
   4989  1.1  christos 
   4990  1.1  christos 	eor	w6,w7,w7,ror #32-2
   4991  1.1  christos 	eor	w6,w6,w7,ror #32-10
   4992  1.1  christos 	eor	w6,w6,w7,ror #32-18
   4993  1.1  christos 	eor	w6,w6,w7,ror #32-24
   4994  1.1  christos 	eor	w15,w15,w6
   4995  1.1  christos 	subs	w11,w11,#1
   4996  1.1  christos 	b.ne	10b
   4997  1.1  christos 	mov	v4.s[0],w15
   4998  1.1  christos 	mov	v4.s[1],w14
   4999  1.1  christos 	mov	v4.s[2],w13
   5000  1.1  christos 	mov	v4.s[3],w12
   5001  1.1  christos #ifndef __AARCH64EB__
   5002  1.1  christos 	rev32	v4.16b,v4.16b
   5003  1.1  christos #endif
   5004  1.1  christos 	eor	v4.16b, v4.16b, v10.16b
   5005  1.1  christos 	st1	{v4.4s}, [x26]
   5006  1.1  christos .return:
   5007  1.1  christos 	ldp	d14, d15, [sp], #0x10
   5008  1.1  christos 	ldp	d12, d13, [sp], #0x10
   5009  1.1  christos 	ldp	d10, d11, [sp], #0x10
   5010  1.1  christos 	ldp	d8, d9, [sp], #0x10
   5011  1.1  christos 	ldp	x29, x30, [sp], #0x10
   5012  1.1  christos 	ldp	x27, x28, [sp], #0x10
   5013  1.1  christos 	ldp	x25, x26, [sp], #0x10
   5014  1.1  christos 	ldp	x23, x24, [sp], #0x10
   5015  1.1  christos 	ldp	x21, x22, [sp], #0x10
   5016  1.1  christos 	ldp	x19, x20, [sp], #0x10
   5017  1.1  christos 	ldp	x17, x18, [sp], #0x10
   5018  1.1  christos 	ldp	x15, x16, [sp], #0x10
   5019  1.1  christos 	AARCH64_VALIDATE_LINK_REGISTER
   5020  1.1  christos 	ret
   5021  1.1  christos .size	vpsm4_xts_encrypt,.-vpsm4_xts_encrypt
   5022