// 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 // This file was derived from the assembly generated from aesv8-gcm-armv8.pl, // written by Fangming Fang for the OpenSSL project, // and derived from https: // github.com/ARM-software/AArch64cryptolib, original // author Samuel Lee . // 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