Source code
Revision control
Copy as Markdown
Other Tools
// Copyright (c) 2022, ARM Inc.
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
// Author: Hanno Becker <hannobecker@posteo.de>
// This file was derived from the assembly generated from aesv8-gcm-armv8.pl,
// written by Fangming Fang <fangming.fang@arm.com> for the OpenSSL project,
// and derived from https: // github.com/ARM-software/AArch64cryptolib, original
// author Samuel Lee <Samuel.Lee@arm.com>.
// The code below is a 'clean' AArch64 implementation of AES-GCM emphasizing
// the logic of the computation. It is meant as the input to manual audits /
// formal verification, as well as automated micro-optimization such as done
// by the SLOTHY superoptimizer (https: // github.com/slothy-optimizer/slothy).
#if !defined(__has_feature)
#define __has_feature(x) 0
#endif
#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
#define OPENSSL_NO_ASM
#endif
#include "aarch64-gcm-asm-compat.h"
#if !defined(OPENSSL_NO_ASM) && defined(__AARCH64EL__)
#if defined(__ELF__)
.arch armv8-a+crypto
.text
.globl aes_gcm_enc_kernel_slothy_base_256
.hidden aes_gcm_enc_kernel_slothy_base_256
.type aes_gcm_enc_kernel_slothy_base_256,%function
#elif defined(__APPLE__)
.text
.globl _aes_gcm_enc_kernel_slothy_base_256
.private_extern _aes_gcm_enc_kernel_slothy_base_256
#else
#error Unknown configuration
#endif
#if __ARM_MAX_ARCH__ >= 8
// Arguments
input .req x0
len_bits .req x1
output .req x2
tag_ptr .req x3
ivec .req x4
key .req x5
Htable .req x6
byte_len .req x15
constant_temp .req x25
count .req x1
full_blocks .req x7
remainder .req x16
unroll .req x10
ctr_tmp .req x14
ctr_tmp_w .req w14
ivec_0_63 .req x11
ivec_64_96 .req x12
ivec_64_96_w .req w12
ctr .req w13
ctr_x .req x13
aes_st .req v0
aes_st_q .req q0
aes_st_d .req d0
res .req v0
res_q .req q0
ghash_hi .req v9
ghash_lo .req v8
ghash_mid .req v10
ghash_mid_d .req d10
ghash_tmp .req v11
ghash_tmp_d .req d11
ghash_mod .req v7
ghash_mod_d .req d7
modulo_tmp0 .req v0
modulo_tmp1 .req v1
Ht1q .req q12
Ht2q .req q13
Ht12q .req q14
Ht1 .req v12
Ht2 .req v13
Ht12 .req v14
Ht3q .req q12
Ht4q .req q13
Ht34q .req q14
Ht3 .req v12
Ht4 .req v13
Ht34 .req v14
rk0q .req q18
rk1q .req q19
rk2q .req q20
rk3q .req q21
rk4q .req q22
rk5q .req q23
rk6q .req q24
rk7q .req q25
rk8q .req q26
rk9q .req q27
rk10q .req q28
rk11q .req q15
rk12q .req q16
rk13q .req q17
rk14_lo .req x20
rk14_hi .req x21
rk0 .req v18
rk1 .req v19
rk2 .req v20
rk3 .req v21
rk4 .req v22
rk5 .req v23
rk6 .req v24
rk7 .req v25
rk8 .req v26
rk9 .req v27
rk10 .req v28
rk11 .req v15
rk12 .req v16
rk13 .req v17
plain .req v29
plain_q .req q29
plain_lo .req x22
plain_hi .req x23
tag .req v30
tag_q .req q30
#define UNROLL 4
#define STACK_SIZE_GPRS (6*16)
#define STACK_SIZE_VREGS (4*16)
#define STACK_SIZE (STACK_SIZE_GPRS + STACK_SIZE_VREGS + UNROLL*16)
#define STACK_BASE_GPRS (0)
#define STACK_BASE_VREGS (STACK_SIZE_GPRS)
#define STACK_BASE_AES_ST (STACK_SIZE_GPRS + STACK_SIZE_VREGS)
/********************************************************************/
/* Generic preamble/postamble macros */
/********************************************************************/
.macro save_vregs
stp d8, d9, [sp, #(STACK_BASE_VREGS + 16*0)]
stp d10, d11, [sp, #(STACK_BASE_VREGS + 16*1)]
stp d12, d13, [sp, #(STACK_BASE_VREGS + 16*2)]
stp d14, d15, [sp, #(STACK_BASE_VREGS + 16*3)]
.endm
.macro restore_vregs
ldp d8, d9, [sp, #(STACK_BASE_VREGS + 16*0)]
ldp d10, d11, [sp, #(STACK_BASE_VREGS + 16*1)]
ldp d12, d13, [sp, #(STACK_BASE_VREGS + 16*2)]
ldp d14, d15, [sp, #(STACK_BASE_VREGS + 16*3)]
.endm
.macro save_gprs
stp x19, x20, [sp, #(STACK_BASE_GPRS + 16*0)]
stp x21, x22, [sp, #(STACK_BASE_GPRS + 16*1)]
stp x23, x24, [sp, #(STACK_BASE_GPRS + 16*2)]
stp x25, x26, [sp, #(STACK_BASE_GPRS + 16*3)]
stp x27, x28, [sp, #(STACK_BASE_GPRS + 16*4)]
stp x29, x30, [sp, #(STACK_BASE_GPRS + 16*5)]
.endm
.macro restore_gprs
ldp x19, x20, [sp, #(STACK_BASE_GPRS + 16*0)]
ldp x21, x22, [sp, #(STACK_BASE_GPRS + 16*1)]
ldp x23, x24, [sp, #(STACK_BASE_GPRS + 16*2)]
ldp x25, x26, [sp, #(STACK_BASE_GPRS + 16*3)]
ldp x27, x28, [sp, #(STACK_BASE_GPRS + 16*4)]
ldp x29, x30, [sp, #(STACK_BASE_GPRS + 16*5)]
.endm
// Derive number of iterations of unrolled loop and single-block loop
.macro prepare_loop_counts
mov unroll, #UNROLL
// Number of AES Blocks (16b each)
lsr full_blocks, byte_len, #4
// Number of iterations of the unrolled loop
udiv count, full_blocks, unroll
// Number of iterations for the tail loop handling 1 block each
msub remainder, count, unroll, full_blocks
.endm
/********************************************************************/
/* AES related macros */
/********************************************************************/
.macro load_iv
ldp ivec_0_63, ivec_64_96, [ivec]
lsr ctr_x, ivec_64_96, #32
rev ctr, ctr
orr ivec_64_96_w, ivec_64_96_w, ivec_64_96_w // clear top 32 bit
.endm
.macro next_ctr_init_aes aes_st, loc
add ctr_tmp_w, ctr, #\loc
rev ctr_tmp_w, ctr_tmp_w
orr ctr_tmp, ivec_64_96, ctr_tmp, lsl #32
stp ivec_0_63, ctr_tmp, [sp, #(STACK_BASE_AES_ST + \loc*16)] // @slothy:writes=stack_\loc
ldr \aes_st\()_q, [sp, #(STACK_BASE_AES_ST + \loc*16)] // @slothy:reads=stack_\loc
.endm
// A single AES round
// Prevent SLOTHY from unfolding because uArchs tend to fuse AESMC+AESE
.macro aesr data, key // @slothy:no-unfold
aese \data, \key
aesmc \data, \data
.endm
.macro aesr_0_8 data, key
aesr \data\().16b, \key\()0.16b
aesr \data\().16b, \key\()1.16b
aesr \data\().16b, \key\()2.16b
aesr \data\().16b, \key\()3.16b
aesr \data\().16b, \key\()4.16b
aesr \data\().16b, \key\()5.16b
aesr \data\().16b, \key\()6.16b
aesr \data\().16b, \key\()7.16b
aesr \data\().16b, \key\()8.16b
.endm
.macro aesr_9_10 data, key
aesr \data\().16b, \key\()9.16b
aesr \data\().16b, \key\()10.16b
.endm
.macro aesr_11_12 data, key
aesr \data\().16b, \key\()11.16b
aesr \data\().16b, \key\()12.16b
.endm
// Destructs inA
.macro eor3 out, inA, inB, inC
eor \inA, \inA, \inB
eor \out, \inA, \inC
.endm
.macro aesr_final aes_st, plain, out, loc
aese \aes_st\().16b, rk13.16b
eor \plain\()_lo, \plain\()_lo, rk14_lo
eor \plain\()_hi, \plain\()_hi, rk14_hi
stp \plain\()_lo, \plain\()_hi, [sp, #(STACK_BASE_AES_ST + \loc*16)] // @slothy:writes=stack_\loc
ldr \plain\()_q, [sp, #(STACK_BASE_AES_ST + \loc*16)] // @slothy:reads=stack_\loc
eor \out\().16b, \plain\().16b, \aes_st\().16b
.endm
.macro aes_full_block aes_st, input, output, loc
next_ctr_init_aes \aes_st, \loc
aesr_0_8 \aes_st\(), rk
aesr_9_10 \aes_st\(), rk
aesr_11_12 \aes_st\(), rk
aesr_final \aes_st, \input, \output, \loc
.endm
.macro load_round_key i
ldr rk\i\()q, [key, #((\i)*16)]
.endm
.macro load_round_key_scalar i
ldp rk\i\()_lo, rk\i\()_hi, [key, #((\i)*16)]
.endm
.macro load_round_keys
load_round_key 0
load_round_key 1
load_round_key 2
load_round_key 3
load_round_key 4
load_round_key 5
load_round_key 6
load_round_key 7
load_round_key 8
load_round_key 9
load_round_key 10
load_round_key 11
load_round_key 12
load_round_key 13
load_round_key_scalar 14
.endm
/********************************************************************/
/* Loading of H-table (precomputed H-powers for GHASH) */
/********************************************************************/
// This has to be synchronized with the H-table generation
.macro load_h1 dst, dst_q
ldr \dst_q, [Htable]
.endm
.macro load_h2 dst, dst_q
ldr \dst_q, [Htable, #32]
.endm
.macro load_h3 dst, dst_q
ldr \dst_q, [Htable, #48]
.endm
.macro load_h4 dst, dst_q
ldr \dst_q, [Htable, #80]
.endm
.macro load_h5 dst, dst_q
ldr \dst_q, [Htable, #96]
.endm
.macro load_h6 dst, dst_q
ldr \dst_q, [Htable, #128]
.endm
.macro load_h7 dst, dst_q
ldr \dst_q, [Htable, #144]
.endm
.macro load_h8 dst, dst_q
ldr \dst_q, [Htable, #176]
.endm
.macro load_h12 dst, dst_q
ldr \dst_q, [Htable, #16]
.endm
.macro load_h34 dst, dst_q
ldr \dst_q, [Htable, #64]
.endm
.macro load_h56 dst, dst_q
ldr \dst_q, [Htable, #112]
.endm
.macro load_h78 dst, dst_q
ldr \dst_q, [Htable, #160]
.endm
.macro load_full_htable
load_h1 Ht1, Ht1q
load_h2 Ht2, Ht2q
load_h3 Ht3, Ht3q
load_h4 Ht4, Ht4q
load_h5 Ht5, Ht5q
load_h6 Ht6, Ht6q
load_h12 Ht12, Ht12q
load_h34 Ht34, Ht34q
load_h56 Ht56, Ht56q
.endm
.macro load_htable_12
load_h1 Ht1, Ht1q
load_h2 Ht2, Ht2q
load_h12 Ht12, Ht12q
.endm
.macro load_htable_34
load_h3 Ht3, Ht3q
load_h4 Ht4, Ht4q
load_h34 Ht34, Ht34q
.endm
.macro load_htable_56
load_h5 Ht5, Ht5q
load_h6 Ht6, Ht6q
load_h56 Ht56, Ht56q
.endm
.macro load_htable_78
load_h7 Ht7, Ht7q
load_h8 Ht8, Ht8q
load_h78 Ht78, Ht78q
.endm
/********************************************************************/
/* Macros for GHASH udpate */
/********************************************************************/
.macro ghash_init_0 input, Hk, Hk_mid
rev64 \input\().16b, \input\().16b
// Low product
pmull ghash_lo.1q, \input\().1d, \Hk\().1d
// High product
pmull2 ghash_hi.1q, \input\().2d, \Hk\().2d
// Middle product
mov ghash_tmp_d, \input\().d[1]
eor ghash_tmp.8b, ghash_tmp.8b, \input\().8b
pmull ghash_mid.1q, ghash_tmp.1d, \Hk_mid\().1d
.endm
.macro ghash_init_1 input, Hk, Hk_mid
rev64 \input\().16b, \input\().16b
// Low product
pmull ghash_lo.1q, \input\().1d, \Hk\().1d
// High product
pmull2 ghash_hi.1q, \input\().2d, \Hk\().2d
// Middle product
ext ghash_tmp.16b, \input\().16b, \input\().16b, #8
eor ghash_tmp.16b, ghash_tmp.16b, \input\().16b
pmull2 ghash_mid.1q, ghash_tmp.2d, \Hk_mid\().2d
.endm
.macro ghash_acc_0 input, Hk, Hk_mid
rev64 \input\().16b, \input\().16b
// Low product
pmull ghash_tmp.1q, \input\().1d, \Hk\().1d
eor ghash_lo.16b, ghash_lo.16b, ghash_tmp.16b
// High product
pmull2 ghash_tmp.1q, \input\().2d, \Hk\().2d
eor ghash_hi.16b, ghash_hi.16b, ghash_tmp.16b
// Middle product
mov ghash_tmp_d, \input\().d[1]
eor ghash_tmp.8b, ghash_tmp.8b, \input\().8b
pmull ghash_tmp.1q, ghash_tmp.1d, \Hk_mid\().1d
eor ghash_mid.16b, ghash_mid.16b, ghash_tmp.16b
.endm
.macro ghash_acc_1 input, Hk, Hk_mid
rev64 \input\().16b, \input\().16b
// Low product
pmull ghash_tmp.1q, \input\().1d, \Hk\().1d
eor ghash_lo.16b, ghash_lo.16b, ghash_tmp.16b
// High product
pmull2 ghash_tmp.1q, \input\().2d, \Hk\().2d
eor ghash_hi.16b, ghash_hi.16b, ghash_tmp.16b
// Middle product
ext ghash_tmp.16b, \input\().16b, \input\().16b, #8
eor ghash_tmp.16b, ghash_tmp.16b, \input\().16b
pmull2 ghash_tmp.1q, ghash_tmp.2d, \Hk_mid\().2d
eor ghash_mid.16b, ghash_mid.16b, ghash_tmp.16b
.endm
.macro ghash_init_with_tag_0 input, Hk, Hk_mid, tag
rev64 \input\().16b, \input\().16b
eor \input\().16b, \input\().16b, \tag\().16b
// Low product
pmull ghash_lo.1q, \input\().1d, \Hk\().1d
// High product
pmull2 ghash_hi.1q, \input\().2d, \Hk\().2d
// Middle product
mov ghash_tmp_d, \input\().d[1]
eor ghash_tmp.8b, ghash_tmp.8b, \input\().8b
pmull ghash_mid.1q, ghash_tmp.1d, \Hk_mid\().1d
.endm
.macro ghash_init_with_tag_1 input, Hk, Hk_mid, tag
rev64 \input\().16b, \input\().16b
eor \input\().16b, \input\().16b, \tag\().16b
// Low product
pmull ghash_lo.1q, \input\().1d, \Hk\().1d
// High product
pmull2 ghash_hi.1q, \input\().2d, \Hk\().2d
// Middle product
ext ghash_tmp.16b, \input\().16b, \input\().16b, #8
eor ghash_tmp.16b, ghash_tmp.16b, \input\().16b
pmull2 ghash_mid.1q, ghash_tmp.2d, \Hk_mid\().2d
.endm
.macro ghash_acc_with_tag_0 input, Hk, Hk_mid, tag
rev64 \input\().16b, \input\().16b
eor \input\().16b, \input\().16b, \tag\().16b
// Low product
pmull ghash_tmp.1q, \input\().1d, \Hk\().1d
eor ghash_lo.16b, ghash_lo.16b, ghash_tmp.16b
// High product
pmull2 ghash_tmp.1q, \input\().2d, \Hk\().2d
eor ghash_hi.16b, ghash_hi.16b, ghash_tmp.16b
// Middle product
mov ghash_tmp_d, \input\().d[1]
eor ghash_tmp.8b, ghash_tmp.8b, \input\().8b
pmull ghash_tmp.1q, ghash_tmp.1d, \Hk_mid\().1d
eor ghash_mid.16b, ghash_mid.16b, ghash_tmp.16b
.endm
.macro ghash_acc_with_tag_1 input, Hk, Hk_mid, tag
rev64 \input\().16b, \input\().16b
eor \input\().16b, \input\().16b, \tag\().16b
// Low product
pmull ghash_tmp.1q, \input\().1d, \Hk\().1d
eor ghash_lo.16b, ghash_lo.16b, ghash_tmp.16b
// High product
pmull2 ghash_tmp.1q, \input\().2d, \Hk\().2d
eor ghash_hi.16b, ghash_hi.16b, ghash_tmp.16b
// Middle product
ext ghash_tmp.16b, \input\().16b, \input\().16b, #8
eor ghash_tmp.16b, ghash_tmp.16b, \input\().16b
pmull2 ghash_tmp.1q, ghash_tmp.2d, \Hk_mid\().2d
eor ghash_mid.16b, ghash_mid.16b, ghash_tmp.16b
.endm
.macro ghash_finalize tag
eor modulo_tmp0.16b, ghash_lo.16b, ghash_hi.16b
pmull modulo_tmp1.1q, ghash_hi.1d, ghash_mod.1d
ext ghash_hi.16b, ghash_hi.16b, ghash_hi.16b, #8
eor ghash_mid.16b, ghash_mid.16b, modulo_tmp0.16b
eor modulo_tmp1.16b, ghash_hi.16b, modulo_tmp1.16b
eor ghash_mid.16b, ghash_mid.16b, modulo_tmp1.16b
pmull ghash_hi.1q, ghash_mid.1d, ghash_mod.1d
eor ghash_lo.16b, ghash_lo.16b, ghash_hi.16b
ext ghash_mid.16b, ghash_mid.16b, ghash_mid.16b, #8
eor \tag\().16b, ghash_lo.16b, ghash_mid.16b
ext \tag\().16b, \tag\().16b, \tag\().16b, #8
.endm
.macro load_tag
ldr tag_q, [tag_ptr]
rev64 tag.16b, tag.16b
.endm
.macro prepare_ghash
// Prepare constant for modular reduction
movi ghash_mod.8b, #0xc2
shl ghash_mod_d, ghash_mod_d, #56
.endm
/********************************************************************/
/* Core routine */
/********************************************************************/
.align 4
_aes_gcm_enc_kernel_slothy_base_256:
aes_gcm_enc_kernel_slothy_base_256:
#ifdef BORINGSSL_DISPATCH_TEST
adrp x9,_BORINGSSL_function_hit@PAGE
add x9, x9, _BORINGSSL_function_hit@PAGEOFF
mov w10, #1
strb w10, [x9,#15] // kFlag_aes_gcm_slothy
#endif
AARCH64_VALID_CALL_TARGET
sub sp, sp, #STACK_SIZE
Lenc_preamble_start:
save_gprs
save_vregs
lsr byte_len, len_bits, #3
load_round_keys
load_tag
load_iv
prepare_loop_counts
prepare_ghash
load_htable_12
load_htable_34
Lenc_preamble_end:
cbz count, Lloop_unrolled_end
cmp count, #1
b.eq Lloop_unrolled_start_iter_1
// Instructions: 130
// Expected cycles: 70
// Expected IPC: 1.8571428571428572
ldr q6, [x6, #48] // *.....................................................................
ldr q11, [x6] // *.....................................................................
add w27, w13, #0 // *.....................................................................
ldr q29, [x6, #32] // .*....................................................................
ldr q1, [x6, #16] // .*....................................................................
rev w27, w27 // .*....................................................................
orr x27, x12, x27, lsl #32 // ..*...................................................................
stp x11, x27, [sp, #STACK_BASE_AES_ST] // ...*.................................................................. // @slothy:writes=stack_0
add w22, w13, #3 // ....*.................................................................
rev w30, w22 // .....*................................................................
ldr q8, [sp, #STACK_BASE_AES_ST] // ......*............................................................... // @slothy:reads=stack_0
orr x9, x12, x30, lsl #32 // ......*...............................................................
stp x11, x9, [sp, #STACK_BASE_AES_ST + 48] // .......*.............................................................. // @slothy:writes=stack_3
add w26, w13, #2 // ........*.............................................................
aesr v8.16b, v18.16b // .........*............................................................
ldp x9, x19, [x0], #(4*16) // .........*............................................................
ldr q14, [sp, #STACK_BASE_AES_ST + 48] // ..........*........................................................... // @slothy:reads=stack_3
add w22, w13, #1 // ..........*...........................................................
aesr v8.16b, v19.16b // ...........*..........................................................
add w13, w13, #UNROLL // ...........*..........................................................
add w30, w13, #3 // ............*.........................................................
aesr v8.16b, v20.16b // .............*........................................................
rev w17, w30 // .............*........................................................
aesr v14.16b, v18.16b // ..............*.......................................................
rev w23, w26 // ..............*.......................................................
aesr v8.16b, v21.16b // ...............*......................................................
orr x30, x12, x23, lsl #32 // ...............*......................................................
aesr v14.16b, v19.16b // ................*.....................................................
stp x11, x30, [sp, #STACK_BASE_AES_ST + 32] // ................*..................................................... // @slothy:writes=stack_2
aesr v8.16b, v22.16b // .................*....................................................
ldp x10, x26, [x0, #-32] // .................*....................................................
aesr v14.16b, v20.16b // ..................*...................................................
add w27, w13, #0 // ..................*...................................................
aesr v8.16b, v23.16b // ...................*..................................................
ldr q10, [sp, #STACK_BASE_AES_ST + 32] // ...................*.................................................. // @slothy:reads=stack_2
rev w27, w27 // ...................*..................................................
aesr v14.16b, v21.16b // ....................*.................................................
ldp x23, x30, [x0, #-16] // ....................*.................................................
aesr v8.16b, v24.16b // .....................*................................................
eor x9, x9, x20 // .....................*................................................
aesr v14.16b, v22.16b // ......................*...............................................
eor x19, x19, x21 // ......................*...............................................
aesr v10.16b, v18.16b // .......................*..............................................
eor x24, x30, x21 // .......................*..............................................
aesr v14.16b, v23.16b // ........................*.............................................
eor x30, x23, x20 // ........................*.............................................
aesr v10.16b, v19.16b // .........................*............................................
stp x30, x24, [sp, #STACK_BASE_AES_ST + 48] // .........................*............................................ // @slothy:writes=stack_3
aesr v14.16b, v24.16b // ..........................*...........................................
stp x9, x19, [sp, #STACK_BASE_AES_ST] // ..........................*........................................... // @slothy:writes=stack_0
aesr v10.16b, v20.16b // ...........................*..........................................
rev w22, w22 // ...........................*..........................................
aesr v14.16b, v25.16b // ............................*.........................................
ldr q5, [sp, #STACK_BASE_AES_ST + 48] // ............................*......................................... // @slothy:reads=stack_3
orr x22, x12, x22, lsl #32 // ............................*.........................................
ldr q13, [sp, #STACK_BASE_AES_ST] // .............................*........................................ // @slothy:reads=stack_0
aesr v10.16b, v21.16b // .............................*........................................
stp x11, x22, [sp, #STACK_BASE_AES_ST + 16] // .............................*........................................ // @slothy:writes=stack_1
aesr v14.16b, v26.16b // ..............................*.......................................
ldp x30, x24, [x0, #-48] // ..............................*.......................................
aesr v10.16b, v22.16b // ...............................*......................................
eor x9, x10, x20 // ...............................*......................................
aesr v14.16b, v27.16b // ................................*.....................................
ldr q12, [sp, #STACK_BASE_AES_ST + 16] // ................................*..................................... // @slothy:reads=stack_1
eor x19, x26, x21 // ................................*.....................................
aesr v10.16b, v23.16b // .................................*....................................
eor x22, x30, x20 // .................................*....................................
aesr v14.16b, v28.16b // ..................................*...................................
eor x24, x24, x21 // ..................................*...................................
aesr v12.16b, v18.16b // ...................................*..................................
stp x9, x19, [sp, #STACK_BASE_AES_ST + 32] // ...................................*.................................. // @slothy:writes=stack_2
aesr v14.16b, v15.16b // ....................................*.................................
ldp x25, x30, [x0, #48] // ....................................*.................................
aesr v12.16b, v19.16b // .....................................*................................
add w19, w13, #2 // .....................................*................................
aesr v14.16b, v16.16b // ......................................*...............................
ldr q4, [sp, #STACK_BASE_AES_ST + 32] // ......................................*............................... // @slothy:reads=stack_2
rev w19, w19 // ......................................*...............................
aesr v12.16b, v20.16b // .......................................*..............................
orr x19, x12, x19, lsl #32 // .......................................*..............................
aese v14.16b, v17.16b // ........................................*.............................
stp x11, x19, [sp, #STACK_BASE_AES_ST + 32] // ........................................*............................. // @slothy:writes=stack_2
aesr v12.16b, v21.16b // .........................................*............................
stp x22, x24, [sp, #STACK_BASE_AES_ST + 16] // .........................................*............................ // @slothy:writes=stack_1
eor v0.16B, v5.16B, v14.16B // ..........................................*...........................
aesr v10.16b, v24.16b // ..........................................*...........................
ldr q31, [sp, #STACK_BASE_AES_ST + 32] // ...........................................*.......................... // @slothy:reads=stack_2
aesr v12.16b, v22.16b // ...........................................*..........................
add w10, w13, #1 // ...........................................*..........................
rev64 v5.16B, v0.16B // ............................................*.........................
aesr v10.16b, v25.16b // ............................................*.........................
str q0, [x2, #48] // .............................................*........................
aesr v12.16b, v23.16b // .............................................*........................
mov d3, v5.d[1] // ..............................................*.......................
aesr v10.16b, v26.16b // ..............................................*.......................
aesr v12.16b, v24.16b // ...............................................*......................
ldr q2, [sp, #STACK_BASE_AES_ST + 16] // ...............................................*...................... // @slothy:reads=stack_1
eor v0.8B, v3.8B, v5.8B // ................................................*.....................
aesr v10.16b, v27.16b // ................................................*.....................
aesr v12.16b, v25.16b // .................................................*....................
aesr v10.16b, v28.16b // ..................................................*...................
aesr v12.16b, v26.16b // ...................................................*..................
aesr v10.16b, v15.16b // ....................................................*.................
aesr v12.16b, v27.16b // .....................................................*................
aesr v10.16b, v16.16b // ......................................................*...............
aesr v12.16b, v28.16b // .......................................................*..............
aese v10.16b, v17.16b // ........................................................*.............
orr x26, x12, x27, lsl #32 // ........................................................*.............
aesr v8.16b, v25.16b // .........................................................*............
aesr v12.16b, v15.16b // ..........................................................*...........
eor v4.16B, v4.16B, v10.16B // ..........................................................*...........
aesr v8.16b, v26.16b // ...........................................................*..........
rev64 v3.16B, v4.16B // ............................................................*.........
aesr v12.16b, v16.16b // ............................................................*.........
aesr v8.16b, v27.16b // .............................................................*........
str q4, [x2, #32] // .............................................................*........
aese v12.16b, v17.16b // ..............................................................*.......
aesr v8.16b, v28.16b // ...............................................................*......
ext v4.16B, v3.16B, v3.16B, #8 // ...............................................................*......
pmull v14.1q, v5.1d, v11.1d // ................................................................*.....
eor v12.16B, v2.16B, v12.16B // ................................................................*.....
aesr v8.16b, v15.16b // .................................................................*....
eor v9.16B, v4.16B, v3.16B // .................................................................*....
rev64 v2.16B, v12.16B // ..................................................................*...
pmull v10.1q, v3.1d, v29.1d // ..................................................................*...
str q12, [x2, #16] // ...................................................................*..
aesr v8.16b, v16.16b // ...................................................................*..
eor v14.16B, v14.16B, v10.16B // ....................................................................*.
pmull2 v4.1q, v3.2d, v29.2d // ....................................................................*.
aese v8.16b, v17.16b // .....................................................................*
// original source code
// add w19, w13, #2 // .............*....................................................................................................................
// rev w9, w19 // ........................*.........................................................................................................
// orr x19, x12, x9, lsl #32 // ..........................*.......................................................................................................
// stp x11, x19, [sp, #STACK_BASE_AES_ST + 32] // ............................*.....................................................................................................
// ldr q31, [sp, #STACK_BASE_AES_ST + 32] // ..................................*...............................................................................................
// ldp x25, x30, [x0, #48] // .....................................*............................................................................................
// add w27, w13, #3 // ........*.........................................................................................................................
// add w7, w13, #0 // ..*...............................................................................................................................
// rev w24, w7 // .....*............................................................................................................................
// orr x26, x12, x24, lsl #32 // ......*...........................................................................................................................
// rev w17, w27 // .........*........................................................................................................................
// add w10, w13, #1 // .................*................................................................................................................
// orr x27, x12, x17, lsl #32 // ...........*......................................................................................................................
// stp x11, x26, [sp, #STACK_BASE_AES_ST] // .......*..........................................................................................................................
// rev w8, w10 // ...................................................*..............................................................................
// aesr v31.16b, v18.16b // ..........................................*.......................................................................................
// stp x11, x27, [sp, #STACK_BASE_AES_ST + 48] // ............*.....................................................................................................................
// aesr v31.16b, v19.16b // ..............................................*...................................................................................
// orr x28, x12, x8, lsl #32 // ......................................................*...........................................................................
// ldr q11, [sp, #STACK_BASE_AES_ST + 48] // ................*.................................................................................................................
// aesr v31.16b, v20.16b // ..................................................*...............................................................................
// eor x24, x30, x21 // ...........................................*......................................................................................
// aesr v31.16b, v21.16b // ........................................................*.........................................................................
// ldp x9, x22, [x0, #32] // ..............................*...................................................................................................
// aesr v11.16b, v18.16b // .......................*..........................................................................................................
// add w13, w13, #UNROLL // ...................*..............................................................................................................
// aesr v31.16b, v22.16b // ............................................................*.....................................................................
// ldr q8, [sp, #STACK_BASE_AES_ST] // ..........*.......................................................................................................................
// stp x11, x28, [sp, #STACK_BASE_AES_ST + 16] // .........................................................*........................................................................
// aesr v31.16b, v23.16b // .................................................................*................................................................
// aesr v8.16b, v18.16b // ..............*...................................................................................................................
// aesr v11.16b, v19.16b // ...........................*......................................................................................................
// aesr v8.16b, v19.16b // ..................*...............................................................................................................
// aesr v11.16b, v20.16b // ...............................*..................................................................................................
// ldp x29, x30, [x0, #16] // ...........................................................*......................................................................
// ldr q4, [sp, #STACK_BASE_AES_ST + 16] // ...............................................................*..................................................................
// aesr v31.16b, v24.16b // .....................................................................................*............................................
// aesr v8.16b, v20.16b // .....................*............................................................................................................
// ldr q1, [x6, #16] // ....*.............................................................................................................................
// aesr v31.16b, v25.16b // ..........................................................................................*.......................................
// eor x8, x29, x20 // ..................................................................*...............................................................
// aesr v4.16b, v18.16b // .....................................................................*............................................................
// ldp x14, x23, [x0], #(4*16) // ...............*..................................................................................................................
// aesr v8.16b, v21.16b // .........................*........................................................................................................
// aesr v4.16b, v19.16b // .........................................................................*........................................................
// eor x30, x30, x21 // ....................................................................*.............................................................
// aesr v11.16b, v21.16b // ....................................*.............................................................................................
// stp x8, x30, [sp, #STACK_BASE_AES_ST + 16] // ...................................................................................*..............................................
// aesr v4.16b, v20.16b // ..............................................................................*...................................................
// eor x27, x25, x20 // .............................................*....................................................................................
// aesr v11.16b, v22.16b // ........................................*.........................................................................................
// eor x25, x14, x20 // .......................................*..........................................................................................
// aesr v31.16b, v26.16b // ..............................................................................................*...................................
// aesr v11.16b, v23.16b // ............................................*.....................................................................................
// aesr v4.16b, v21.16b // ..................................................................................*...............................................
// stp x27, x24, [sp, #STACK_BASE_AES_ST + 48] // ...............................................*..................................................................................
// aesr v11.16b, v24.16b // ................................................*.................................................................................
// aesr v31.16b, v27.16b // ..................................................................................................*...............................
// ldr q5, [sp, #STACK_BASE_AES_ST + 48] // .....................................................*............................................................................
// aesr v11.16b, v25.16b // ....................................................*.............................................................................
// aesr v4.16b, v22.16b // .......................................................................................*..........................................
// aesr v31.16b, v28.16b // ....................................................................................................*.............................
// aesr v11.16b, v26.16b // ..........................................................*.......................................................................
// eor x19, x9, x20 // .............................................................*....................................................................
// aesr v31.16b, v15.16b // ......................................................................................................*...........................
// eor x30, x22, x21 // ................................................................*.................................................................
// aesr v11.16b, v27.16b // ..............................................................*...................................................................
// eor x17, x23, x21 // .........................................*........................................................................................
// aesr v4.16b, v23.16b // ............................................................................................*.....................................
// aesr v11.16b, v28.16b // ...................................................................*..............................................................
// stp x19, x30, [sp, #STACK_BASE_AES_ST + 32] // ......................................................................*...........................................................
// aesr v31.16b, v16.16b // ........................................................................................................*.........................
// stp x25, x17, [sp, #STACK_BASE_AES_ST] // .................................................*................................................................................
// aesr v11.16b, v15.16b // .......................................................................*..........................................................
// add w19, w13, #2 // ..........................................................................*.......................................................
// ldr q2, [sp, #STACK_BASE_AES_ST + 32] // ............................................................................*.....................................................
// rev w9, w19 // .............................................................................*....................................................
// ldr q3, [sp, #STACK_BASE_AES_ST + 16] // ................................................................................................*.................................
// aesr v11.16b, v16.16b // ...........................................................................*......................................................
// orr x19, x12, x9, lsl #32 // ...............................................................................*..................................................
// aese v31.16b, v17.16b // ..........................................................................................................*.......................
// stp x11, x19, [sp, #STACK_BASE_AES_ST + 32] // .................................................................................*................................................
// aesr v4.16b, v24.16b // ...............................................................................................*..................................
// ldr q10, [x6, #32] // ...*..............................................................................................................................
// aese v11.16b, v17.16b // ................................................................................*.................................................
// eor v12.16B, v2.16B, v31.16B // ..............................................................................................................*...................
// ldr q31, [sp, #STACK_BASE_AES_ST + 32] // ......................................................................................*...........................................
// aesr v4.16b, v25.16b // ...................................................................................................*..............................
// aesr v8.16b, v22.16b // .............................*....................................................................................................
// aesr v4.16b, v26.16b // .....................................................................................................*............................
// eor v6.16B, v5.16B, v11.16B // ....................................................................................*.............................................
// aesr v8.16b, v23.16b // .................................*................................................................................................
// ldr q13, [sp, #STACK_BASE_AES_ST] // .......................................................*..........................................................................
// aesr v4.16b, v27.16b // .......................................................................................................*..........................
// rev64 v5.16B, v6.16B // .........................................................................................*........................................
// aesr v8.16b, v24.16b // ......................................*...........................................................................................
// aesr v4.16b, v28.16b // .........................................................................................................*........................
// aesr v8.16b, v25.16b // ............................................................................................................*.....................
// str q6, [x2, #48] // ...........................................................................................*......................................
// aesr v4.16b, v15.16b // .............................................................................................................*....................
// str q12, [x2, #32] // ...................................................................................................................*..............
// aesr v8.16b, v26.16b // ...............................................................................................................*..................
// mov d2, v5.d[1] // .............................................................................................*....................................
// ldp x25, x30, [x0, #48] // ........................................................................*.........................................................
// aesr v4.16b, v16.16b // .................................................................................................................*................
// rev64 v12.16B, v12.16B // ................................................................................................................*.................
// ldr q11, [x6] // .*................................................................................................................................
// aesr v8.16b, v27.16b // ..................................................................................................................*...............
// ext v9.16B, v12.16B, v12.16B, #8 // ......................................................................................................................*...........
// aese v4.16b, v17.16b // ....................................................................................................................*.............
// add w27, w13, #3 // ....................*.............................................................................................................
// ldr q6, [x6, #48] // *.................................................................................................................................
// aesr v8.16b, v28.16b // .....................................................................................................................*............
// eor v29.16B, v3.16B, v4.16B // ........................................................................................................................*.........
// pmull v14.1q, v5.1d, v11.1d // .......................................................................................................................*..........
// add w7, w13, #0 // ................................*.................................................................................................
// aesr v8.16b, v15.16b // .........................................................................................................................*........
// eor v0.8B, v2.8B, v5.8B // .................................................................................................*................................
// rev w24, w7 // ...................................*..............................................................................................
// rev64 v2.16B, v29.16B // ...........................................................................................................................*......
// pmull v3.1q, v12.1d, v10.1d // ............................................................................................................................*.....
// orr x26, x12, x24, lsl #32 // ...........................................................................................................*......................
// eor v9.16B, v9.16B, v12.16B // ..........................................................................................................................*.......
// aesr v8.16b, v16.16b // ..............................................................................................................................*...
// eor v14.16B, v14.16B, v3.16B // ...............................................................................................................................*..
// pmull2 v4.1q, v12.2d, v10.2d // ................................................................................................................................*.
// rev w17, w27 // ......................*...........................................................................................................
// str q29, [x2, #16] // .............................................................................................................................*....
// aese v8.16b, v17.16b // .................................................................................................................................*
// add w10, w13, #1 // ........................................................................................*.........................................
sub count, count, #2
cbz count, Lloop_unrolled_start_postamble
Lloop_unrolled_start:
// Instructions: 156
// Expected cycles: 70
// Expected IPC: 2.2285714285714286
pmull v0.1q, v0.1d, v1.1d // l.....................................................................
ldr q10, [x6, #80] // l.....................................................................
eor v12.16B, v13.16B, v8.16B // .l....................................................................
pmull2 v8.1q, v2.2d, v6.2d // .l....................................................................
orr x27, x12, x17, lsl #32 // .*....................................................................
pmull v3.1q, v2.1d, v6.1d // ..l...................................................................
ldr q29, [x6, #64] // ..l...................................................................
stp x11, x26, [sp, #STACK_BASE_AES_ST] // ..*................................................................... // @slothy:writes=stack_0
pmull2 v11.1q, v5.2d, v11.2d // ...l..................................................................
rev64 v6.16B, v12.16B // ...l..................................................................
rev w8, w10 // ...*..................................................................
mov d13, v2.d[1] // ....l.................................................................
aesr v31.16b, v18.16b // ....*.................................................................
stp x11, x27, [sp, #STACK_BASE_AES_ST + 48] // ....*................................................................. // @slothy:writes=stack_3
eor v6.16B, v6.16B, v30.16B // .....l................................................................
pmull2 v1.1q, v9.2d, v1.2d // .....l................................................................
eor v13.8B, v13.8B, v2.8B // ......l...............................................................
aesr v31.16b, v19.16b // ......*...............................................................
orr x28, x12, x8, lsl #32 // ......*...............................................................
eor v30.16B, v11.16B, v4.16B // .......l..............................................................
pmull2 v5.1q, v6.2d, v10.2d // .......l..............................................................
ldr q11, [sp, #STACK_BASE_AES_ST + 48] // ........*............................................................. // @slothy:reads=stack_3
pmull v10.1q, v6.1d, v10.1d // ........l.............................................................
ext v2.16B, v6.16B, v6.16B, #8 // .........l............................................................
aesr v31.16b, v20.16b // .........*............................................................
pmull v4.1q, v13.1d, v29.1d // ..........l...........................................................
eor v30.16B, v30.16B, v8.16B // ..........l...........................................................
eor x24, x30, x21 // ..........*...........................................................
aesr v31.16b, v21.16b // ...........*..........................................................
eor v6.16B, v2.16B, v6.16B // ...........l..........................................................
ldp x9, x22, [x0, #32] // ...........*..........................................................
eor v9.16B, v30.16B, v5.16B // ............l.........................................................
aesr v11.16b, v18.16b // ............*.........................................................
add w13, w13, #UNROLL // ............*.........................................................
aesr v31.16b, v22.16b // .............*........................................................
ldr q8, [sp, #STACK_BASE_AES_ST] // .............*........................................................ // @slothy:reads=stack_0
eor v1.16B, v0.16B, v1.16B // ..............l.......................................................
pmull v0.1q, v9.1d, v7.1d // ..............l.......................................................
stp x11, x28, [sp, #STACK_BASE_AES_ST + 16] // ..............*....................................................... // @slothy:writes=stack_1
aesr v31.16b, v23.16b // ...............*......................................................
ext v30.16B, v9.16B, v9.16B, #8 // ...............l......................................................
aesr v8.16b, v18.16b // ................*.....................................................
str q12, [x2], #(4*16) // ................l.....................................................
pmull2 v13.1q, v6.2d, v29.2d // .................l....................................................
eor v2.16B, v1.16B, v4.16B // .................l....................................................
eor v12.16B, v30.16B, v0.16B // ..................l...................................................
aesr v11.16b, v19.16b // ..................*...................................................
eor v2.16B, v2.16B, v13.16B // ...................l..................................................
aesr v8.16b, v19.16b // ...................*..................................................
eor v14.16B, v14.16B, v3.16B // ....................l.................................................
aesr v11.16b, v20.16b // ....................*.................................................
ldp x29, x30, [x0, #16] // ....................*.................................................
ldr q4, [sp, #STACK_BASE_AES_ST + 16] // .....................*................................................ // @slothy:reads=stack_1
aesr v31.16b, v24.16b // .....................*................................................
eor v30.16B, v14.16B, v10.16B // ......................l...............................................
aesr v8.16b, v20.16b // ......................*...............................................
ldr q1, [x6, #16] // .......................*..............................................
aesr v31.16b, v25.16b // .......................*..............................................
eor x8, x29, x20 // .......................*..............................................
aesr v4.16b, v18.16b // ........................*.............................................
eor v14.16B, v30.16B, v9.16B // ........................l.............................................
ldp x14, x23, [x0], #(4*16) // ........................*.............................................
aesr v8.16b, v21.16b // .........................*............................................
eor v29.16B, v2.16B, v14.16B // ..........................l...........................................
aesr v4.16b, v19.16b // ..........................*...........................................
eor x30, x30, x21 // ..........................*...........................................
aesr v11.16b, v21.16b // ...........................*..........................................
stp x8, x30, [sp, #STACK_BASE_AES_ST + 16] // ...........................*.......................................... // @slothy:writes=stack_1
eor v10.16B, v29.16B, v12.16B // ............................l.........................................
aesr v4.16b, v20.16b // ............................*.........................................
eor x27, x25, x20 // ............................*.........................................
aesr v11.16b, v22.16b // .............................*........................................
eor x25, x14, x20 // .............................*........................................
ext v9.16B, v10.16B, v10.16B, #8 // ..............................l.......................................
aesr v31.16b, v26.16b // ..............................*.......................................
aesr v11.16b, v23.16b // ...............................*......................................
aesr v4.16b, v21.16b // ................................*.....................................
stp x27, x24, [sp, #STACK_BASE_AES_ST + 48] // ................................*..................................... // @slothy:writes=stack_3
aesr v11.16b, v24.16b // .................................*....................................
aesr v31.16b, v27.16b // ..................................*...................................
ldr q5, [sp, #STACK_BASE_AES_ST + 48] // ...................................*.................................. // @slothy:reads=stack_3
aesr v11.16b, v25.16b // ...................................*..................................
aesr v4.16b, v22.16b // ....................................*.................................
aesr v31.16b, v28.16b // .....................................*................................
aesr v11.16b, v26.16b // ......................................*...............................
eor x19, x9, x20 // ......................................*...............................
aesr v31.16b, v15.16b // .......................................*..............................
eor x30, x22, x21 // .......................................*..............................
aesr v11.16b, v27.16b // ........................................*.............................
eor x17, x23, x21 // ........................................*.............................
aesr v4.16b, v23.16b // .........................................*............................
aesr v11.16b, v28.16b // ..........................................*...........................
stp x19, x30, [sp, #STACK_BASE_AES_ST + 32] // ..........................................*........................... // @slothy:writes=stack_2
aesr v31.16b, v16.16b // ...........................................*..........................
stp x25, x17, [sp, #STACK_BASE_AES_ST] // ...........................................*.......................... // @slothy:writes=stack_0
aesr v11.16b, v15.16b // ............................................*.........................
add w19, w13, #2 // ............................................e.........................
pmull v0.1q, v10.1d, v7.1d // .............................................l........................
ldr q2, [sp, #STACK_BASE_AES_ST + 32] // .............................................*........................ // @slothy:reads=stack_2
rev w9, w19 // .............................................e........................
ldr q3, [sp, #STACK_BASE_AES_ST + 16] // ..............................................*....................... // @slothy:reads=stack_1
aesr v11.16b, v16.16b // ..............................................*.......................
orr x19, x12, x9, lsl #32 // ..............................................e.......................
aese v31.16b, v17.16b // ...............................................*......................
stp x11, x19, [sp, #STACK_BASE_AES_ST + 32] // ...............................................e...................... // @slothy:writes=stack_2
aesr v4.16b, v24.16b // ................................................*.....................
ldr q10, [x6, #32] // ................................................*.....................
aese v11.16b, v17.16b // .................................................*....................
eor v12.16B, v2.16B, v31.16B // .................................................*....................
ldr q31, [sp, #STACK_BASE_AES_ST + 32] // ..................................................e................... // @slothy:reads=stack_2
aesr v4.16b, v25.16b // ..................................................*...................
eor v30.16B, v30.16B, v0.16B // ...................................................l..................
aesr v8.16b, v22.16b // ...................................................*..................
aesr v4.16b, v26.16b // ....................................................*.................
eor v6.16B, v5.16B, v11.16B // ....................................................*.................
aesr v8.16b, v23.16b // .....................................................*................
ldr q13, [sp, #STACK_BASE_AES_ST] // .....................................................*................ // @slothy:reads=stack_0
aesr v4.16b, v27.16b // ......................................................*...............
eor v11.16B, v30.16B, v9.16B // ......................................................l...............
rev64 v5.16B, v6.16B // .......................................................*..............
aesr v8.16b, v24.16b // .......................................................*..............
ext v30.16B, v11.16B, v11.16B, #8 // ........................................................l.............
aesr v4.16b, v28.16b // ........................................................*.............
aesr v8.16b, v25.16b // .........................................................*............
str q6, [x2, #48] // .........................................................*............
aesr v4.16b, v15.16b // ..........................................................*...........
str q12, [x2, #32] // ..........................................................*...........
aesr v8.16b, v26.16b // ...........................................................*..........
mov d2, v5.d[1] // ...........................................................*..........
ldp x25, x30, [x0, #48] // ...........................................................e..........
aesr v4.16b, v16.16b // ............................................................*.........
rev64 v12.16B, v12.16B // ............................................................*.........
ldr q11, [x6] // .............................................................*........
aesr v8.16b, v27.16b // .............................................................*........
ext v9.16B, v12.16B, v12.16B, #8 // ..............................................................*.......
aese v4.16b, v17.16b // ..............................................................*.......
add w27, w13, #3 // ..............................................................e.......
ldr q6, [x6, #48] // ...............................................................*......
aesr v8.16b, v28.16b // ...............................................................*......
eor v29.16B, v3.16B, v4.16B // ................................................................*.....
pmull v14.1q, v5.1d, v11.1d // ................................................................*.....
add w7, w13, #0 // ................................................................e.....
aesr v8.16b, v15.16b // .................................................................*....
eor v0.8B, v2.8B, v5.8B // .................................................................*....
rev w24, w7 // .................................................................e....
rev64 v2.16B, v29.16B // ..................................................................*...
pmull v3.1q, v12.1d, v10.1d // ..................................................................*...
orr x26, x12, x24, lsl #32 // ..................................................................e...
eor v9.16B, v9.16B, v12.16B // ...................................................................*..
aesr v8.16b, v16.16b // ...................................................................*..
eor v14.16B, v14.16B, v3.16B // ....................................................................*.
pmull2 v4.1q, v12.2d, v10.2d // ....................................................................*.
rev w17, w27 // ....................................................................e.
str q29, [x2, #16] // .....................................................................*
aese v8.16b, v17.16b // .....................................................................*
add w10, w13, #1 // .....................................................................e
// original source code
// ldr q12, [x6] // ....................................*.......................|...................................................................................................................................*.......................|.........................................................................................................................
// ldr q13, [x6, #32] // ..........*.................................................|.........................................................................................................*.................................................|.........................................................................................................*...............
// ldr q14, [x6, #16] // ............................................................|.......................................................*...................................................................................................|.......................................................*.................................................................
// ldp x22, x23, [x0, #(3*16)] // .................................e..........................|................................................................................................................................e..........................|.........................................................................................................................
// add w14, w13, #3 // ........................................e...................|.......................................................................................................................................e...................|.........................................................................................................................
// rev w14, w14 // ........................................................e...|.......................................................................................................................................................e...|.........................................................................................................................
// orr x14, x12, x14, lsl #32 // ............................................................|...*.......................................................................................................................................................|...*.....................................................................................................................
// stp x11, x14, [sp, #(STACK_BASE_AES_ST + 3*16)] // ............................................................|............*..............................................................................................................................................|............*............................................................................................................
// ldr q0, [sp, #(STACK_BASE_AES_ST + 3*16)] // ............................................................|....................*......................................................................................................................................|....................*....................................................................................................
// aesr v0.16b, v18.16b // ............................................................|...............................*...........................................................................................................................|...............................*.........................................................................................
// aesr v0.16b, v19.16b // ............................................................|.............................................*.............................................................................................................|.............................................*...........................................................................
// aesr v0.16b, v20.16b // ............................................................|.................................................*.........................................................................................................|.................................................*.......................................................................
// aesr v0.16b, v21.16b // ............................................................|.................................................................*.........................................................................................|.................................................................*.......................................................
// aesr v0.16b, v22.16b // ............................................................|......................................................................*....................................................................................|......................................................................*..................................................
// aesr v0.16b, v23.16b // ............................................................|..........................................................................*................................................................................|..........................................................................*..............................................
// aesr v0.16b, v24.16b // ............................................................|.............................................................................*.............................................................................|.............................................................................*...........................................
// aesr v0.16b, v25.16b // ............................................................|................................................................................*..........................................................................|................................................................................*........................................
// aesr v0.16b, v26.16b // ............................................................|...................................................................................*.......................................................................|...................................................................................*.....................................
// aesr v0.16b, v27.16b // ............................................................|.......................................................................................*...................................................................|.......................................................................................*.................................
// aesr v0.16b, v28.16b // ............................................................|..........................................................................................*................................................................|..........................................................................................*..............................
// aesr v0.16b, v15.16b // ............................................................|..............................................................................................*............................................................|..............................................................................................*..........................
// aesr v0.16b, v16.16b // .....*......................................................|....................................................................................................*......................................................|....................................................................................................*....................
// aese v0.16b, v17.16b // ...........*................................................|..........................................................................................................*................................................|..........................................................................................................*..............
// eor x22, x22, x20 // ............................................................|.....................................................................*.....................................................................................|.....................................................................*...................................................
// eor x23, x23, x21 // ............................................................|..........................*................................................................................................................................|..........................*..............................................................................................
// stp x22, x23, [sp, #(STACK_BASE_AES_ST + 3*16)] // ............................................................|............................................................................*..............................................................................|............................................................................*............................................
// ldr q29, [sp, #(STACK_BASE_AES_ST + 3*16)] // ............................................................|...............................................................................*...........................................................................|...............................................................................*.........................................
// eor v0.16b, v29.16b, v0.16b // ..................*.........................................|.................................................................................................................*.........................................|.................................................................................................................*.......
// str q0, [x2, #(3*16)] // ............................*...............................|...........................................................................................................................*...............................|.........................................................................................................................
// rev64 v0.16b, v0.16b // .......................*....................................|......................................................................................................................*....................................|......................................................................................................................*..
// pmull v8.1q, v0.1d, v12.1d // ............................................*...............|...........................................................................................................................................*...............|.........................................................................................................................
// pmull2 v9.1q, v0.2d, v12.2d // ............................................................|.......l...................................................................................................................................................|.......l.................................................................................................................
// mov d11, v0.d[1] // ................................*...........................|...............................................................................................................................*...........................|.........................................................................................................................
// eor v11.8b, v11.8b, v0.8b // ...............................................*............|..............................................................................................................................................*............|.........................................................................................................................
// pmull v10.1q, v11.1d, v14.1d // ............................................................l...........................................................................................................................................................l.........................................................................................................................
// ldp x22, x23, [x0, #(2*16)] // ............................................................|.............................*.............................................................................................................................|.............................*...........................................................................................
// add w14, w13, #2 // e...........................................................|...............................................................................................e...........................................................|...............................................................................................e.........................
// rev w14, w14 // ...e........................................................|..................................................................................................e........................................................|..................................................................................................e......................
// orr x14, x12, x14, lsl #32 // ......e.....................................................|.....................................................................................................e.....................................................|.....................................................................................................e...................
// stp x11, x14, [sp, #(STACK_BASE_AES_ST + 2*16)] // ........e...................................................|.......................................................................................................e...................................................|.......................................................................................................e.................
// ldr q0, [sp, #(STACK_BASE_AES_ST + 2*16)] // .............e..............................................|............................................................................................................e..............................................|............................................................................................................e............
// aesr v0.16b, v18.16b // ............................................................|...........*...............................................................................................................................................|...........*.............................................................................................................
// aesr v0.16b, v19.16b // ............................................................|................*..........................................................................................................................................|................*........................................................................................................
// aesr v0.16b, v20.16b // ............................................................|.......................*...................................................................................................................................|.......................*.................................................................................................
// aesr v0.16b, v21.16b // ............................................................|...........................*...............................................................................................................................|...........................*.............................................................................................
// aesr v0.16b, v22.16b // ............................................................|.................................*.........................................................................................................................|.................................*.......................................................................................
// aesr v0.16b, v23.16b // ............................................................|......................................*....................................................................................................................|......................................*..................................................................................
// aesr v0.16b, v24.16b // ............................................................|....................................................*......................................................................................................|....................................................*....................................................................
// aesr v0.16b, v25.16b // ............................................................|........................................................*..................................................................................................|........................................................*................................................................
// aesr v0.16b, v26.16b // ............................................................|.........................................................................*.................................................................................|.........................................................................*...............................................
// aesr v0.16b, v27.16b // ............................................................|..............................................................................*............................................................................|..............................................................................*..........................................
// aesr v0.16b, v28.16b // ............................................................|..................................................................................*........................................................................|..................................................................................*......................................
// aesr v0.16b, v15.16b // ............................................................|.....................................................................................*.....................................................................|.....................................................................................*...................................
// aesr v0.16b, v16.16b // ............................................................|............................................................................................*..............................................................|............................................................................................*............................
// aese v0.16b, v17.16b // .......*....................................................|......................................................................................................*....................................................|......................................................................................................*..................
// eor x22, x22, x20 // ............................................................|....................................................................................*......................................................................|....................................................................................*....................................
// eor x23, x23, x21 // ............................................................|......................................................................................*....................................................................|......................................................................................*..................................
// stp x22, x23, [sp, #(STACK_BASE_AES_ST + 2*16)] // ............................................................|...........................................................................................*...............................................................|...........................................................................................*.............................
// ldr q29, [sp, #(STACK_BASE_AES_ST + 2*16)] // ..*.........................................................|.................................................................................................*.........................................................|.................................................................................................*.......................
// eor v0.16b, v29.16b, v0.16b // ............*...............................................|...........................................................................................................*...............................................|...........................................................................................................*.............
// str q0, [x2, #(2*16)] // ..............................*.............................|.............................................................................................................................*.............................|.........................................................................................................................
// rev64 v0.16b, v0.16b // ...................................*........................|..................................................................................................................................*........................|.........................................................................................................................
// pmull v11.1q, v0.1d, v13.1d // ..................................................*.........|.................................................................................................................................................*.........|.........................................................................................................................
// eor v8.16b, v8.16b, v11.16b // ......................................................*.....|.....................................................................................................................................................*.....|.........................................................................................................................
// pmull2 v11.1q, v0.2d, v13.2d // .......................................................*....|......................................................................................................................................................*....|.........................................................................................................................
// eor v9.16b, v9.16b, v11.16b // ............................................................|..................l........................................................................................................................................|..................l......................................................................................................
// ext v11.16b, v0.16b, v0.16b, #8 // ......................................*.....................|.....................................................................................................................................*.....................|.........................................................................................................................
// eor v11.16b, v11.16b, v0.16b // ....................................................*.......|...................................................................................................................................................*.......|.........................................................................................................................
// pmull2 v11.1q, v11.2d, v14.2d // ............................................................|..............l............................................................................................................................................|..............l..........................................................................................................
// eor v10.16b, v10.16b, v11.16b // ............................................................|...................................l.......................................................................................................................|...................................l.....................................................................................
// ldr q12, [x6, #48] // .........................................*..................|........................................................................................................................................*..................|.........................................................................................................................
// ldr q13, [x6, #80] // ............................................................|l..........................................................................................................................................................|l........................................................................................................................
// ldr q14, [x6, #64] // ............................................................|.....l.....................................................................................................................................................|.....l...................................................................................................................
// ldp x22, x23, [x0, #(1*16)] // ............................................................|..................................................*........................................................................................................|..................................................*......................................................................
// add w14, w13, #1 // ...........................................................e|..........................................................................................................................................................e|.........................................................................................................................
// rev w14, w14 // ............................................................|.........*.................................................................................................................................................|.........*...............................................................................................................
// orr x14, x12, x14, lsl #32 // ............................................................|.................*.........................................................................................................................................|.................*.......................................................................................................
// stp x11, x14, [sp, #(STACK_BASE_AES_ST + 1*16)] // ............................................................|.....................................*.....................................................................................................................|.....................................*...................................................................................
// ldr q0, [sp, #(STACK_BASE_AES_ST + 1*16)] // ............................................................|...................................................*.......................................................................................................|...................................................*.....................................................................
// aesr v0.16b, v18.16b // ............................................................|..........................................................*................................................................................................|..........................................................*..............................................................
// aesr v0.16b, v19.16b // ............................................................|...............................................................*...........................................................................................|...............................................................*.........................................................
// aesr v0.16b, v20.16b // ............................................................|....................................................................*......................................................................................|....................................................................*....................................................
// aesr v0.16b, v21.16b // ............................................................|...........................................................................*...............................................................................|...........................................................................*.............................................
// aesr v0.16b, v22.16b // ............................................................|.................................................................................*.........................................................................|.................................................................................*.......................................
// aesr v0.16b, v23.16b // ............................................................|.........................................................................................*.................................................................|.........................................................................................*...............................
// aesr v0.16b, v24.16b // .........*..................................................|........................................................................................................*..................................................|........................................................................................................*................
// aesr v0.16b, v25.16b // ..............*.............................................|.............................................................................................................*.............................................|.............................................................................................................*...........
// aesr v0.16b, v26.16b // .................*..........................................|................................................................................................................*..........................................|................................................................................................................*........
// aesr v0.16b, v27.16b // .....................*......................................|....................................................................................................................*......................................|....................................................................................................................*....
// aesr v0.16b, v28.16b // ..........................*.................................|.........................................................................................................................*.................................|.........................................................................................................................
// aesr v0.16b, v15.16b // .............................*..............................|............................................................................................................................*..............................|.........................................................................................................................
// aesr v0.16b, v16.16b // ..................................*.........................|.................................................................................................................................*.........................|.........................................................................................................................
// aese v0.16b, v17.16b // .......................................*....................|......................................................................................................................................*....................|.........................................................................................................................
// eor x22, x22, x20 // ............................................................|.........................................................*.................................................................................................|.........................................................*...............................................................
// eor x23, x23, x21 // ............................................................|................................................................*..........................................................................................|................................................................*........................................................
// stp x22, x23, [sp, #(STACK_BASE_AES_ST + 1*16)] // ............................................................|..................................................................*........................................................................................|..................................................................*......................................................
// ldr q29, [sp, #(STACK_BASE_AES_ST + 1*16)] // ....*.......................................................|...................................................................................................*.......................................................|...................................................................................................*.....................
// eor v0.16b, v29.16b, v0.16b // ...........................................*................|..........................................................................................................................................*................|.........................................................................................................................
// str q0, [x2, #(1*16)] // .........................................................*..|........................................................................................................................................................*..|.........................................................................................................................
// rev64 v0.16b, v0.16b // .................................................*..........|................................................................................................................................................*..........|.........................................................................................................................
// pmull v11.1q, v0.1d, v12.1d // ............................................................|....l......................................................................................................................................................|....l....................................................................................................................
// eor v8.16b, v8.16b, v11.16b // ............................................................|................................................l..........................................................................................................|................................................l........................................................................
// pmull2 v11.1q, v0.2d, v12.2d // ............................................................|..l........................................................................................................................................................|..l......................................................................................................................
// eor v9.16b, v9.16b, v11.16b // ............................................................|.........................l.................................................................................................................................|.........................l...............................................................................................
// mov d11, v0.d[1] // ............................................................|..........l................................................................................................................................................|..........l..............................................................................................................
// eor v11.8b, v11.8b, v0.8b // ............................................................|...............l...........................................................................................................................................|...............l.........................................................................................................
// pmull v11.1q, v11.1d, v14.1d // ............................................................|........................l..................................................................................................................................|........................l................................................................................................
// eor v10.16b, v10.16b, v11.16b // ............................................................|...........................................l...............................................................................................................|...........................................l.............................................................................
// ldp x22, x23, [x0], #(4*16) // ............................................................|............................................................*..............................................................................................|............................................................*............................................................
// add w14, w13, #0 // .............................................e..............|............................................................................................................................................e..............|.........................................................................................................................
// rev w14, w14 // ................................................e...........|...............................................................................................................................................e...........|.........................................................................................................................
// orr x14, x12, x14, lsl #32 // ...................................................e........|..................................................................................................................................................e........|.........................................................................................................................
// stp x11, x14, [sp, #(STACK_BASE_AES_ST + 0*16)] // ............................................................|......*....................................................................................................................................................|......*..................................................................................................................
// ldr q0, [sp, #(STACK_BASE_AES_ST + 0*16)] // ............................................................|..................................*........................................................................................................................|..................................*......................................................................................
// aesr v0.16b, v18.16b // ............................................................|........................................*..................................................................................................................|........................................*................................................................................
// aesr v0.16b, v19.16b // ............................................................|...............................................*...........................................................................................................|...............................................*.........................................................................
// aesr v0.16b, v20.16b // ............................................................|......................................................*....................................................................................................|......................................................*..................................................................
// aesr v0.16b, v21.16b // ............................................................|.............................................................*.............................................................................................|.............................................................*...........................................................
// aesr v0.16b, v22.16b // ................*...........................................|...............................................................................................................*...........................................|...............................................................................................................*.........
// aesr v0.16b, v23.16b // ...................*........................................|..................................................................................................................*........................................|..................................................................................................................*......
// aesr v0.16b, v24.16b // ........................*...................................|.......................................................................................................................*...................................|.......................................................................................................................*.
// aesr v0.16b, v25.16b // ...........................*................................|..........................................................................................................................*................................|.........................................................................................................................
// aesr v0.16b, v26.16b // ...............................*............................|..............................................................................................................................*............................|.........................................................................................................................
// aesr v0.16b, v27.16b // .....................................*......................|....................................................................................................................................*......................|.........................................................................................................................
// aesr v0.16b, v28.16b // ..........................................*.................|.........................................................................................................................................*.................|.........................................................................................................................
// aesr v0.16b, v15.16b // ..............................................*.............|.............................................................................................................................................*.............|.........................................................................................................................
// aesr v0.16b, v16.16b // .....................................................*......|....................................................................................................................................................*......|.........................................................................................................................
// aese v0.16b, v17.16b // ..........................................................*.|.........................................................................................................................................................*.|.........................................................................................................................
// eor x22, x22, x20 // ............................................................|.......................................................................*...................................................................................|.......................................................................*.................................................
// eor x23, x23, x21 // ............................................................|........................................................................................*..................................................................|........................................................................................*................................
// stp x22, x23, [sp, #(STACK_BASE_AES_ST + 0*16)] // ............................................................|.............................................................................................*.............................................................|.............................................................................................*...........................
// ldr q29, [sp, #(STACK_BASE_AES_ST + 0*16)] // ....................*.......................................|...................................................................................................................*.......................................|...................................................................................................................*.....
// eor v0.16b, v29.16b, v0.16b // ............................................................|.l.........................................................................................................................................................|.l.......................................................................................................................
// str q0, [x2], #(4*16) // ............................................................|.........................................l.................................................................................................................|.........................................l...............................................................................
// rev64 v0.16b, v0.16b // ............................................................|........l..................................................................................................................................................|........l................................................................................................................
// eor v0.16b, v0.16b, v30.16b // ............................................................|.............l.............................................................................................................................................|.............l...........................................................................................................
// pmull v11.1q, v0.1d, v13.1d // ............................................................|.....................l.....................................................................................................................................|.....................l...................................................................................................
// eor v8.16b, v8.16b, v11.16b // ............................................................|.....................................................l.....................................................................................................|.....................................................l...................................................................
// pmull2 v11.1q, v0.2d, v13.2d // ............................................................|...................l.......................................................................................................................................|...................l.....................................................................................................
// eor v9.16b, v9.16b, v11.16b // ............................................................|..............................l............................................................................................................................|..............................l..........................................................................................
// ext v11.16b, v0.16b, v0.16b, #8 // ............................................................|......................l....................................................................................................................................|......................l..................................................................................................
// eor v11.16b, v11.16b, v0.16b // ............................................................|............................l..............................................................................................................................|............................l............................................................................................
// pmull2 v11.1q, v11.2d, v14.2d // ............................................................|..........................................l................................................................................................................|..........................................l..............................................................................
// eor v10.16b, v10.16b, v11.16b // ............................................................|..............................................l............................................................................................................|..............................................l..........................................................................
// eor v0.16b, v8.16b, v9.16b // ............................................................|...........................................................l...............................................................................................|...........................................................l.............................................................
// pmull v1.1q, v9.1d, v7.1d // ............................................................|....................................l......................................................................................................................|....................................l....................................................................................
// ext v9.16b, v9.16b, v9.16b, #8 // ............................................................|.......................................l...................................................................................................................|.......................................l.................................................................................
// eor v10.16b, v10.16b, v0.16b // ............................................................|..............................................................l............................................................................................|..............................................................l..........................................................
// eor v1.16b, v9.16b, v1.16b // ............................................................|............................................l..............................................................................................................|............................................l............................................................................
// eor v10.16b, v10.16b, v1.16b // ............................................................|...................................................................l.......................................................................................|...................................................................l.....................................................
// pmull v9.1q, v10.1d, v7.1d // .l..........................................................|................................................................................................l..........................................................|................................................................................................l........................
// eor v8.16b, v8.16b, v9.16b // ...............l............................................|..............................................................................................................l............................................|..............................................................................................................l..........
// ext v10.16b, v10.16b, v10.16b, #8 // ............................................................|........................................................................l..................................................................................|........................................................................l................................................
// eor v30.16b, v8.16b, v10.16b // ......................l.....................................|.....................................................................................................................l.....................................|.....................................................................................................................l...
// ext v30.16b, v30.16b, v30.16b, #8 // .........................l..................................|........................................................................................................................l..................................|........................................................................................................................l
// add w13, w13, #UNROLL // ............................................................|................................*..........................................................................................................................|................................*........................................................................................
sub count, count, #1
cbnz count, Lloop_unrolled_start
Lloop_unrolled_start_postamble:// end of loop kernel
// Instructions: 182
// Expected cycles: 96
// Expected IPC: 1.8958333333333333
aesr v31.16b, v18.16b // *...............................................................................................
eor v3.16B, v13.16B, v8.16B // *...............................................................................................
orr x19, x12, x17, lsl #32 // *...............................................................................................
pmull v12.1q, v2.1d, v6.1d // .*..............................................................................................
ldr q8, [x6, #80] // .*..............................................................................................
stp x11, x19, [sp, #STACK_BASE_AES_ST + 48] // .*.............................................................................................. // @slothy:writes=stack_3
mov d13, v2.d[1] // ..*.............................................................................................
pmull v0.1q, v0.1d, v1.1d // ..*.............................................................................................
rev w29, w10 // ..*.............................................................................................
rev64 v29.16B, v3.16B // ...*............................................................................................
aesr v31.16b, v19.16b // ...*............................................................................................
ldp x22, x27, [x0, #32] // ...*............................................................................................
pmull2 v5.1q, v5.2d, v11.2d // ....*...........................................................................................
eor v10.8B, v13.8B, v2.8B // ....*...........................................................................................
orr x9, x12, x29, lsl #32 // ....*...........................................................................................
eor v13.16B, v29.16B, v30.16B // .....*..........................................................................................
pmull2 v2.1q, v2.2d, v6.2d // .....*..........................................................................................
stp x11, x9, [sp, #STACK_BASE_AES_ST + 16] // .....*.......................................................................................... // @slothy:writes=stack_1
ldr q30, [sp, #STACK_BASE_AES_ST + 48] // ......*......................................................................................... // @slothy:reads=stack_3
aesr v31.16b, v20.16b // ......*.........................................................................................
eor x14, x22, x20 // ......*.........................................................................................
pmull v29.1q, v13.1d, v8.1d // .......*........................................................................................
eor v6.16B, v14.16B, v12.16B // .......*........................................................................................
eor x19, x27, x21 // .......*........................................................................................
str q3, [x2], #(4*16) // ........*.......................................................................................
aesr v31.16b, v21.16b // ........*.......................................................................................
stp x14, x19, [sp, #STACK_BASE_AES_ST + 32] // ........*....................................................................................... // @slothy:writes=stack_2
aesr v30.16b, v18.16b // .........*......................................................................................
eor v11.16B, v6.16B, v29.16B // .........*......................................................................................
ldp x9, x19, [x0, #16] // .........*......................................................................................
eor v4.16B, v5.16B, v4.16B // ..........*.....................................................................................
pmull2 v1.1q, v9.2d, v1.2d // ..........*.....................................................................................
eor x8, x25, x20 // ..........*.....................................................................................
ldr q3, [x6, #64] // ...........*....................................................................................
aesr v30.16b, v19.16b // ...........*....................................................................................
ldp x25, x10, [x0], #(4*16) // ...........*....................................................................................
ext v6.16B, v13.16B, v13.16B, #8 // ............*...................................................................................
pmull2 v14.1q, v13.2d, v8.2d // ............*...................................................................................
eor x29, x9, x20 // ............*...................................................................................
ldr q12, [sp, #STACK_BASE_AES_ST + 16] // .............*.................................................................................. // @slothy:reads=stack_1
aesr v30.16b, v20.16b // .............*..................................................................................
eor x27, x30, x21 // .............*..................................................................................
eor v8.16B, v0.16B, v1.16B // ..............*.................................................................................
pmull v10.1q, v10.1d, v3.1d // ..............*.................................................................................
eor x30, x25, x20 // ..............*.................................................................................
eor v9.16B, v6.16B, v13.16B // ...............*................................................................................
aesr v30.16b, v21.16b // ...............*................................................................................
stp x8, x27, [sp, #STACK_BASE_AES_ST + 48] // ...............*................................................................................ // @slothy:writes=stack_3
eor v1.16B, v8.16B, v10.16B // ................*...............................................................................
aesr v12.16b, v18.16b // ................*...............................................................................
eor x27, x10, x21 // ................*...............................................................................
eor v8.16B, v4.16B, v2.16B // .................*..............................................................................
aesr v30.16b, v22.16b // .................*..............................................................................
stp x11, x26, [sp, #STACK_BASE_AES_ST] // .................*.............................................................................. // @slothy:writes=stack_0
ldr q4, [sp, #STACK_BASE_AES_ST + 48] // ..................*............................................................................. // @slothy:reads=stack_3
aesr v12.16b, v19.16b // ..................*.............................................................................
eor x25, x19, x21 // ..................*.............................................................................
eor v5.16B, v8.16B, v14.16B // ...................*............................................................................
aesr v30.16b, v23.16b // ...................*............................................................................
stp x29, x25, [sp, #STACK_BASE_AES_ST + 16] // ...................*............................................................................ // @slothy:writes=stack_1
ldr q13, [x6, #64] // ....................*...........................................................................
aesr v12.16b, v20.16b // ....................*...........................................................................
aesr v30.16b, v24.16b // .....................*..........................................................................
add w13, w13, #UNROLL // .....................*..........................................................................
ldr q29, [sp, #STACK_BASE_AES_ST + 16] // ......................*......................................................................... // @slothy:reads=stack_1
pmull2 v3.1q, v9.2d, v3.2d // ......................*.........................................................................
ldr q9, [sp, #STACK_BASE_AES_ST] // .......................*........................................................................ // @slothy:reads=stack_0
aesr v30.16b, v25.16b // .......................*........................................................................
aesr v31.16b, v22.16b // ........................*.......................................................................
stp x30, x27, [sp, #STACK_BASE_AES_ST] // ........................*....................................................................... // @slothy:writes=stack_0
aesr v30.16b, v26.16b // .........................*......................................................................
aesr v12.16b, v21.16b // ..........................*.....................................................................
ldr q0, [x6, #16] // ..........................*.....................................................................
aesr v30.16b, v27.16b // ...........................*....................................................................
aesr v12.16b, v22.16b // ............................*...................................................................
aesr v30.16b, v28.16b // .............................*..................................................................
aesr v31.16b, v23.16b // ..............................*.................................................................
aesr v30.16b, v15.16b // ...............................*................................................................
aesr v31.16b, v24.16b // ................................*...............................................................
aesr v30.16b, v16.16b // .................................*..............................................................
aesr v31.16b, v25.16b // ..................................*.............................................................
aese v30.16b, v17.16b // ...................................*............................................................
aesr v31.16b, v26.16b // ....................................*...........................................................
aesr v12.16b, v23.16b // .....................................*..........................................................
eor v2.16B, v4.16B, v30.16B // .....................................*..........................................................
aesr v31.16b, v27.16b // ......................................*.........................................................
ext v8.16B, v5.16B, v5.16B, #8 // ......................................*.........................................................
pmull v4.1q, v5.1d, v7.1d // .......................................*........................................................
rev64 v14.16B, v2.16B // .......................................*........................................................
eor v6.16B, v11.16B, v5.16B // ........................................*.......................................................
aesr v31.16b, v28.16b // ........................................*.......................................................
mov d30, v14.d[1] // .........................................*......................................................
aesr v12.16b, v24.16b // .........................................*......................................................
aesr v31.16b, v15.16b // ..........................................*.....................................................
eor v10.16B, v8.16B, v4.16B // ..........................................*.....................................................
eor v8.8B, v30.8B, v14.8B // ...........................................*....................................................
aesr v9.16b, v18.16b // ...........................................*....................................................
str q2, [x2, #48] // ............................................*...................................................
aesr v31.16b, v16.16b // ............................................*...................................................
eor v2.16B, v1.16B, v3.16B // .............................................*..................................................
aesr v9.16b, v19.16b // .............................................*..................................................
ldr q4, [sp, #STACK_BASE_AES_ST + 32] // ..............................................*................................................. // @slothy:reads=stack_2
aesr v12.16b, v25.16b // ..............................................*.................................................
eor v30.16B, v2.16B, v6.16B // ...............................................*................................................
aesr v9.16b, v20.16b // ...............................................*................................................
ldr q2, [sp, #STACK_BASE_AES_ST] // ................................................*............................................... // @slothy:reads=stack_0
aesr v12.16b, v26.16b // ................................................*...............................................
eor v6.16B, v30.16B, v10.16B // .................................................*..............................................
aesr v9.16b, v21.16b // .................................................*..............................................
ldr q10, [x6, #80] // ..................................................*.............................................
aese v31.16b, v17.16b // ..................................................*.............................................
ext v5.16B, v6.16B, v6.16B, #8 // ...................................................*............................................
aesr v9.16b, v22.16b // ...................................................*............................................
pmull v6.1q, v6.1d, v7.1d // ....................................................*...........................................
aesr v9.16b, v23.16b // .....................................................*..........................................
eor v1.16B, v11.16B, v6.16B // ......................................................*.........................................
aesr v12.16b, v27.16b // ......................................................*.........................................
eor v3.16B, v4.16B, v31.16B // .......................................................*........................................
aesr v9.16b, v24.16b // .......................................................*........................................
eor v5.16B, v1.16B, v5.16B // ........................................................*.......................................
aesr v12.16b, v28.16b // ........................................................*.......................................
rev64 v4.16B, v3.16B // .........................................................*......................................
aesr v9.16b, v25.16b // .........................................................*......................................
str q3, [x2, #32] // ..........................................................*.....................................
aesr v12.16b, v15.16b // ..........................................................*.....................................
ext v1.16B, v5.16B, v5.16B, #8 // ...........................................................*....................................
aesr v9.16b, v26.16b // ...........................................................*....................................
ldr q6, [x6] // ............................................................*...................................
aesr v12.16b, v16.16b // ............................................................*...................................
aesr v9.16b, v27.16b // .............................................................*..................................
aese v12.16b, v17.16b // ..............................................................*.................................
ext v30.16B, v4.16B, v4.16B, #8 // ..............................................................*.................................
aesr v9.16b, v28.16b // ...............................................................*................................
eor v11.16B, v29.16B, v12.16B // ................................................................*...............................
pmull v3.1q, v14.1d, v6.1d // ................................................................*...............................
eor v12.16B, v30.16B, v4.16B // .................................................................*..............................
aesr v9.16b, v15.16b // .................................................................*..............................
rev64 v31.16B, v11.16B // ..................................................................*.............................
pmull2 v29.1q, v14.2d, v6.2d // ..................................................................*.............................
aesr v9.16b, v16.16b // ...................................................................*............................
ldr q5, [x6, #32] // ...................................................................*............................
mov d30, v31.d[1] // ....................................................................*...........................
pmull2 v12.1q, v12.2d, v0.2d // ....................................................................*...........................
str q11, [x2, #16] // .....................................................................*..........................
aese v9.16b, v17.16b // .....................................................................*..........................
eor v30.8B, v30.8B, v31.8B // ......................................................................*.........................
pmull v11.1q, v8.1d, v0.1d // ......................................................................*.........................
pmull2 v0.1q, v4.2d, v5.2d // .......................................................................*........................
eor v8.16B, v2.16B, v9.16B // .......................................................................*........................
eor v12.16B, v11.16B, v12.16B // ........................................................................*.......................
ldr q9, [x6, #48] // ........................................................................*.......................
pmull v4.1q, v4.1d, v5.1d // .........................................................................*......................
rev64 v2.16B, v8.16B // .........................................................................*......................
eor v29.16B, v29.16B, v0.16B // ..........................................................................*.....................
pmull v6.1q, v30.1d, v13.1d // ..........................................................................*.....................
pmull2 v0.1q, v31.2d, v9.2d // ...........................................................................*....................
eor v30.16B, v2.16B, v1.16B // ...........................................................................*....................
pmull v2.1q, v31.1d, v9.1d // ............................................................................*...................
eor v31.16B, v3.16B, v4.16B // ............................................................................*...................
pmull2 v5.1q, v30.2d, v10.2d // .............................................................................*..................
ext v11.16B, v30.16B, v30.16B, #8 // .............................................................................*..................
eor v4.16B, v29.16B, v0.16B // ..............................................................................*.................
eor v1.16B, v31.16B, v2.16B // ..............................................................................*.................
eor v3.16B, v11.16B, v30.16B // ...............................................................................*................
pmull v30.1q, v30.1d, v10.1d // ...............................................................................*................
eor v11.16B, v4.16B, v5.16B // ................................................................................*...............
eor v31.16B, v12.16B, v6.16B // ................................................................................*...............
eor v6.16B, v1.16B, v30.16B // .................................................................................*..............
pmull2 v10.1q, v3.2d, v13.2d // .................................................................................*..............
ext v29.16B, v11.16B, v11.16B, #8 // ..................................................................................*.............
pmull v3.1q, v11.1d, v7.1d // ..................................................................................*.............
eor v4.16B, v6.16B, v11.16B // ...................................................................................*............
eor v13.16B, v31.16B, v10.16B // ...................................................................................*............
eor v31.16B, v29.16B, v3.16B // .....................................................................................*..........
eor v11.16B, v13.16B, v4.16B // .....................................................................................*..........
eor v4.16B, v11.16B, v31.16B // .......................................................................................*........
pmull v31.1q, v4.1d, v7.1d // .........................................................................................*......
ext v4.16B, v4.16B, v4.16B, #8 // ..........................................................................................*.....
eor v11.16B, v6.16B, v31.16B // ...........................................................................................*....
eor v31.16B, v11.16B, v4.16B // .............................................................................................*..
str q8, [x2], #(4*16) // ...............................................................................................*
ext v30.16B, v31.16B, v31.16B, #8 // ...............................................................................................*
// original source code
// pmull v0.1q, v0.1d, v1.1d // .......*..............................................................................................................................................................................
// ldr q10, [x6, #80] // ....*.................................................................................................................................................................................
// eor v12.16B, v13.16B, v8.16B // .*....................................................................................................................................................................................
// pmull2 v8.1q, v2.2d, v6.2d // ................*.....................................................................................................................................................................
// orr x27, x12, x17, lsl #32 // ..*...................................................................................................................................................................................
// pmull v3.1q, v2.1d, v6.1d // ...*..................................................................................................................................................................................
// ldr q29, [x6, #64] // .................................*....................................................................................................................................................
// stp x11, x26, [sp, #STACK_BASE_AES_ST] // .....................................................*................................................................................................................................
// pmull2 v11.1q, v5.2d, v11.2d // ............*.........................................................................................................................................................................
// rev64 v6.16B, v12.16B // .........*............................................................................................................................................................................
// rev w8, w10 // ........*.............................................................................................................................................................................
// mov d13, v2.d[1] // ......*...............................................................................................................................................................................
// aesr v31.16b, v18.16b // *.....................................................................................................................................................................................
// stp x11, x27, [sp, #STACK_BASE_AES_ST + 48] // .....*................................................................................................................................................................................
// eor v6.16B, v6.16B, v30.16B // ...............*......................................................................................................................................................................
// pmull2 v1.1q, v9.2d, v1.2d // ...............................*......................................................................................................................................................
// eor v13.8B, v13.8B, v2.8B // .............*........................................................................................................................................................................
// aesr v31.16b, v19.16b // ..........*...........................................................................................................................................................................
// orr x28, x12, x8, lsl #32 // ..............*.......................................................................................................................................................................
// eor v30.16B, v11.16B, v4.16B // ..............................*.......................................................................................................................................................
// pmull2 v5.1q, v6.2d, v10.2d // .....................................*................................................................................................................................................
// ldr q11, [sp, #STACK_BASE_AES_ST + 48] // ..................*...................................................................................................................................................................
// pmull v10.1q, v6.1d, v10.1d // .....................*................................................................................................................................................................
// ext v2.16B, v6.16B, v6.16B, #8 // ....................................*.................................................................................................................................................
// aesr v31.16b, v20.16b // ...................*..................................................................................................................................................................
// pmull v4.1q, v13.1d, v29.1d // ...........................................*..........................................................................................................................................
// eor v30.16B, v30.16B, v8.16B // ...................................................*..................................................................................................................................
// eor x24, x30, x21 // .........................................*............................................................................................................................................
// aesr v31.16b, v21.16b // .........................*............................................................................................................................................................
// eor v6.16B, v2.16B, v6.16B // .............................................*........................................................................................................................................
// ldp x9, x22, [x0, #32] // ...........*..........................................................................................................................................................................
// eor v9.16B, v30.16B, v5.16B // .........................................................*............................................................................................................................
// aesr v11.16b, v18.16b // ...........................*..........................................................................................................................................................
// add w13, w13, #UNROLL // ...............................................................*......................................................................................................................
// aesr v31.16b, v22.16b // ....................................................................*.................................................................................................................
// ldr q8, [sp, #STACK_BASE_AES_ST] // ..................................................................*...................................................................................................................
// eor v1.16B, v0.16B, v1.16B // ..........................................*...........................................................................................................................................
// pmull v0.1q, v9.1d, v7.1d // .......................................................................................*..............................................................................................
// stp x11, x28, [sp, #STACK_BASE_AES_ST + 16] // .................*....................................................................................................................................................................
// aesr v31.16b, v23.16b // ............................................................................*.........................................................................................................
// ext v30.16B, v9.16B, v9.16B, #8 // ......................................................................................*...............................................................................................
// aesr v8.16b, v18.16b // ................................................................................................*.....................................................................................
// str q12, [x2], #(4*16) // ........................*.............................................................................................................................................................
// pmull2 v13.1q, v6.2d, v29.2d // .................................................................*....................................................................................................................
// eor v2.16B, v1.16B, v4.16B // ................................................*.....................................................................................................................................
// eor v12.16B, v30.16B, v0.16B // ..............................................................................................*.......................................................................................
// aesr v11.16b, v19.16b // ..................................*...................................................................................................................................................
// eor v2.16B, v2.16B, v13.16B // ...................................................................................................*..................................................................................
// aesr v8.16b, v19.16b // ....................................................................................................*.................................................................................
// eor v14.16B, v14.16B, v3.16B // ......................*...............................................................................................................................................................
// aesr v11.16b, v20.16b // ........................................*.............................................................................................................................................
// ldp x29, x30, [x0, #16] // .............................*........................................................................................................................................................
// ldr q4, [sp, #STACK_BASE_AES_ST + 16] // .......................................*..............................................................................................................................................
// aesr v31.16b, v24.16b // ..............................................................................*.......................................................................................................
// eor v30.16B, v14.16B, v10.16B // ............................*.........................................................................................................................................................
// aesr v8.16b, v20.16b // ........................................................................................................*.............................................................................
// ldr q1, [x6, #16] // ........................................................................*.............................................................................................................
// aesr v31.16b, v25.16b // ................................................................................*.....................................................................................................
// eor x8, x29, x20 // ......................................*...............................................................................................................................................
// aesr v4.16b, v18.16b // .................................................*....................................................................................................................................
// eor v14.16B, v30.16B, v9.16B // .........................................................................................*............................................................................................
// ldp x14, x23, [x0], #(4*16) // ...................................*..................................................................................................................................................
// aesr v8.16b, v21.16b // ............................................................................................................*.........................................................................
// eor v29.16B, v2.16B, v14.16B // .......................................................................................................*..............................................................................
// aesr v4.16b, v19.16b // .......................................................*..............................................................................................................................
// eor x30, x30, x21 // ........................................................*.............................................................................................................................
// aesr v11.16b, v21.16b // ..............................................*.......................................................................................................................................
// stp x8, x30, [sp, #STACK_BASE_AES_ST + 16] // ...........................................................*..........................................................................................................................
// eor v10.16B, v29.16B, v12.16B // ...........................................................................................................*..........................................................................
// aesr v4.16b, v20.16b // .............................................................*........................................................................................................................
// eor x27, x25, x20 // ................................*.....................................................................................................................................................
// aesr v11.16b, v22.16b // ....................................................*.................................................................................................................................
// eor x25, x14, x20 // ............................................*.........................................................................................................................................
// ext v9.16B, v10.16B, v10.16B, #8 // ...............................................................................................................*......................................................................
// aesr v31.16b, v26.16b // ..................................................................................*...................................................................................................
// aesr v11.16b, v23.16b // ..........................................................*...........................................................................................................................
// aesr v4.16b, v21.16b // .......................................................................*..............................................................................................................
// stp x27, x24, [sp, #STACK_BASE_AES_ST + 48] // ...............................................*......................................................................................................................................
// aesr v11.16b, v24.16b // ..............................................................*.......................................................................................................................
// aesr v31.16b, v27.16b // .....................................................................................*................................................................................................
// ldr q5, [sp, #STACK_BASE_AES_ST + 48] // ......................................................*...............................................................................................................................
// aesr v11.16b, v25.16b // ...................................................................*..................................................................................................................
// aesr v4.16b, v22.16b // ..........................................................................*...........................................................................................................
// aesr v31.16b, v28.16b // ..........................................................................................*...........................................................................................
// aesr v11.16b, v26.16b // ......................................................................*...............................................................................................................
// eor x19, x9, x20 // ....................*.................................................................................................................................................................
// aesr v31.16b, v15.16b // .............................................................................................*........................................................................................
// eor x30, x22, x21 // .......................*..............................................................................................................................................................
// aesr v11.16b, v27.16b // .........................................................................*............................................................................................................
// eor x17, x23, x21 // ..................................................*...................................................................................................................................
// aesr v4.16b, v23.16b // ...................................................................................*..................................................................................................
// aesr v11.16b, v28.16b // ...........................................................................*..........................................................................................................
// stp x19, x30, [sp, #STACK_BASE_AES_ST + 32] // ..........................*...........................................................................................................................................................
// aesr v31.16b, v16.16b // ..................................................................................................*...................................................................................
// stp x25, x17, [sp, #STACK_BASE_AES_ST] // .....................................................................*................................................................................................................
// aesr v11.16b, v15.16b // .............................................................................*........................................................................................................
// pmull v0.1q, v10.1d, v7.1d // .................................................................................................................*....................................................................
// ldr q2, [sp, #STACK_BASE_AES_ST + 32] // .....................................................................................................*................................................................................
// ldr q3, [sp, #STACK_BASE_AES_ST + 16] // ................................................................*.....................................................................................................................
// aesr v11.16b, v16.16b // ...............................................................................*......................................................................................................
// aese v31.16b, v17.16b // ..............................................................................................................*.......................................................................
// aesr v4.16b, v24.16b // ............................................................................................*.........................................................................................
// ldr q10, [x6, #32] // ............................................................................................................................................*.........................................
// aese v11.16b, v17.16b // .................................................................................*....................................................................................................
// eor v12.16B, v2.16B, v31.16B // .....................................................................................................................*................................................................
// aesr v4.16b, v25.16b // ......................................................................................................*...............................................................................
// eor v30.16B, v30.16B, v0.16B // ...................................................................................................................*..................................................................
// aesr v8.16b, v22.16b // ................................................................................................................*.....................................................................
// aesr v4.16b, v26.16b // ..........................................................................................................*...........................................................................
// eor v6.16B, v5.16B, v11.16B // ....................................................................................*.................................................................................................
// aesr v8.16b, v23.16b // ..................................................................................................................*...................................................................
// ldr q13, [sp, #STACK_BASE_AES_ST] // .........................................................................................................*............................................................................
// aesr v4.16b, v27.16b // ....................................................................................................................*.................................................................
// eor v11.16B, v30.16B, v9.16B // .......................................................................................................................*..............................................................
// rev64 v5.16B, v6.16B // ........................................................................................*.............................................................................................
// aesr v8.16b, v24.16b // ......................................................................................................................*...............................................................
// ext v30.16B, v11.16B, v11.16B, #8 // .............................................................................................................................*........................................................
// aesr v4.16b, v28.16b // ........................................................................................................................*.............................................................
// aesr v8.16b, v25.16b // ..........................................................................................................................*...........................................................
// str q6, [x2, #48] // .................................................................................................*....................................................................................
// aesr v4.16b, v15.16b // ............................................................................................................................*.........................................................
// str q12, [x2, #32] // ...........................................................................................................................*..........................................................
// aesr v8.16b, v26.16b // ..............................................................................................................................*.......................................................
// mov d2, v5.d[1] // ...........................................................................................*..........................................................................................
// aesr v4.16b, v16.16b // ................................................................................................................................*.....................................................
// rev64 v12.16B, v12.16B // .........................................................................................................................*............................................................
// ldr q11, [x6] // ...............................................................................................................................*......................................................
// aesr v8.16b, v27.16b // .................................................................................................................................*....................................................
// ext v9.16B, v12.16B, v12.16B, #8 // ...................................................................................................................................*..................................................
// aese v4.16b, v17.16b // ..................................................................................................................................*...................................................
// ldr q6, [x6, #48] // ......................................................................................................................................................*...............................
// aesr v8.16b, v28.16b // ....................................................................................................................................*.................................................
// eor v29.16B, v3.16B, v4.16B // .....................................................................................................................................*................................................
// pmull v14.1q, v5.1d, v11.1d // ......................................................................................................................................*...............................................
// aesr v8.16b, v15.16b // ........................................................................................................................................*.............................................
// eor v0.8B, v2.8B, v5.8B // ...............................................................................................*......................................................................................
// rev64 v2.16B, v29.16B // .........................................................................................................................................*............................................
// pmull v3.1q, v12.1d, v10.1d // .......................................................................................................................................................*..............................
// eor v9.16B, v9.16B, v12.16B // .......................................................................................................................................*..............................................
// aesr v8.16b, v16.16b // ...........................................................................................................................................*..........................................
// eor v14.16B, v14.16B, v3.16B // ..............................................................................................................................................................*.......................
// pmull2 v4.1q, v12.2d, v10.2d // ...................................................................................................................................................*..................................
// str q29, [x2, #16] // ...............................................................................................................................................*......................................
// aese v8.16b, v17.16b // ................................................................................................................................................*.....................................
// pmull v0.1q, v0.1d, v1.1d // ..................................................................................................................................................*...................................
// ldr q10, [x6, #80] // .............................................................................................................*........................................................................
// eor v12.16B, v13.16B, v8.16B // ....................................................................................................................................................*.................................
// pmull2 v8.1q, v2.2d, v6.2d // ...........................................................................................................................................................*..........................
// pmull v3.1q, v2.1d, v6.1d // .............................................................................................................................................................*........................
// ldr q29, [x6, #64] // ............................................................*.........................................................................................................................
// pmull2 v11.1q, v5.2d, v11.2d // ..........................................................................................................................................*...........................................
// rev64 v6.16B, v12.16B // ........................................................................................................................................................*.............................
// mov d13, v2.d[1] // .............................................................................................................................................*........................................
// eor v6.16B, v6.16B, v30.16B // ............................................................................................................................................................*.........................
// pmull2 v1.1q, v9.2d, v1.2d // ..............................................................................................................................................*.......................................
// eor v13.8B, v13.8B, v2.8B // .................................................................................................................................................*....................................
// eor v30.16B, v11.16B, v4.16B // .........................................................................................................................................................*............................
// pmull2 v5.1q, v6.2d, v10.2d // ...............................................................................................................................................................*......................
// pmull v10.1q, v6.1d, v10.1d // ....................................................................................................................................................................*.................
// ext v2.16B, v6.16B, v6.16B, #8 // ................................................................................................................................................................*.....................
// pmull v4.1q, v13.1d, v29.1d // ..........................................................................................................................................................*...........................
// eor v30.16B, v30.16B, v8.16B // .................................................................................................................................................................*....................
// eor v6.16B, v2.16B, v6.16B // ...................................................................................................................................................................*..................
// eor v9.16B, v30.16B, v5.16B // .....................................................................................................................................................................*................
// eor v1.16B, v0.16B, v1.16B // .....................................................................................................................................................*................................
// pmull v0.1q, v9.1d, v7.1d // ..........................................................................................................................................................................*...........
// ext v30.16B, v9.16B, v9.16B, #8 // .........................................................................................................................................................................*............
// str q12, [x2], #(4*16) // ....................................................................................................................................................................................*.
// pmull2 v13.1q, v6.2d, v29.2d // ........................................................................................................................................................................*.............
// eor v2.16B, v1.16B, v4.16B // ......................................................................................................................................................................*...............
// eor v12.16B, v30.16B, v0.16B // .............................................................................................................................................................................*........
// eor v2.16B, v2.16B, v13.16B // ............................................................................................................................................................................*.........
// eor v14.16B, v14.16B, v3.16B // ..................................................................................................................................................................*...................
// eor v30.16B, v14.16B, v10.16B // .......................................................................................................................................................................*..............
// eor v14.16B, v30.16B, v9.16B // ...........................................................................................................................................................................*..........
// eor v29.16B, v2.16B, v14.16B // ..............................................................................................................................................................................*.......
// eor v10.16B, v29.16B, v12.16B // ...............................................................................................................................................................................*......
// ext v9.16B, v10.16B, v10.16B, #8 // .................................................................................................................................................................................*....
// pmull v0.1q, v10.1d, v7.1d // ................................................................................................................................................................................*.....
// eor v30.16B, v30.16B, v0.16B // ..................................................................................................................................................................................*...
// eor v11.16B, v30.16B, v9.16B // ...................................................................................................................................................................................*..
// ext v30.16B, v11.16B, v11.16B, #8 // .....................................................................................................................................................................................*
b Lloop_unrolled_start_end
Lloop_unrolled_start_iter_1:
ldr q12, [x6]
ldr q13, [x6, #32]
ldr q14, [x6, #16]
ldp x22, x23, [x0, #(3*16)]
add w14, w13, #3
rev w14, w14
orr x14, x12, x14, lsl #32
stp x11, x14, [sp, #(STACK_BASE_AES_ST + 3*16)] // @slothy:writes=stack_3
ldr q0, [sp, #(STACK_BASE_AES_ST + 3*16)] // @slothy:reads=stack_3
aesr v0.16b, v18.16b
aesr v0.16b, v19.16b
aesr v0.16b, v20.16b
aesr v0.16b, v21.16b
aesr v0.16b, v22.16b
aesr v0.16b, v23.16b
aesr v0.16b, v24.16b
aesr v0.16b, v25.16b
aesr v0.16b, v26.16b
aesr v0.16b, v27.16b
aesr v0.16b, v28.16b
aesr v0.16b, v15.16b
aesr v0.16b, v16.16b
aese v0.16b, v17.16b
eor x22, x22, x20
eor x23, x23, x21
stp x22, x23, [sp, #(STACK_BASE_AES_ST + 3*16)] // @slothy:writes=stack_3
ldr q29, [sp, #(STACK_BASE_AES_ST + 3*16)] // @slothy:reads=stack_3
eor v0.16b, v29.16b, v0.16b
str q0, [x2, #(3*16)]
rev64 v0.16b, v0.16b
// Low product
pmull v8.1q, v0.1d, v12.1d
// High product
pmull2 v9.1q, v0.2d, v12.2d
// Middle product
mov d11, v0.d[1]
eor v11.8b, v11.8b, v0.8b
pmull v10.1q, v11.1d, v14.1d
ldp x22, x23, [x0, #(2*16)]
add w14, w13, #2
rev w14, w14
orr x14, x12, x14, lsl #32
stp x11, x14, [sp, #(STACK_BASE_AES_ST + 2*16)] // @slothy:writes=stack_2
ldr q0, [sp, #(STACK_BASE_AES_ST + 2*16)] // @slothy:reads=stack_2
aesr v0.16b, v18.16b
aesr v0.16b, v19.16b
aesr v0.16b, v20.16b
aesr v0.16b, v21.16b
aesr v0.16b, v22.16b
aesr v0.16b, v23.16b
aesr v0.16b, v24.16b
aesr v0.16b, v25.16b
aesr v0.16b, v26.16b
aesr v0.16b, v27.16b
aesr v0.16b, v28.16b
aesr v0.16b, v15.16b
aesr v0.16b, v16.16b
aese v0.16b, v17.16b
eor x22, x22, x20
eor x23, x23, x21
stp x22, x23, [sp, #(STACK_BASE_AES_ST + 2*16)] // @slothy:writes=stack_2
ldr q29, [sp, #(STACK_BASE_AES_ST + 2*16)] // @slothy:reads=stack_2
eor v0.16b, v29.16b, v0.16b
str q0, [x2, #(2*16)]
rev64 v0.16b, v0.16b
// Low product
pmull v11.1q, v0.1d, v13.1d
eor v8.16b, v8.16b, v11.16b
// High product
pmull2 v11.1q, v0.2d, v13.2d
eor v9.16b, v9.16b, v11.16b
// Middle product
ext v11.16b, v0.16b, v0.16b, #8
eor v11.16b, v11.16b, v0.16b
pmull2 v11.1q, v11.2d, v14.2d
eor v10.16b, v10.16b, v11.16b
ldr q12, [x6, #48]
ldr q13, [x6, #80]
ldr q14, [x6, #64]
ldp x22, x23, [x0, #(1*16)]
add w14, w13, #1
rev w14, w14
orr x14, x12, x14, lsl #32
stp x11, x14, [sp, #(STACK_BASE_AES_ST + 1*16)] // @slothy:writes=stack_1
ldr q0, [sp, #(STACK_BASE_AES_ST + 1*16)] // @slothy:reads=stack_1
aesr v0.16b, v18.16b
aesr v0.16b, v19.16b
aesr v0.16b, v20.16b
aesr v0.16b, v21.16b
aesr v0.16b, v22.16b
aesr v0.16b, v23.16b
aesr v0.16b, v24.16b
aesr v0.16b, v25.16b
aesr v0.16b, v26.16b
aesr v0.16b, v27.16b
aesr v0.16b, v28.16b
aesr v0.16b, v15.16b
aesr v0.16b, v16.16b
aese v0.16b, v17.16b
eor x22, x22, x20
eor x23, x23, x21
stp x22, x23, [sp, #(STACK_BASE_AES_ST + 1*16)] // @slothy:writes=stack_1
ldr q29, [sp, #(STACK_BASE_AES_ST + 1*16)] // @slothy:reads=stack_1
eor v0.16b, v29.16b, v0.16b
str q0, [x2, #(1*16)]
rev64 v0.16b, v0.16b
// Low product
pmull v11.1q, v0.1d, v12.1d
eor v8.16b, v8.16b, v11.16b
// High product
pmull2 v11.1q, v0.2d, v12.2d
eor v9.16b, v9.16b, v11.16b
// Middle product
mov d11, v0.d[1]
eor v11.8b, v11.8b, v0.8b
pmull v11.1q, v11.1d, v14.1d
eor v10.16b, v10.16b, v11.16b
ldp x22, x23, [x0], #(4*16)
add w14, w13, #0
rev w14, w14
orr x14, x12, x14, lsl #32
stp x11, x14, [sp, #(STACK_BASE_AES_ST + 0*16)] // @slothy:writes=stack_0
ldr q0, [sp, #(STACK_BASE_AES_ST + 0*16)] // @slothy:reads=stack_0
aesr v0.16b, v18.16b
aesr v0.16b, v19.16b
aesr v0.16b, v20.16b
aesr v0.16b, v21.16b
aesr v0.16b, v22.16b
aesr v0.16b, v23.16b
aesr v0.16b, v24.16b
aesr v0.16b, v25.16b
aesr v0.16b, v26.16b
aesr v0.16b, v27.16b
aesr v0.16b, v28.16b
aesr v0.16b, v15.16b
aesr v0.16b, v16.16b
aese v0.16b, v17.16b
eor x22, x22, x20
eor x23, x23, x21
stp x22, x23, [sp, #(STACK_BASE_AES_ST + 0*16)] // @slothy:writes=stack_0
ldr q29, [sp, #(STACK_BASE_AES_ST + 0*16)] // @slothy:reads=stack_0
eor v0.16b, v29.16b, v0.16b
str q0, [x2], #(4*16)
rev64 v0.16b, v0.16b
eor v0.16b, v0.16b, v30.16b
// Low product
pmull v11.1q, v0.1d, v13.1d
eor v8.16b, v8.16b, v11.16b
// High product
pmull2 v11.1q, v0.2d, v13.2d
eor v9.16b, v9.16b, v11.16b
// Middle product
ext v11.16b, v0.16b, v0.16b, #8
eor v11.16b, v11.16b, v0.16b
pmull2 v11.1q, v11.2d, v14.2d
eor v10.16b, v10.16b, v11.16b
eor v0.16b, v8.16b, v9.16b
pmull v1.1q, v9.1d, v7.1d
ext v9.16b, v9.16b, v9.16b, #8
eor v10.16b, v10.16b, v0.16b
eor v1.16b, v9.16b, v1.16b
eor v10.16b, v10.16b, v1.16b
pmull v9.1q, v10.1d, v7.1d
eor v8.16b, v8.16b, v9.16b
ext v10.16b, v10.16b, v10.16b, #8
eor v30.16b, v8.16b, v10.16b
ext v30.16b, v30.16b, v30.16b, #8
add w13, w13, #UNROLL
Lloop_unrolled_start_iter_1_end:
Lloop_unrolled_start_end:
Lloop_unrolled_end:
load_htable_12
cbz remainder, Lloop_1x_end
Lloop_1x_start:
ldp plain_lo, plain_hi, [input], #16
aes_full_block aes_st, plain, res, 0
str res_q, [output], #16
ghash_init_with_tag_0 res, Ht1, Ht12, tag
ghash_finalize tag
add ctr, ctr, #1
sub remainder, remainder, #1
cbnz remainder, Lloop_1x_start
Lloop_1x_end:
// Return number of bytes processed
mov x0, byte_len
// Store new authentication tag
rev64 tag.16b, tag.16b
str tag_q, [tag_ptr]
// Store updated counter
// rev32 rtmp_ctr.16b, rtmp_ctr.16b
// str rtmp_ctr_q, [ivec]
rev ctr_tmp_w, ctr
str ctr_tmp_w, [ivec, #12]
restore_vregs
restore_gprs
Lenc_postamble_end:
add sp, sp, #STACK_SIZE
ret
#endif
#endif // !OPENSSL_NO_ASM && defined(__AARCH64EL__) && defined(__APPLE__)
#if defined(__ELF__)
// See https: // www.airs.com/blog/archives/518.
.section .note.GNU-stack,"",%progbits
#endif