diff --git a/examples/naive/aarch64/ntt_kyber_123_4567.s b/examples/naive/aarch64/ntt_kyber_123_4567.s index b6bc21a..0f2c9ae 100644 --- a/examples/naive/aarch64/ntt_kyber_123_4567.s +++ b/examples/naive/aarch64/ntt_kyber_123_4567.s @@ -26,92 +26,52 @@ // Needed to provide ASM_LOAD directive #include -// NOTE -// We use a lot of trivial macros to simplify the parsing burden for Slothy -// The macros are not unfolded by Slothy and thus interpreted as instructions, -// which are easier to parse due to e.g. the lack of size specifiers and simpler -// syntax for pre and post increment for loads and stores. -// -// Eventually, NeLight should include a proper parser for AArch64, -// but for initial investigations, the below is enough. - -.macro ldr_vo vec, base, offset - ldr qform_\vec, [\base, #\offset] -.endm - -.macro ldr_vi vec, base, inc - ldr qform_\vec, [\base], #\inc -.endm - -.macro str_vo vec, base, offset - str qform_\vec, [\base, #\offset] -.endm -.macro str_vi vec, base, inc - str qform_\vec, [\base], #\inc -.endm - -.macro vqrdmulh d,a,b - sqrdmulh \d\().8h, \a\().8h, \b\().8h -.endm -.macro vmlsq d,a,b,i - mls \d\().8h, \a\().8h, \b\().h[\i] -.endm -.macro vqrdmulhq d,a,b,i - sqrdmulh \d\().8h, \a\().8h, \b\().h[\i] -.endm -.macro vqdmulhq d,a,b,i - sqdmulh \d\().8h, \a\().8h, \b\().h[\i] -.endm -.macro vmulq d,a,b,i - mul \d\().8h, \a\().8h, \b\().h[\i] -.endm - .macro mulmodq dst, src, const, idx0, idx1 - vqrdmulhq t2, \src, \const, \idx1 - vmulq \dst, \src, \const, \idx0 - vmlsq \dst, t2, consts, 0 + sqrdmulh t2.8h, \src\().8h, \const\().h[\idx1] + mul \dst\().8h, \src\().8h, \const\().h[\idx0] + mls \dst\().8h, t2.8h, consts.h[0] .endm .macro mulmod dst, src, const, const_twisted - vqrdmulh t2, \src, \const_twisted - mul \dst\().8h, \src\().8h, \const\().8h - vmlsq \dst, t2, consts, 0 + sqrdmulh t2.8h, \src\().8h, \const_twisted\().8h + mul \dst\().8h, \src\().8h, \const\().8h + mls \dst\().8h, t2.8h, consts.h[0] .endm .macro ct_butterfly a, b, root, idx0, idx1 - mulmodq tmp, \b, \root, \idx0, \idx1 - sub \b\().8h, \a\().8h, tmp.8h - add \a\().8h, \a\().8h, tmp.8h + mulmodq tmp, \b, \root, \idx0, \idx1 + sub \b\().8h, \a\().8h, tmp.8h + add \a\().8h, \a\().8h, tmp.8h .endm .macro ct_butterfly_v a, b, root, root_twisted - mulmod tmp, \b, \root, \root_twisted - sub \b\().8h, \a\().8h, tmp.8h - add \a\().8h, \a\().8h, tmp.8h + mulmod tmp, \b, \root, \root_twisted + sub \b\().8h, \a\().8h, tmp.8h + add \a\().8h, \a\().8h, tmp.8h .endm .macro barrett_reduce a - vqdmulhq t0, \a, consts, 1 - srshr t0.8h, t0.8h, #11 - vmlsq \a, t0, consts, 0 + sqdmulh t0.8h, \a\().8h, consts.h[1] + srshr t0.8h, t0.8h, #11 + mls \a\().8h, t0.8h, consts.h[0] .endm .macro load_roots_123 - ldr_vi root0, r_ptr0, 32 - ldr_vo root1, r_ptr0, -16 + ldr q_root0, [r_ptr0], #32 + ldr q_root1, [r_ptr0, #-16] .endm .macro load_next_roots_45 - ldr_vi root0, r_ptr0, 16 + ldr q_root0, [r_ptr0], #16 .endm .macro load_next_roots_67 - ldr_vi root0, r_ptr1, (6*16) - ldr_vo root0_tw, r_ptr1, (-6*16 + 1*16) - ldr_vo root1, r_ptr1, (-6*16 + 2*16) - ldr_vo root1_tw, r_ptr1, (-6*16 + 3*16) - ldr_vo root2, r_ptr1, (-6*16 + 4*16) - ldr_vo root2_tw, r_ptr1, (-6*16 + 5*16) + ldr q_root0, [r_ptr1], #(6*16) + ldr q_root0_tw, [r_ptr1, #(-6*16 + 1*16)] + ldr q_root1, [r_ptr1, #(-6*16 + 2*16)] + ldr q_root1_tw, [r_ptr1, #(-6*16 + 3*16)] + ldr q_root2, [r_ptr1, #(-6*16 + 4*16)] + ldr q_root2_tw, [r_ptr1, #(-6*16 + 5*16)] .endm .macro transpose4 data @@ -133,7 +93,7 @@ trn2 \data_out\()3.4s, \data_in\()2.4s, \data_in\()3.4s .endm -.macro save_gprs // @slothy:no-unfold +.macro save_gprs sub sp, sp, #(16*6) stp x19, x20, [sp, #16*0] stp x19, x20, [sp, #16*0] @@ -144,7 +104,7 @@ str x29, [sp, #16*5] .endm -.macro restore_gprs // @slothy:no-unfold +.macro restore_gprs ldp x19, x20, [sp, #16*0] ldp x21, x22, [sp, #16*1] ldp x23, x24, [sp, #16*2] @@ -154,7 +114,7 @@ add sp, sp, #(16*6) .endm -.macro save_vregs // @slothy:no-unfold +.macro save_vregs sub sp, sp, #(16*4) stp d8, d9, [sp, #16*0] stp d10, d11, [sp, #16*1] @@ -162,7 +122,7 @@ stp d14, d15, [sp, #16*3] .endm -.macro restore_vregs // @slothy:no-unfold +.macro restore_vregs ldp d8, d9, [sp, #16*0] ldp d10, d11, [sp, #16*1] ldp d12, d13, [sp, #16*2] @@ -173,19 +133,19 @@ #define STACK_SIZE 16 #define STACK0 0 -.macro restore a, loc // @slothy:no-unfold - ldr \a, [sp, #\loc\()] +.macro restore a, loc + ldr \a, [sp, #\loc] .endm -.macro save loc, a // @slothy:no-unfold - str \a, [sp, #\loc\()] +.macro save loc, a + str \a, [sp, #\loc] .endm -.macro push_stack // @slothy:no-unfold +.macro push_stack save_gprs save_vregs sub sp, sp, #STACK_SIZE .endm -.macro pop_stack // @slothy:no-unfold +.macro pop_stack add sp, sp, #STACK_SIZE restore_vregs restore_gprs @@ -194,24 +154,7 @@ .data .p2align 4 roots: -#include "ntt_kyber_123_45_67_twiddles.s" -.text - - .global ntt_kyber_123_4567 - .global _ntt_kyber_123_4567 - -.p2align 4 -const_addr: .short 3329 - .short 20159 - .short 0 - .short 0 - .short 0 - .short 0 - .short 0 - .short 0 -ntt_kyber_123_4567: -_ntt_kyber_123_4567: - push_stack + #include "ntt_kyber_123_45_67_twiddles.s" in .req x0 inp .req x1 @@ -220,39 +163,6 @@ _ntt_kyber_123_4567: r_ptr1 .req x4 xtmp .req x5 - qform_v0 .req q0 - qform_v1 .req q1 - qform_v2 .req q2 - qform_v3 .req q3 - qform_v4 .req q4 - qform_v5 .req q5 - qform_v6 .req q6 - qform_v7 .req q7 - qform_v8 .req q8 - qform_v9 .req q9 - qform_v10 .req q10 - qform_v11 .req q11 - qform_v12 .req q12 - qform_v13 .req q13 - qform_v14 .req q14 - qform_v15 .req q15 - qform_v16 .req q16 - qform_v17 .req q17 - qform_v18 .req q18 - qform_v19 .req q19 - qform_v20 .req q20 - qform_v21 .req q21 - qform_v22 .req q22 - qform_v23 .req q23 - qform_v24 .req q24 - qform_v25 .req q25 - qform_v26 .req q26 - qform_v27 .req q27 - qform_v28 .req q28 - qform_v29 .req q29 - qform_v30 .req q30 - qform_v31 .req q31 - data0 .req v8 data1 .req v9 data2 .req v10 @@ -262,32 +172,14 @@ _ntt_kyber_123_4567: data6 .req v14 data7 .req v15 - x_00 .req x10 - x_01 .req x11 - x_10 .req x12 - x_11 .req x13 - x_20 .req x14 - x_21 .req x15 - x_30 .req x16 - x_31 .req x17 - - xt_00 .req x_00 - xt_01 .req x_20 - xt_10 .req x_10 - xt_11 .req x_30 - xt_20 .req x_01 - xt_21 .req x_21 - xt_30 .req x_11 - xt_31 .req x_31 - - qform_data0 .req q8 - qform_data1 .req q9 - qform_data2 .req q10 - qform_data3 .req q11 - qform_data4 .req q12 - qform_data5 .req q13 - qform_data6 .req q14 - qform_data7 .req q15 + q_data0 .req q8 + q_data1 .req q9 + q_data2 .req q10 + q_data3 .req q11 + q_data4 .req q12 + q_data5 .req q13 + q_data6 .req q14 + q_data7 .req q15 root0 .req v0 root1 .req v1 @@ -296,15 +188,15 @@ _ntt_kyber_123_4567: root1_tw .req v5 root2_tw .req v6 - consts .req v7 - qform_consts .req q7 + q_root0 .req q0 + q_root1 .req q1 + q_root2 .req q2 + q_root0_tw .req q4 + q_root1_tw .req q5 + q_root2_tw .req q6 - qform_root0 .req q0 - qform_root1 .req q1 - qform_root2 .req q2 - qform_root0_tw .req q4 - qform_root1_tw .req q5 - qform_root2_tw .req q6 + consts .req v7 + q_consts .req q7 tmp .req v24 t0 .req v25 @@ -312,13 +204,32 @@ _ntt_kyber_123_4567: t2 .req v27 t3 .req v28 + .text + .global ntt_kyber_123_4567 + .global _ntt_kyber_123_4567 + +.p2align 4 +const_addr: + .short 3329 + .short 20159 + .short 0 + .short 0 + .short 0 + .short 0 + .short 0 + .short 0 + +ntt_kyber_123_4567: +_ntt_kyber_123_4567: + push_stack + ASM_LOAD(r_ptr0, roots) ASM_LOAD(r_ptr1, roots_l56) - ASM_LOAD(xtmp, const_addr) + ld1 {consts.8h}, [xtmp] - save STACK0, in + str in, [sp, #STACK0] // @slothy:writes=STACK0 mov count, #4 load_roots_123 @@ -326,14 +237,14 @@ _ntt_kyber_123_4567: .p2align 2 layer123_start: - ldr_vo data0, in, 0 - ldr_vo data1, in, (1*(512/8)) - ldr_vo data2, in, (2*(512/8)) - ldr_vo data3, in, (3*(512/8)) - ldr_vo data4, in, (4*(512/8)) - ldr_vo data5, in, (5*(512/8)) - ldr_vo data6, in, (6*(512/8)) - ldr_vo data7, in, (7*(512/8)) + ldr q_data0, [in, #0] + ldr q_data1, [in, #(1*(512/8))] + ldr q_data2, [in, #(2*(512/8))] + ldr q_data3, [in, #(3*(512/8))] + ldr q_data4, [in, #(4*(512/8))] + ldr q_data5, [in, #(5*(512/8))] + ldr q_data6, [in, #(6*(512/8))] + ldr q_data7, [in, #(7*(512/8))] ct_butterfly data0, data4, root0, 0, 1 ct_butterfly data1, data5, root0, 0, 1 @@ -350,27 +261,28 @@ layer123_start: ct_butterfly data4, data5, root1, 2, 3 ct_butterfly data6, data7, root1, 4, 5 - str_vi data0, in, (16) - str_vo data1, in, (-16 + 1*(512/8)) - str_vo data2, in, (-16 + 2*(512/8)) - str_vo data3, in, (-16 + 3*(512/8)) - str_vo data4, in, (-16 + 4*(512/8)) - str_vo data5, in, (-16 + 5*(512/8)) - str_vo data6, in, (-16 + 6*(512/8)) - str_vo data7, in, (-16 + 7*(512/8)) + str q_data0, [in], #(16) + str q_data1, [in, #(-16 + 1*(512/8))] + str q_data2, [in, #(-16 + 2*(512/8))] + str q_data3, [in, #(-16 + 3*(512/8))] + str q_data4, [in, #(-16 + 4*(512/8))] + str q_data5, [in, #(-16 + 5*(512/8))] + str q_data6, [in, #(-16 + 6*(512/8))] + str q_data7, [in, #(-16 + 7*(512/8))] subs count, count, #1 cbnz count, layer123_start - restore inp, STACK0 + ldr inp, [sp, #STACK0] // @slothy:reads=STACK0 mov count, #8 .p2align 2 layer4567_start: - ldr_vo data0, inp, (16*0) - ldr_vo data1, inp, (16*1) - ldr_vo data2, inp, (16*2) - ldr_vo data3, inp, (16*3) + + ldr q_data0, [inp, #(16*0)] + ldr q_data1, [inp, #(16*1)] + ldr q_data2, [inp, #(16*2)] + ldr q_data3, [inp, #(16*3)] load_next_roots_45 @@ -391,10 +303,11 @@ layer4567_start: barrett_reduce data1 barrett_reduce data2 barrett_reduce data3 + st4 {data0.4S, data1.4S, data2.4S, data3.4S}, [inp], #64 subs count, count, #1 cbnz count, layer4567_start - pop_stack - ret + pop_stack + ret diff --git a/examples/opt/aarch64/ntt_kyber_123_4567_opt_a55.s b/examples/opt/aarch64/ntt_kyber_123_4567_opt_a55.s index 95fd739..cca9bb6 100644 --- a/examples/opt/aarch64/ntt_kyber_123_4567_opt_a55.s +++ b/examples/opt/aarch64/ntt_kyber_123_4567_opt_a55.s @@ -26,120 +26,74 @@ // Needed to provide ASM_LOAD directive #include -// NOTE -// We use a lot of trivial macros to simplify the parsing burden for Slothy -// The macros are not unfolded by Slothy and thus interpreted as instructions, -// which are easier to parse due to e.g. the lack of size specifiers and simpler -// syntax for pre and post increment for loads and stores. -// -// Eventually, NeLight should include a proper parser for AArch64, -// but for initial investigations, the below is enough. - -.macro ldr_vo vec, base, offset // slothy:no-unfold - ldr qform_\vec, [\base, #\offset] -.endm - -.macro ldr_vi vec, base, inc // slothy:no-unfold - ldr qform_\vec, [\base], #\inc -.endm - -.macro str_vo vec, base, offset // slothy:no-unfold - str qform_\vec, [\base, #\offset] -.endm -.macro str_vi vec, base, inc // slothy:no-unfold - str qform_\vec, [\base], #\inc -.endm - -.macro vqrdmulh d,a,b - sqrdmulh \d\().8h, \a\().8h, \b\().8h -.endm -.macro vmlsq d,a,b,i - mls \d\().8h, \a\().8h, \b\().h[\i] -.endm -.macro vqrdmulhq d,a,b,i - sqrdmulh \d\().8h, \a\().8h, \b\().h[\i] -.endm -.macro vqdmulhq d,a,b,i - sqdmulh \d\().8h, \a\().8h, \b\().h[\i] -.endm -.macro vmulq d,a,b,i - mul \d\().8h, \a\().8h, \b\().h[\i] -.endm - .macro mulmodq dst, src, const, idx0, idx1 - vmulq \dst, \src, \const, \idx0 - vqrdmulhq \src, \src, \const, \idx1 - vmlsq \dst, \src, consts, 0 + sqrdmulh t2.8h, \src\().8h, \const\().h[\idx1] + mul \dst\().8h, \src\().8h, \const\().h[\idx0] + mls \dst\().8h, t2.8h, consts.h[0] .endm .macro mulmod dst, src, const, const_twisted - mul \dst\().8h, \src\().8h, \const\().8h - vqrdmulh \src, \src, \const_twisted - vmlsq \dst, \src, consts, 0 + sqrdmulh t2.8h, \src\().8h, \const_twisted\().8h + mul \dst\().8h, \src\().8h, \const\().8h + mls \dst\().8h, t2.8h, consts.h[0] .endm .macro ct_butterfly a, b, root, idx0, idx1 - mulmodq tmp, \b, \root, \idx0, \idx1 - sub \b\().8h, \a\().8h, tmp.8h - add \a\().8h, \a\().8h, tmp.8h -.endm - -.macro mulmod_v dst, src, const, const_twisted - mul \dst\().8h, \src\().8h, \const\().8h - vqrdmulh \src, \src, \const_twisted - vmlsq \dst, \src, consts, 0 + mulmodq tmp, \b, \root, \idx0, \idx1 + sub \b\().8h, \a\().8h, tmp.8h + add \a\().8h, \a\().8h, tmp.8h .endm .macro ct_butterfly_v a, b, root, root_twisted - mulmod tmp, \b, \root, \root_twisted - sub \b\().8h, \a\().8h, tmp.8h - add \a\().8h, \a\().8h, tmp.8h + mulmod tmp, \b, \root, \root_twisted + sub \b\().8h, \a\().8h, tmp.8h + add \a\().8h, \a\().8h, tmp.8h .endm .macro barrett_reduce a - vqdmulhq t0, \a, consts, 1 - srshr t0.8h, t0.8h, #11 - vmlsq \a, t0, consts, 0 + sqdmulh t0.8h, \a\().8h, consts.h[1] + srshr t0.8h, t0.8h, #11 + mls \a\().8h, t0.8h, consts.h[0] .endm .macro load_roots_123 - ldr_vi root0, r_ptr0, 32 - ldr_vo root1, r_ptr0, -16 + ldr q_root0, [r_ptr0], #32 + ldr q_root1, [r_ptr0, #-16] .endm .macro load_next_roots_45 - ldr_vi root0, r_ptr0, 16 + ldr q_root0, [r_ptr0], #16 .endm .macro load_next_roots_67 - ldr_vi root0, r_ptr1, (6*16) - ldr_vo root0_tw, r_ptr1, (-6*16 + 1*16) - ldr_vo root1, r_ptr1, (-6*16 + 2*16) - ldr_vo root1_tw, r_ptr1, (-6*16 + 3*16) - ldr_vo root2, r_ptr1, (-6*16 + 4*16) - ldr_vo root2_tw, r_ptr1, (-6*16 + 5*16) + ldr q_root0, [r_ptr1], #(6*16) + ldr q_root0_tw, [r_ptr1, #(-6*16 + 1*16)] + ldr q_root1, [r_ptr1, #(-6*16 + 2*16)] + ldr q_root1_tw, [r_ptr1, #(-6*16 + 3*16)] + ldr q_root2, [r_ptr1, #(-6*16 + 4*16)] + ldr q_root2_tw, [r_ptr1, #(-6*16 + 5*16)] .endm .macro transpose4 data - trn1 t0.4s, \data\()0\().4s, \data\()1\().4s - trn2 t1.4s, \data\()0\().4s, \data\()1\().4s - trn1 t2.4s, \data\()2\().4s, \data\()3\().4s - trn2 t3.4s, \data\()2\().4s, \data\()3\().4s - - trn2 \data\()2\().2d, t0.2d, t2.2d - trn2 \data\()3\().2d, t1.2d, t3.2d - trn1 \data\()0\().2d, t0.2d, t2.2d - trn1 \data\()1\().2d, t1.2d, t3.2d + trn1 t0.4s, \data\()0.4s, \data\()1.4s + trn2 t1.4s, \data\()0.4s, \data\()1.4s + trn1 t2.4s, \data\()2.4s, \data\()3.4s + trn2 t3.4s, \data\()2.4s, \data\()3.4s + + trn2 \data\()2.2d, t0.2d, t2.2d + trn2 \data\()3.2d, t1.2d, t3.2d + trn1 \data\()0.2d, t0.2d, t2.2d + trn1 \data\()1.2d, t1.2d, t3.2d .endm .macro transpose_single data_out, data_in - trn1 \data_out\()0\().4s, \data_in\()0\().4s, \data_in\()1\().4s - trn2 \data_out\()1\().4s, \data_in\()0\().4s, \data_in\()1\().4s - trn1 \data_out\()2\().4s, \data_in\()2\().4s, \data_in\()3\().4s - trn2 \data_out\()3\().4s, \data_in\()2\().4s, \data_in\()3\().4s + trn1 \data_out\()0.4s, \data_in\()0.4s, \data_in\()1.4s + trn2 \data_out\()1.4s, \data_in\()0.4s, \data_in\()1.4s + trn1 \data_out\()2.4s, \data_in\()2.4s, \data_in\()3.4s + trn2 \data_out\()3.4s, \data_in\()2.4s, \data_in\()3.4s .endm -.macro save_gprs // slothy:no-unfold +.macro save_gprs sub sp, sp, #(16*6) stp x19, x20, [sp, #16*0] stp x19, x20, [sp, #16*0] @@ -150,7 +104,7 @@ str x29, [sp, #16*5] .endm -.macro restore_gprs // slothy:no-unfold +.macro restore_gprs ldp x19, x20, [sp, #16*0] ldp x21, x22, [sp, #16*1] ldp x23, x24, [sp, #16*2] @@ -160,7 +114,7 @@ add sp, sp, #(16*6) .endm -.macro save_vregs // slothy:no-unfold +.macro save_vregs sub sp, sp, #(16*4) stp d8, d9, [sp, #16*0] stp d10, d11, [sp, #16*1] @@ -168,7 +122,7 @@ stp d14, d15, [sp, #16*3] .endm -.macro restore_vregs // slothy:no-unfold +.macro restore_vregs ldp d8, d9, [sp, #16*0] ldp d10, d11, [sp, #16*1] ldp d12, d13, [sp, #16*2] @@ -179,19 +133,19 @@ #define STACK_SIZE 16 #define STACK0 0 -.macro restore a, loc // slothy:no-unfold - ldr \a, [sp, #\loc\()] +.macro restore a, loc + ldr \a, [sp, #\loc] .endm -.macro save loc, a // slothy:no-unfold - str \a, [sp, #\loc\()] +.macro save loc, a + str \a, [sp, #\loc] .endm -.macro push_stack // slothy:no-unfold +.macro push_stack save_gprs save_vregs sub sp, sp, #STACK_SIZE .endm -.macro pop_stack // slothy:no-unfold +.macro pop_stack add sp, sp, #STACK_SIZE restore_vregs restore_gprs @@ -200,24 +154,7 @@ .data .p2align 4 roots: -#include "ntt_kyber_123_45_67_twiddles.s" -.text - - .global ntt_kyber_123_4567_opt_a55 - .global _ntt_kyber_123_4567_opt_a55 - -.p2align 4 -const_addr: .short 3329 - .short 20159 - .short 0 - .short 0 - .short 0 - .short 0 - .short 0 - .short 0 -ntt_kyber_123_4567_opt_a55: -_ntt_kyber_123_4567_opt_a55: - push_stack + #include "ntt_kyber_123_45_67_twiddles.s" in .req x0 inp .req x1 @@ -226,39 +163,6 @@ _ntt_kyber_123_4567_opt_a55: r_ptr1 .req x4 xtmp .req x5 - qform_v0 .req q0 - qform_v1 .req q1 - qform_v2 .req q2 - qform_v3 .req q3 - qform_v4 .req q4 - qform_v5 .req q5 - qform_v6 .req q6 - qform_v7 .req q7 - qform_v8 .req q8 - qform_v9 .req q9 - qform_v10 .req q10 - qform_v11 .req q11 - qform_v12 .req q12 - qform_v13 .req q13 - qform_v14 .req q14 - qform_v15 .req q15 - qform_v16 .req q16 - qform_v17 .req q17 - qform_v18 .req q18 - qform_v19 .req q19 - qform_v20 .req q20 - qform_v21 .req q21 - qform_v22 .req q22 - qform_v23 .req q23 - qform_v24 .req q24 - qform_v25 .req q25 - qform_v26 .req q26 - qform_v27 .req q27 - qform_v28 .req q28 - qform_v29 .req q29 - qform_v30 .req q30 - qform_v31 .req q31 - data0 .req v8 data1 .req v9 data2 .req v10 @@ -268,32 +172,14 @@ _ntt_kyber_123_4567_opt_a55: data6 .req v14 data7 .req v15 - x_00 .req x10 - x_01 .req x11 - x_10 .req x12 - x_11 .req x13 - x_20 .req x14 - x_21 .req x15 - x_30 .req x16 - x_31 .req x17 - - xt_00 .req x_00 - xt_01 .req x_20 - xt_10 .req x_10 - xt_11 .req x_30 - xt_20 .req x_01 - xt_21 .req x_21 - xt_30 .req x_11 - xt_31 .req x_31 - - qform_data0 .req q8 - qform_data1 .req q9 - qform_data2 .req q10 - qform_data3 .req q11 - qform_data4 .req q12 - qform_data5 .req q13 - qform_data6 .req q14 - qform_data7 .req q15 + q_data0 .req q8 + q_data1 .req q9 + q_data2 .req q10 + q_data3 .req q11 + q_data4 .req q12 + q_data5 .req q13 + q_data6 .req q14 + q_data7 .req q15 root0 .req v0 root1 .req v1 @@ -302,15 +188,15 @@ _ntt_kyber_123_4567_opt_a55: root1_tw .req v5 root2_tw .req v6 - consts .req v7 - qform_consts .req q7 + q_root0 .req q0 + q_root1 .req q1 + q_root2 .req q2 + q_root0_tw .req q4 + q_root1_tw .req q5 + q_root2_tw .req q6 - qform_root0 .req q0 - qform_root1 .req q1 - qform_root2 .req q2 - qform_root0_tw .req q4 - qform_root1_tw .req q5 - qform_root2_tw .req q6 + consts .req v7 + q_consts .req q7 tmp .req v24 t0 .req v25 @@ -318,1029 +204,750 @@ _ntt_kyber_123_4567_opt_a55: t2 .req v27 t3 .req v28 + .text + .global ntt_kyber_123_4567_opt_a55 + .global _ntt_kyber_123_4567_opt_a55 + +.p2align 4 +const_addr: + .short 3329 + .short 20159 + .short 0 + .short 0 + .short 0 + .short 0 + .short 0 + .short 0 + +ntt_kyber_123_4567_opt_a55: +_ntt_kyber_123_4567_opt_a55: + push_stack + ASM_LOAD(r_ptr0, roots) ASM_LOAD(r_ptr1, roots_l56) - ASM_LOAD(xtmp, const_addr) + ld1 {consts.8h}, [xtmp] - save STACK0, in + str in, [sp, #STACK0] // @slothy:writes=STACK0 mov count, #4 load_roots_123 .p2align 2 - ldr_vo v29, x0, 0 // *......... - // gap // .......... - // gap // .......... - // gap // .......... - ldr_vo v17, x0, 64 // .*........ - // gap // .......... - // gap // .......... - // gap // .......... - ldr_vo v10, x0, 128 // ..*....... - // gap // .......... - // gap // .......... - // gap // .......... - ldr_vo v15, x0, 192 // ...*...... - // gap // .......... - // gap // .......... - // gap // .......... - ldr_vo v11, x0, 256 // ....*..... - // gap // .......... - // gap // .......... - // gap // .......... - ldr_vo v24, x0, 448 // .......*.. - // gap // .......... - // gap // .......... - // gap // .......... - sqrdmulh v25.8H, v11.8H, v0.H[1] // ......*... - // gap // .......... - ldr_vo v2, x0, 320 // .....*.... - // gap // .......... - // gap // .......... - // gap // .......... - sqrdmulh v30.8H, v24.8H, v0.H[1] // .........* - // gap // .......... - ldr_vo v9, x0, 384 // ........*. - // gap // .......... - - // original source code - // ldr_vo v29, x0, 0 // *......... || *................ - // ldr_vo v17, x0, 64 // .*........ || ..*.............. - // ldr_vo v10, x0, 128 // ..*....... || ....*............ - // ldr_vo v15, x0, 192 // ...*...... || ......*.......... - // ldr_vo v11, x0, 256 // ....*..... || ........*........ - // ldr_vo v2, x0, 320 // .......*.. || .............*... - // sqrdmulh v25.8H, v11.8H, v0.H[1] // ......*... || ............*.... - // ldr_vo v24, x0, 448 // .....*.... || ..........*...... - // ldr_vo v9, x0, 384 // .........* || ................* - // sqrdmulh v30.8H, v24.8H, v0.H[1] // ........*. || ...............*. - + // Instructions: 10 + // Expected cycles: 17 + // Expected IPC: 0.59 + // + // Cycle bound: 17.0 + // IPC bound: 0.59 + // + // Wall time: 0.01s + // User time: 0.01s + // + // ----- cycle (expected) ------> + // 0 25 + // |------------------------|---- + ldr q10, [x0, #0] // *............................. + ldr q5, [x0, #64] // ..*........................... + ldr q18, [x0, #128] // ....*......................... + ldr q15, [x0, #192] // ......*....................... + ldr q12, [x0, #256] // ........*..................... + ldr q23, [x0, #448] // ..........*................... + mul v16.8H, v12.8H, v0.H[0] // ............*................. + ldr q9, [x0, #320] // .............*................ + mul v8.8H, v23.8H, v0.H[0] // ...............*.............. + ldr q31, [x0, #384] // ................*............. + + // ------ cycle (expected) ------> + // 0 25 + // |------------------------|----- + // ldr q10, [x0, #0] // *.............................. + // ldr q5, [x0, #64] // ..*............................ + // ldr q18, [x0, #128] // ....*.......................... + // ldr q15, [x0, #192] // ......*........................ + // ldr q12, [x0, #256] // ........*...................... + // ldr q9, [x0, #320] // .............*................. + // mul v16.8H, v12.8H, v0.H[0] // ............*.................. + // ldr q23, [x0, #448] // ..........*.................... + // ldr q31, [x0, #384] // ................*.............. + // mul v8.8H, v23.8H, v0.H[0] // ...............*............... + sub count, count, #1 -.p2align 2 layer123_start: - mul v11.8H, v11.8H, v0.H[0] // ........*................................................................... - // gap // ............................................................................ - mul v18.8H, v2.8H, v0.H[0] // .............*.............................................................. - // gap // ............................................................................ - sqrdmulh v6.8H, v2.8H, v0.H[1] // ..............*............................................................. - // gap // ............................................................................ - mul v20.8H, v9.8H, v0.H[0] // ..................*......................................................... - // gap // ............................................................................ - mls v11.8H, v25.8H, v7.H[0] // ..........*................................................................. - // gap // ............................................................................ - sqrdmulh v2.8H, v9.8H, v0.H[1] // ...................*........................................................ - // gap // ............................................................................ - mls v18.8H, v6.8H, v7.H[0] // ...............*............................................................ - // gap // ............................................................................ - mul v6.8H, v24.8H, v0.H[0] // .......................*.................................................... - // gap // ............................................................................ - sub v25.8H, v29.8H, v11.8H // ...........*................................................................ - // gap // ............................................................................ - mls v20.8H, v2.8H, v7.H[0] // ....................*....................................................... - // gap // ............................................................................ - add v11.8H, v29.8H, v11.8H // ............*............................................................... - // gap // ............................................................................ - sub v2.8H, v17.8H, v18.8H // ................*........................................................... - // gap // ............................................................................ - add v18.8H, v17.8H, v18.8H // .................*.......................................................... - // gap // ............................................................................ - sub v24.8H, v10.8H, v20.8H // .....................*...................................................... - // gap // ............................................................................ - add v20.8H, v10.8H, v20.8H // ......................*..................................................... - // gap // ............................................................................ - mls v6.8H, v30.8H, v7.H[0] // .........................*.................................................. - // gap // ............................................................................ - mul v10.8H, v24.8H, v0.H[4] // ......................................*..................................... - // gap // ............................................................................ - sqrdmulh v24.8H, v24.8H, v0.H[5] // .......................................*.................................... - // gap // ............................................................................ - mul v29.8H, v20.8H, v0.H[2] // ............................*............................................... - // gap // ............................................................................ - sub v17.8H, v15.8H, v6.8H // ..........................*................................................. - // gap // ............................................................................ - add v6.8H, v15.8H, v6.8H // ...........................*................................................ - // gap // ............................................................................ - mls v10.8H, v24.8H, v7.H[0] // ........................................*................................... - // gap // ............................................................................ - sqrdmulh v20.8H, v20.8H, v0.H[3] // .............................*.............................................. - // gap // ............................................................................ - mul v24.8H, v17.8H, v0.H[4] // ...........................................*................................ - // gap // ............................................................................ - sqrdmulh v17.8H, v17.8H, v0.H[5] // ............................................*............................... - // gap // ............................................................................ - sub v15.8H, v25.8H, v10.8H // .........................................*.................................. - // gap // ............................................................................ - add v25.8H, v25.8H, v10.8H // ..........................................*................................. - // gap // ............................................................................ - mls v29.8H, v20.8H, v7.H[0] // ..............................*............................................. - // gap // ............................................................................ - mul v20.8H, v6.8H, v0.H[2] // .................................*.......................................... - // gap // ............................................................................ - mls v24.8H, v17.8H, v7.H[0] // .............................................*.............................. - // gap // ............................................................................ - sqrdmulh v6.8H, v6.8H, v0.H[3] // ..................................*......................................... - // gap // ............................................................................ - sub v10.8H, v11.8H, v29.8H // ...............................*............................................ - // gap // ............................................................................ - add v11.8H, v11.8H, v29.8H // ................................*........................................... - // gap // ............................................................................ - sub v29.8H, v2.8H, v24.8H // ..............................................*............................. - // gap // ............................................................................ - add v2.8H, v2.8H, v24.8H // ...............................................*............................ - // gap // ............................................................................ - mls v20.8H, v6.8H, v7.H[0] // ...................................*........................................ - // gap // ............................................................................ - mul v6.8H, v29.8H, v1.H[4] // ...............................................................*............ - // gap // ............................................................................ - mul v24.8H, v2.8H, v1.H[2] // ..........................................................*................. - // gap // ............................................................................ - sqrdmulh v2.8H, v2.8H, v1.H[3] // ...........................................................*................ - // gap // ............................................................................ - sub v17.8H, v18.8H, v20.8H // ....................................*....................................... - // gap // ............................................................................ - add v18.8H, v18.8H, v20.8H // .....................................*...................................... - // gap // ............................................................................ - sqrdmulh v20.8H, v29.8H, v1.H[5] // ................................................................*........... - // gap // ............................................................................ - mul v29.8H, v17.8H, v1.H[0] // .....................................................*...................... - // gap // ............................................................................ - mul v9.8H, v18.8H, v0.H[6] // ................................................*........................... - // gap // ............................................................................ - sqrdmulh v18.8H, v18.8H, v0.H[7] // .................................................*.......................... - // gap // ............................................................................ - sqrdmulh v17.8H, v17.8H, v1.H[1] // ......................................................*..................... - // gap // ............................................................................ - mls v24.8H, v2.8H, v7.H[0] // ............................................................*............... - // gap // ............................................................................ - mls v6.8H, v20.8H, v7.H[0] // .................................................................*.......... - // gap // ............................................................................ - mls v9.8H, v18.8H, v7.H[0] // ..................................................*......................... - // gap // ............................................................................ - mls v29.8H, v17.8H, v7.H[0] // .......................................................*.................... - // gap // ............................................................................ - sub v18.8H, v25.8H, v24.8H // .............................................................*.............. - // gap // ............................................................................ - sub v20.8H, v15.8H, v6.8H // ..................................................................*......... - // gap // ............................................................................ - add v6.8H, v15.8H, v6.8H // ...................................................................*........ - // gap // ............................................................................ - add v2.8H, v25.8H, v24.8H // ..............................................................*............. - // gap // ............................................................................ - sub v25.8H, v11.8H, v9.8H // ...................................................*........................ - // gap // ............................................................................ - add v11.8H, v11.8H, v9.8H // ....................................................*....................... - // gap // ............................................................................ - sub v24.8H, v10.8H, v29.8H // ........................................................*................... - // gap // ............................................................................ - add v10.8H, v10.8H, v29.8H // .........................................................*.................. - // gap // ............................................................................ - str_vi v11, x0, 16 // ....................................................................*....... - // gap // ............................................................................ - ldr_vo v29, x0, 0 // e........................................................................... - // gap // ............................................................................ - // gap // ............................................................................ - // gap // ............................................................................ - str_vo v25, x0, 48 // .....................................................................*...... - // gap // ............................................................................ - ldr_vo v17, x0, 64 // .e.......................................................................... - // gap // ............................................................................ - // gap // ............................................................................ - // gap // ............................................................................ - str_vo v10, x0, 112 // ......................................................................*..... - // gap // ............................................................................ - ldr_vo v10, x0, 128 // ..e......................................................................... - // gap // ............................................................................ - // gap // ............................................................................ - // gap // ............................................................................ - str_vo v24, x0, 176 // .......................................................................*.... - // gap // ............................................................................ - ldr_vo v15, x0, 192 // ...e........................................................................ - // gap // ............................................................................ - // gap // ............................................................................ - // gap // ............................................................................ - str_vo v2, x0, 240 // ........................................................................*... - // gap // ............................................................................ - ldr_vo v11, x0, 256 // ....e....................................................................... - // gap // ............................................................................ - // gap // ............................................................................ - // gap // ............................................................................ - str_vo v18, x0, 304 // .........................................................................*.. - // gap // ............................................................................ - ldr_vo v2, x0, 320 // .....e...................................................................... - // gap // ............................................................................ - // gap // ............................................................................ - // gap // ............................................................................ - str_vo v6, x0, 368 // ..........................................................................*. - // gap // ............................................................................ - sqrdmulh v25.8H, v11.8H, v0.H[1] // .........e.................................................................. - // gap // ............................................................................ - str_vo v20, x0, 432 // ...........................................................................* - // gap // ............................................................................ - ldr_vo v24, x0, 448 // .......e.................................................................... - // gap // ............................................................................ - // gap // ............................................................................ - // gap // ............................................................................ - ldr_vo v9, x0, 384 // ......e..................................................................... - // gap // ............................................................................ - // gap // ............................................................................ - // gap // ............................................................................ - sqrdmulh v30.8H, v24.8H, v0.H[1] // ........................e................................................... - // gap // ............................................................................ - - // original source code - // ldr_vo v8, x0, 0 // e......................................................................................... || e....................................................................................................... - // ldr_vo v9, x0, 64 // ..e....................................................................................... || ...e.................................................................................................... - // ldr_vo v10, x0, 128 // ....e..................................................................................... || ......e................................................................................................. - // ldr_vo v11, x0, 192 // ......e................................................................................... || .........e.............................................................................................. - // ldr_vo v12, x0, 256 // ........e................................................................................. || ............e........................................................................................... - // ldr_vo v13, x0, 320 // ..........e............................................................................... || ...............e........................................................................................ - // ldr_vo v14, x0, 384 // ...............e.......................................................................... || ......................e................................................................................. - // ldr_vo v15, x0, 448 // ..............e........................................................................... || ....................e................................................................................... - // mul v24.8H, v12.8H, v0.H[0] // .................*........................................................................ || .........................*.............................................................................. - // sqrdmulh v12.8H, v12.8H, v0.H[1] // ............e............................................................................. || ..................e..................................................................................... - // mls v24.8H, v12.8H, v7.H[0] // .....................*.................................................................... || .............................*.......................................................................... - // sub v12.8H, v8.8H, v24.8H // .........................*................................................................ || .................................*...................................................................... - // add v8.8H, v8.8H, v24.8H // ...........................*.............................................................. || ...................................*.................................................................... - // mul v24.8H, v13.8H, v0.H[0] // ..................*....................................................................... || ..........................*............................................................................. - // sqrdmulh v13.8H, v13.8H, v0.H[1] // ...................*...................................................................... || ...........................*............................................................................ - // mls v24.8H, v13.8H, v7.H[0] // .......................*.................................................................. || ...............................*........................................................................ - // sub v13.8H, v9.8H, v24.8H // ............................*............................................................. || ....................................*................................................................... - // add v9.8H, v9.8H, v24.8H // .............................*............................................................ || .....................................*.................................................................. - // mul v24.8H, v14.8H, v0.H[0] // ....................*..................................................................... || ............................*........................................................................... - // sqrdmulh v14.8H, v14.8H, v0.H[1] // ......................*................................................................... || ..............................*......................................................................... - // mls v24.8H, v14.8H, v7.H[0] // ..........................*............................................................... || ..................................*..................................................................... - // sub v14.8H, v10.8H, v24.8H // ..............................*........................................................... || ......................................*................................................................. - // add v10.8H, v10.8H, v24.8H // ...............................*.......................................................... || .......................................*................................................................ - // mul v24.8H, v15.8H, v0.H[0] // ........................*................................................................. || ................................*....................................................................... - // sqrdmulh v15.8H, v15.8H, v0.H[1] // ................e......................................................................... || ........................e............................................................................... - // mls v24.8H, v15.8H, v7.H[0] // ................................*......................................................... || ........................................*............................................................... - // sub v15.8H, v11.8H, v24.8H // ....................................*..................................................... || ............................................*........................................................... - // add v11.8H, v11.8H, v24.8H // .....................................*.................................................... || .............................................*.......................................................... - // mul v24.8H, v10.8H, v0.H[2] // ...................................*...................................................... || ...........................................*............................................................ - // sqrdmulh v10.8H, v10.8H, v0.H[3] // .......................................*.................................................. || ...............................................*........................................................ - // mls v24.8H, v10.8H, v7.H[0] // ............................................*............................................. || ....................................................*................................................... - // sub v10.8H, v8.8H, v24.8H // ................................................*......................................... || ........................................................*............................................... - // add v8.8H, v8.8H, v24.8H // .................................................*........................................ || .........................................................*.............................................. - // mul v24.8H, v11.8H, v0.H[2] // .............................................*............................................ || .....................................................*.................................................. - // sqrdmulh v11.8H, v11.8H, v0.H[3] // ...............................................*.......................................... || .......................................................*................................................ - // mls v24.8H, v11.8H, v7.H[0] // ....................................................*..................................... || ............................................................*........................................... - // sub v11.8H, v9.8H, v24.8H // ........................................................*................................. || ................................................................*....................................... - // add v9.8H, v9.8H, v24.8H // .........................................................*................................ || .................................................................*...................................... - // mul v24.8H, v14.8H, v0.H[4] // .................................*........................................................ || .........................................*.............................................................. - // sqrdmulh v14.8H, v14.8H, v0.H[5] // ..................................*....................................................... || ..........................................*............................................................. - // mls v24.8H, v14.8H, v7.H[0] // ......................................*................................................... || ..............................................*......................................................... - // sub v14.8H, v12.8H, v24.8H // ..........................................*............................................... || ..................................................*..................................................... - // add v12.8H, v12.8H, v24.8H // ...........................................*.............................................. || ...................................................*.................................................... - // mul v24.8H, v15.8H, v0.H[4] // ........................................*................................................. || ................................................*....................................................... - // sqrdmulh v15.8H, v15.8H, v0.H[5] // .........................................*................................................ || .................................................*...................................................... - // mls v24.8H, v15.8H, v7.H[0] // ..............................................*........................................... || ......................................................*................................................. - // sub v15.8H, v13.8H, v24.8H // ..................................................*....................................... || ..........................................................*............................................. - // add v13.8H, v13.8H, v24.8H // ...................................................*...................................... || ...........................................................*............................................ - // mul v24.8H, v9.8H, v0.H[6] // ............................................................*............................. || ....................................................................*................................... - // sqrdmulh v9.8H, v9.8H, v0.H[7] // .............................................................*............................ || .....................................................................*.................................. - // mls v24.8H, v9.8H, v7.H[0] // .................................................................*........................ || .........................................................................*.............................. - // sub v9.8H, v8.8H, v24.8H // .......................................................................*.................. || ...............................................................................*........................ - // add v8.8H, v8.8H, v24.8H // ........................................................................*................. || ................................................................................*....................... - // mul v24.8H, v11.8H, v1.H[0] // ...........................................................*.............................. || ...................................................................*.................................... - // sqrdmulh v11.8H, v11.8H, v1.H[1] // ..............................................................*........................... || ......................................................................*................................. - // mls v24.8H, v11.8H, v7.H[0] // ..................................................................*....................... || ..........................................................................*............................. - // sub v11.8H, v10.8H, v24.8H // .........................................................................*................ || .................................................................................*...................... - // add v10.8H, v10.8H, v24.8H // ..........................................................................*............... || ..................................................................................*..................... - // mul v24.8H, v13.8H, v1.H[2] // ......................................................*................................... || ..............................................................*......................................... - // sqrdmulh v13.8H, v13.8H, v1.H[3] // .......................................................*.................................. || ...............................................................*........................................ - // mls v24.8H, v13.8H, v7.H[0] // ...............................................................*.......................... || .......................................................................*................................ - // sub v13.8H, v12.8H, v24.8H // ...................................................................*...................... || ...........................................................................*............................ - // add v12.8H, v12.8H, v24.8H // ......................................................................*................... || ..............................................................................*......................... - // mul v24.8H, v15.8H, v1.H[4] // .....................................................*.................................... || .............................................................*.......................................... - // sqrdmulh v15.8H, v15.8H, v1.H[5] // ..........................................................*............................... || ..................................................................*..................................... - // mls v24.8H, v15.8H, v7.H[0] // ................................................................*......................... || ........................................................................*............................... - // sub v15.8H, v14.8H, v24.8H // ....................................................................*..................... || ............................................................................*........................... - // add v14.8H, v14.8H, v24.8H // .....................................................................*.................... || .............................................................................*.......................... - // str_vi v8, x0, 16 // ...........................................................................*.............. || ...................................................................................*.................... - // str_vo v9, x0, 48 // .............................................................................*............ || ......................................................................................*................. - // str_vo v10, x0, 112 // ...............................................................................*.......... || .........................................................................................*.............. - // str_vo v11, x0, 176 // .................................................................................*........ || ............................................................................................*........... - // str_vo v12, x0, 240 // ...................................................................................*...... || ...............................................................................................*........ - // str_vo v13, x0, 304 // .....................................................................................*.... || ..................................................................................................*..... - // str_vo v14, x0, 368 // .......................................................................................*.. || .....................................................................................................*.. - // str_vo v15, x0, 432 // .........................................................................................* || .......................................................................................................* - - subs count, count, #1 - cbnz count, layer123_start - mul v18.8H, v11.8H, v0.H[0] // *................................................................. - // gap // .................................................................. - mul v23.8H, v24.8H, v0.H[0] // .......*.......................................................... - // gap // .................................................................. - mul v11.8H, v9.8H, v0.H[0] // ...*.............................................................. - // gap // .................................................................. - sqrdmulh v12.8H, v2.8H, v0.H[1] // ..*............................................................... - // gap // .................................................................. - mul v27.8H, v2.8H, v0.H[0] // .*................................................................ - // gap // .................................................................. - mls v23.8H, v30.8H, v7.H[0] // ...............*.................................................. - // gap // .................................................................. - mls v18.8H, v25.8H, v7.H[0] // ....*............................................................. - // gap // .................................................................. - sqrdmulh v3.8H, v9.8H, v0.H[1] // .....*............................................................ - // gap // .................................................................. - mls v27.8H, v12.8H, v7.H[0] // ......*........................................................... - // gap // .................................................................. - add v24.8H, v15.8H, v23.8H // ....................*............................................. - // gap // .................................................................. - sub v14.8H, v15.8H, v23.8H // ...................*.............................................. - // gap // .................................................................. - mls v11.8H, v3.8H, v7.H[0] // .........*........................................................ - // gap // .................................................................. - mul v21.8H, v24.8H, v0.H[2] // ............................*..................................... - // gap // .................................................................. - add v19.8H, v17.8H, v27.8H // ............*..................................................... - // gap // .................................................................. - sub v26.8H, v17.8H, v27.8H // ...........*...................................................... - // gap // .................................................................. - sub v22.8H, v10.8H, v11.8H // .............*.................................................... - // gap // .................................................................. - add v11.8H, v10.8H, v11.8H // ..............*................................................... - // gap // .................................................................. - sub v3.8H, v29.8H, v18.8H // ........*......................................................... - // gap // .................................................................. - sqrdmulh v31.8H, v24.8H, v0.H[3] // ..............................*................................... - // gap // .................................................................. - mul v8.8H, v11.8H, v0.H[2] // ..................*............................................... - // gap // .................................................................. - sqrdmulh v30.8H, v11.8H, v0.H[3] // ......................*........................................... - // gap // .................................................................. - add v11.8H, v29.8H, v18.8H // ..........*....................................................... - // gap // .................................................................. - mul v15.8H, v14.8H, v0.H[4] // .......................*.......................................... - // gap // .................................................................. - mls v21.8H, v31.8H, v7.H[0] // ...................................*.............................. - // gap // .................................................................. - mls v8.8H, v30.8H, v7.H[0] // ...........................*...................................... - // gap // .................................................................. - sqrdmulh v12.8H, v14.8H, v0.H[5] // ........................*......................................... - // gap // .................................................................. - sqrdmulh v13.8H, v22.8H, v0.H[5] // .................*................................................ - // gap // .................................................................. - sub v2.8H, v19.8H, v21.8H // .......................................*.......................... - // gap // .................................................................. - add v29.8H, v11.8H, v8.8H // ................................*................................. - // gap // .................................................................. - sub v9.8H, v11.8H, v8.8H // ...............................*.................................. - // gap // .................................................................. - add v11.8H, v19.8H, v21.8H // ........................................*......................... - // gap // .................................................................. - mls v15.8H, v12.8H, v7.H[0] // .............................*.................................... - // gap // .................................................................. - mul v21.8H, v2.8H, v1.H[0] // ..........................................*....................... - // gap // .................................................................. - mul v8.8H, v11.8H, v0.H[6] // ...........................................*...................... - // gap // .................................................................. - sqrdmulh v28.8H, v11.8H, v0.H[7] // ............................................*..................... - // gap // .................................................................. - mul v11.8H, v22.8H, v0.H[4] // ................*................................................. - // gap // .................................................................. - sub v31.8H, v26.8H, v15.8H // .................................*................................ - // gap // .................................................................. - sqrdmulh v27.8H, v2.8H, v1.H[1] // .............................................*.................... - // gap // .................................................................. - mls v8.8H, v28.8H, v7.H[0] // ................................................*................. - // gap // .................................................................. - mls v11.8H, v13.8H, v7.H[0] // .....................*............................................ - // gap // .................................................................. - add v28.8H, v26.8H, v15.8H // ..................................*............................... - // gap // .................................................................. - sqrdmulh v26.8H, v31.8H, v1.H[5] // .........................................*........................ - // gap // .................................................................. - add v13.8H, v29.8H, v8.8H // .......................................................*.......... - // gap // .................................................................. - sub v14.8H, v3.8H, v11.8H // .........................*........................................ - // gap // .................................................................. - add v5.8H, v3.8H, v11.8H // ..........................*....................................... - // gap // .................................................................. - mul v3.8H, v31.8H, v1.H[4] // ....................................*............................. - // gap // .................................................................. - mls v21.8H, v27.8H, v7.H[0] // .................................................*................ - // gap // .................................................................. - mul v27.8H, v28.8H, v1.H[2] // .....................................*............................ - // gap // .................................................................. - str_vi v13, x0, 16 // ..........................................................*....... - // gap // .................................................................. - sqrdmulh v13.8H, v28.8H, v1.H[3] // ......................................*........................... - // gap // .................................................................. - mls v3.8H, v26.8H, v7.H[0] // ...............................................*.................. - // gap // .................................................................. - sub v30.8H, v29.8H, v8.8H // ......................................................*........... - // gap // .................................................................. - add v12.8H, v9.8H, v21.8H // .........................................................*........ - // gap // .................................................................. - mls v27.8H, v13.8H, v7.H[0] // ..............................................*................... - // gap // .................................................................. - str_vo v30, x0, 48 // ...........................................................*...... - // gap // .................................................................. - sub v21.8H, v9.8H, v21.8H // ........................................................*......... - // gap // .................................................................. - str_vo v12, x0, 112 // ............................................................*..... - // gap // .................................................................. - add v6.8H, v5.8H, v27.8H // .....................................................*............ - // gap // .................................................................. - str_vo v21, x0, 176 // .............................................................*.... - // gap // .................................................................. - sub v11.8H, v5.8H, v27.8H // ..................................................*............... - // gap // .................................................................. - str_vo v6, x0, 240 // ..............................................................*... - // gap // .................................................................. - add v21.8H, v14.8H, v3.8H // ....................................................*............. - // gap // .................................................................. - str_vo v11, x0, 304 // ...............................................................*.. - // gap // .................................................................. - sub v11.8H, v14.8H, v3.8H // ...................................................*.............. - // gap // .................................................................. - str_vo v21, x0, 368 // ................................................................*. - // gap // .................................................................. - // gap // .................................................................. - // gap // .................................................................. - str_vo v11, x0, 432 // .................................................................* - // gap // .................................................................. - - // original source code - // mul v11.8H, v11.8H, v0.H[0] // *................................................................. || *.................................................................. - // mul v18.8H, v2.8H, v0.H[0] // ....*............................................................. || ....*.............................................................. - // sqrdmulh v6.8H, v2.8H, v0.H[1] // ...*.............................................................. || ...*............................................................... - // mul v20.8H, v9.8H, v0.H[0] // ..*............................................................... || ..*................................................................ - // mls v11.8H, v25.8H, v7.H[0] // ......*........................................................... || ......*............................................................ - // sqrdmulh v2.8H, v9.8H, v0.H[1] // .......*.......................................................... || .......*........................................................... - // mls v18.8H, v6.8H, v7.H[0] // ........*......................................................... || ........*.......................................................... - // mul v6.8H, v24.8H, v0.H[0] // .*................................................................ || .*................................................................. - // sub v25.8H, v29.8H, v11.8H // .................*................................................ || .................*................................................. - // mls v20.8H, v2.8H, v7.H[0] // ...........*...................................................... || ...........*....................................................... - // add v11.8H, v29.8H, v11.8H // .....................*............................................ || .....................*............................................. - // sub v2.8H, v17.8H, v18.8H // ..............*................................................... || ..............*.................................................... - // add v18.8H, v17.8H, v18.8H // .............*.................................................... || .............*..................................................... - // sub v24.8H, v10.8H, v20.8H // ...............*.................................................. || ...............*................................................... - // add v20.8H, v10.8H, v20.8H // ................*................................................. || ................*.................................................. - // mls v6.8H, v30.8H, v7.H[0] // .....*............................................................ || .....*............................................................. - // mul v10.8H, v24.8H, v0.H[4] // ...................................*.............................. || ...................................*............................... - // sqrdmulh v24.8H, v24.8H, v0.H[5] // ..........................*....................................... || ..........................*........................................ - // mul v29.8H, v20.8H, v0.H[2] // ...................*.............................................. || ...................*............................................... - // sub v17.8H, v15.8H, v6.8H // ..........*....................................................... || ..........*........................................................ - // add v6.8H, v15.8H, v6.8H // .........*........................................................ || .........*......................................................... - // mls v10.8H, v24.8H, v7.H[0] // .......................................*.......................... || .......................................*........................... - // sqrdmulh v20.8H, v20.8H, v0.H[3] // ....................*............................................. || ....................*.............................................. - // mul v24.8H, v17.8H, v0.H[4] // ......................*........................................... || ......................*............................................ - // sqrdmulh v17.8H, v17.8H, v0.H[5] // .........................*........................................ || .........................*......................................... - // sub v15.8H, v25.8H, v10.8H // ...........................................*...................... || ...........................................*....................... - // add v25.8H, v25.8H, v10.8H // ............................................*..................... || ............................................*...................... - // mls v29.8H, v20.8H, v7.H[0] // ........................*......................................... || ........................*.......................................... - // mul v20.8H, v6.8H, v0.H[2] // ............*..................................................... || ............*...................................................... - // mls v24.8H, v17.8H, v7.H[0] // ...............................*.................................. || ...............................*................................... - // sqrdmulh v6.8H, v6.8H, v0.H[3] // ..................*............................................... || ..................*................................................ - // sub v10.8H, v11.8H, v29.8H // .............................*.................................... || .............................*..................................... - // add v11.8H, v11.8H, v29.8H // ............................*..................................... || ............................*...................................... - // sub v29.8H, v2.8H, v24.8H // ....................................*............................. || ....................................*.............................. - // add v2.8H, v2.8H, v24.8H // ........................................*......................... || ........................................*.......................... - // mls v20.8H, v6.8H, v7.H[0] // .......................*.......................................... || .......................*........................................... - // mul v6.8H, v29.8H, v1.H[4] // .............................................*.................... || .............................................*..................... - // mul v24.8H, v2.8H, v1.H[2] // ...............................................*.................. || ...............................................*................... - // sqrdmulh v2.8H, v2.8H, v1.H[3] // .................................................*................ || .................................................*................. - // sub v17.8H, v18.8H, v20.8H // ...........................*...................................... || ...........................*....................................... - // add v18.8H, v18.8H, v20.8H // ..............................*................................... || ..............................*.................................... - // sqrdmulh v20.8H, v29.8H, v1.H[5] // .........................................*........................ || .........................................*......................... - // mul v29.8H, v17.8H, v1.H[0] // ................................*................................. || ................................*.................................. - // mul v9.8H, v18.8H, v0.H[6] // .................................*................................ || .................................*................................. - // sqrdmulh v18.8H, v18.8H, v0.H[7] // ..................................*............................... || ..................................*................................ - // sqrdmulh v17.8H, v17.8H, v1.H[1] // .....................................*............................ || .....................................*............................. - // mls v24.8H, v2.8H, v7.H[0] // .....................................................*............ || .....................................................*............. - // mls v6.8H, v20.8H, v7.H[0] // ..................................................*............... || ..................................................*................ - // mls v9.8H, v18.8H, v7.H[0] // ......................................*........................... || ......................................*............................ - // mls v29.8H, v17.8H, v7.H[0] // ..............................................*................... || ..............................................*.................... - // sub v18.8H, v25.8H, v24.8H // ...........................................................*...... || ...........................................................*....... - // sub v20.8H, v15.8H, v6.8H // ...............................................................*.. || ...............................................................*... - // add v6.8H, v15.8H, v6.8H // .............................................................*.... || .............................................................*..... - // add v2.8H, v25.8H, v24.8H // .........................................................*........ || .........................................................*......... - // sub v25.8H, v11.8H, v9.8H // ...................................................*.............. || ...................................................*............... - // add v11.8H, v11.8H, v9.8H // ..........................................*....................... || ..........................................*........................ - // sub v24.8H, v10.8H, v29.8H // .......................................................*.......... || .......................................................*........... - // add v10.8H, v10.8H, v29.8H // ....................................................*............. || ....................................................*.............. - // str_vi v11, x0, 16 // ................................................*................. || ................................................*.................. - // str_vo v25, x0, 48 // ......................................................*........... || ......................................................*............ - // str_vo v10, x0, 112 // ........................................................*......... || ........................................................*.......... - // str_vo v24, x0, 176 // ..........................................................*....... || ..........................................................*........ - // str_vo v2, x0, 240 // ............................................................*..... || ............................................................*...... - // str_vo v18, x0, 304 // ..............................................................*... || ..............................................................*.... - // str_vo v6, x0, 368 // ................................................................*. || ................................................................*.. - // str_vo v20, x0, 432 // .................................................................* || ..................................................................* - + // Instructions: 76 + // Expected cycles: 84 + // Expected IPC: 0.90 + // + // Cycle bound: 84.0 + // IPC bound: 0.90 + // + // Wall time: 2.40s + // User time: 2.40s + // + // -------------------------------- cycle (expected) ---------------------------------> + // 0 25 50 75 + // |------------------------|------------------------|------------------------|-------- + sqrdmulh v3.8H, v12.8H, v0.H[1] // *................................................................................... + sqrdmulh v12.8H, v9.8H, v0.H[1] // .*.................................................................................. + mul v9.8H, v9.8H, v0.H[0] // ..*................................................................................. + sqrdmulh v17.8H, v31.8H, v0.H[1] // ...*................................................................................ + mls v16.8H, v3.8H, v7.H[0] // ....*............................................................................... + mul v3.8H, v31.8H, v0.H[0] // .....*.............................................................................. + mls v9.8H, v12.8H, v7.H[0] // ......*............................................................................. + sqrdmulh v12.8H, v23.8H, v0.H[1] // .......*............................................................................ + sub v23.8H, v10.8H, v16.8H // ........*........................................................................... + mls v3.8H, v17.8H, v7.H[0] // .........*.......................................................................... + sub v17.8H, v5.8H, v9.8H // ..........*......................................................................... + add v9.8H, v5.8H, v9.8H // ...........*........................................................................ + add v16.8H, v10.8H, v16.8H // ............*....................................................................... + sub v31.8H, v18.8H, v3.8H // .............*...................................................................... + add v3.8H, v18.8H, v3.8H // ..............*..................................................................... + mls v8.8H, v12.8H, v7.H[0] // ...............*.................................................................... + sqrdmulh v12.8H, v31.8H, v0.H[5] // ................*................................................................... + mul v31.8H, v31.8H, v0.H[4] // .................*.................................................................. + sqrdmulh v10.8H, v3.8H, v0.H[3] // ..................*................................................................. + sub v5.8H, v15.8H, v8.8H // ...................*................................................................ + add v8.8H, v15.8H, v8.8H // ....................*............................................................... + mls v31.8H, v12.8H, v7.H[0] // .....................*.............................................................. + sqrdmulh v12.8H, v5.8H, v0.H[5] // ......................*............................................................. + mul v5.8H, v5.8H, v0.H[4] // .......................*............................................................ + mul v3.8H, v3.8H, v0.H[2] // ........................*........................................................... + sub v18.8H, v23.8H, v31.8H // .........................*.......................................................... + add v23.8H, v23.8H, v31.8H // ..........................*......................................................... + mls v5.8H, v12.8H, v7.H[0] // ...........................*........................................................ + sqrdmulh v12.8H, v8.8H, v0.H[3] // ............................*....................................................... + mul v31.8H, v8.8H, v0.H[2] // .............................*...................................................... + mls v3.8H, v10.8H, v7.H[0] // ..............................*..................................................... + sub v8.8H, v17.8H, v5.8H // ...............................*.................................................... + add v17.8H, v17.8H, v5.8H // ................................*................................................... + mls v31.8H, v12.8H, v7.H[0] // .................................*.................................................. + sub v12.8H, v16.8H, v3.8H // ..................................*................................................. + add v3.8H, v16.8H, v3.8H // ...................................*................................................ + sqrdmulh v16.8H, v17.8H, v1.H[3] // ....................................*............................................... + sub v10.8H, v9.8H, v31.8H // .....................................*.............................................. + add v9.8H, v9.8H, v31.8H // ......................................*............................................. + mul v17.8H, v17.8H, v1.H[2] // .......................................*............................................ + sqrdmulh v31.8H, v10.8H, v1.H[1] // ........................................*........................................... + sqrdmulh v5.8H, v9.8H, v0.H[7] // .........................................*.......................................... + mul v9.8H, v9.8H, v0.H[6] // ..........................................*......................................... + mul v10.8H, v10.8H, v1.H[0] // ...........................................*........................................ + mls v17.8H, v16.8H, v7.H[0] // ............................................*....................................... + sqrdmulh v16.8H, v8.8H, v1.H[5] // .............................................*...................................... + mls v9.8H, v5.8H, v7.H[0] // ..............................................*..................................... + mls v10.8H, v31.8H, v7.H[0] // ...............................................*.................................... + sub v31.8H, v23.8H, v17.8H // ................................................*................................... + add v17.8H, v23.8H, v17.8H // .................................................*.................................. + sub v23.8H, v3.8H, v9.8H // ..................................................*................................. + mul v8.8H, v8.8H, v1.H[4] // ...................................................*................................ + add v3.8H, v3.8H, v9.8H // ....................................................*............................... + sub v9.8H, v12.8H, v10.8H // .....................................................*.............................. + add v12.8H, v12.8H, v10.8H // ......................................................*............................. + mls v8.8H, v16.8H, v7.H[0] // .......................................................*............................ + str q3, [x0], #(16) // ........................................................*........................... + ldr q10, [x0, #0] // .........................................................e.......................... + sub v3.8H, v18.8H, v8.8H // ...........................................................*........................ + add v16.8H, v18.8H, v8.8H // ............................................................*....................... + str q23, [x0, #48] // .............................................................*...................... + ldr q5, [x0, #64] // ..............................................................e..................... + str q12, [x0, #112] // ................................................................*................... + ldr q18, [x0, #128] // .................................................................e.................. + str q9, [x0, #176] // ...................................................................*................ + ldr q15, [x0, #192] // ....................................................................e............... + str q17, [x0, #240] // ......................................................................*............. + ldr q12, [x0, #256] // .......................................................................e............ + str q31, [x0, #304] // .........................................................................*.......... + ldr q9, [x0, #320] // ..........................................................................e......... + str q16, [x0, #368] // ............................................................................*....... + mul v16.8H, v12.8H, v0.H[0] // .............................................................................e...... + str q3, [x0, #432] // ..............................................................................*..... + ldr q23, [x0, #448] // ...............................................................................e.... + ldr q31, [x0, #384] // .................................................................................e.. + mul v8.8H, v23.8H, v0.H[0] // ...................................................................................e + + // ------------------------------------------- cycle (expected) --------------------------------------------> + // 0 25 50 75 100 + // |------------------------|------------------------|------------------------|------------------------|----- + // ldr q8, [x0, #0] // e..........................'........................................................~..................... + // ldr q9, [x0, #(1*(512/8))] // .....e.....................'.............................................................~................ + // ldr q10, [x0, #(2*(512/8))] // ........e..................'................................................................~............. + // ldr q11, [x0, #(3*(512/8))] // ...........e...............'...................................................................~.......... + // ldr q12, [x0, #(4*(512/8))] // ..............e............'......................................................................~....... + // ldr q13, [x0, #(5*(512/8))] // .................e.........'.........................................................................~.... + // ldr q14, [x0, #(6*(512/8))] // ........................e..'.............................................................................. + // ldr q15, [x0, #(7*(512/8))] // ......................e....'.............................................................................. + // sqrdmulh v27.8h, v12.8h, v0.h[1] // ...........................*.............................................................................. + // mul v24.8h, v12.8h, v0.h[0] // ....................e......'............................................................................~. + // mls v24.8h, v27.8h, v7.h[0] // ...........................'...*.......................................................................... + // sub v12.8h, v8.8h, v24.8h // ...........................'.......*...................................................................... + // add v8.8h, v8.8h, v24.8h // ...........................'...........*.................................................................. + // sqrdmulh v27.8h, v13.8h, v0.h[1] // ...........................'*............................................................................. + // mul v24.8h, v13.8h, v0.h[0] // ...........................'.*............................................................................ + // mls v24.8h, v27.8h, v7.h[0] // ...........................'.....*........................................................................ + // sub v13.8h, v9.8h, v24.8h // ...........................'.........*.................................................................... + // add v9.8h, v9.8h, v24.8h // ...........................'..........*................................................................... + // sqrdmulh v27.8h, v14.8h, v0.h[1] // ...........................'..*........................................................................... + // mul v24.8h, v14.8h, v0.h[0] // ...........................'....*......................................................................... + // mls v24.8h, v27.8h, v7.h[0] // ...........................'........*..................................................................... + // sub v14.8h, v10.8h, v24.8h // ...........................'............*................................................................. + // add v10.8h, v10.8h, v24.8h // ...........................'.............*................................................................ + // sqrdmulh v27.8h, v15.8h, v0.h[1] // ...........................'......*....................................................................... + // mul v24.8h, v15.8h, v0.h[0] // ..........................e'.............................................................................. + // mls v24.8h, v27.8h, v7.h[0] // ...........................'..............*............................................................... + // sub v15.8h, v11.8h, v24.8h // ...........................'..................*........................................................... + // add v11.8h, v11.8h, v24.8h // ...........................'...................*.......................................................... + // sqrdmulh v27.8h, v10.8h, v0.h[3] // ...........................'.................*............................................................ + // mul v24.8h, v10.8h, v0.h[2] // ...........................'.......................*...................................................... + // mls v24.8h, v27.8h, v7.h[0] // ...........................'.............................*................................................ + // sub v10.8h, v8.8h, v24.8h // ...........................'.................................*............................................ + // add v8.8h, v8.8h, v24.8h // ...........................'..................................*........................................... + // sqrdmulh v27.8h, v11.8h, v0.h[3] // ...........................'...........................*.................................................. + // mul v24.8h, v11.8h, v0.h[2] // ...........................'............................*................................................. + // mls v24.8h, v27.8h, v7.h[0] // ...........................'................................*............................................. + // sub v11.8h, v9.8h, v24.8h // ...........................'....................................*......................................... + // add v9.8h, v9.8h, v24.8h // ...........................'.....................................*........................................ + // sqrdmulh v27.8h, v14.8h, v0.h[5] // ...........................'...............*.............................................................. + // mul v24.8h, v14.8h, v0.h[4] // ...........................'................*............................................................. + // mls v24.8h, v27.8h, v7.h[0] // ...........................'....................*......................................................... + // sub v14.8h, v12.8h, v24.8h // ...........................'........................*..................................................... + // add v12.8h, v12.8h, v24.8h // ...........................'.........................*.................................................... + // sqrdmulh v27.8h, v15.8h, v0.h[5] // ...........................'.....................*........................................................ + // mul v24.8h, v15.8h, v0.h[4] // ...........................'......................*....................................................... + // mls v24.8h, v27.8h, v7.h[0] // ...........................'..........................*................................................... + // sub v15.8h, v13.8h, v24.8h // ...........................'..............................*............................................... + // add v13.8h, v13.8h, v24.8h // ...........................'...............................*.............................................. + // sqrdmulh v27.8h, v9.8h, v0.h[7] // ...........................'........................................*..................................... + // mul v24.8h, v9.8h, v0.h[6] // ...........................'.........................................*.................................... + // mls v24.8h, v27.8h, v7.h[0] // ...........................'.............................................*................................ + // sub v9.8h, v8.8h, v24.8h // ...........................'.................................................*............................ + // add v8.8h, v8.8h, v24.8h // ...........................'...................................................*.......................... + // sqrdmulh v27.8h, v11.8h, v1.h[1] // ...........................'.......................................*...................................... + // mul v24.8h, v11.8h, v1.h[0] // ...........................'..........................................*................................... + // mls v24.8h, v27.8h, v7.h[0] // ...........................'..............................................*............................... + // sub v11.8h, v10.8h, v24.8h // ...........................'....................................................*......................... + // add v10.8h, v10.8h, v24.8h // ...........................'.....................................................*........................ + // sqrdmulh v27.8h, v13.8h, v1.h[3] // ...........................'...................................*.......................................... + // mul v24.8h, v13.8h, v1.h[2] // ...........................'......................................*....................................... + // mls v24.8h, v27.8h, v7.h[0] // ...........................'...........................................*.................................. + // sub v13.8h, v12.8h, v24.8h // ...........................'...............................................*.............................. + // add v12.8h, v12.8h, v24.8h // ...........................'................................................*............................. + // sqrdmulh v27.8h, v15.8h, v1.h[5] // ...........................'............................................*................................. + // mul v24.8h, v15.8h, v1.h[4] // ...........................'..................................................*........................... + // mls v24.8h, v27.8h, v7.h[0] // ...........................'......................................................*....................... + // sub v15.8h, v14.8h, v24.8h // ..~........................'..........................................................*................... + // add v14.8h, v14.8h, v24.8h // ...~.......................'...........................................................*.................. + // str q8, [x0], #(16) // ...........................'.......................................................*...................... + // str q9, [x0, #(-16 + 1*(512/8))] // ....~......................'............................................................*................. + // str q10, [x0, #(-16 + 2*(512/8))] // .......~...................'...............................................................*.............. + // str q11, [x0, #(-16 + 3*(512/8))] // ..........~................'..................................................................*........... + // str q12, [x0, #(-16 + 4*(512/8))] // .............~.............'.....................................................................*........ + // str q13, [x0, #(-16 + 5*(512/8))] // ................~..........'........................................................................*..... + // str q14, [x0, #(-16 + 6*(512/8))] // ...................~.......'...........................................................................*.. + // str q15, [x0, #(-16 + 7*(512/8))] // .....................~.....'.............................................................................* - restore inp, STACK0 + sub count, count, #1 + cbnz count, layer123_start + // Instructions: 66 + // Expected cycles: 67 + // Expected IPC: 0.99 + // + // Cycle bound: 67.0 + // IPC bound: 0.99 + // + // Wall time: 7.27s + // User time: 7.27s + // + // ------------------------ cycle (expected) ------------------------> + // 0 25 50 + // |------------------------|------------------------|---------------- + sqrdmulh v11.8H, v23.8H, v0.H[1] // *.................................................................. + mul v19.8H, v31.8H, v0.H[0] // .*................................................................. + sqrdmulh v21.8H, v31.8H, v0.H[1] // ..*................................................................ + mul v23.8H, v9.8H, v0.H[0] // ...*............................................................... + mls v8.8H, v11.8H, v7.H[0] // ....*.............................................................. + sqrdmulh v17.8H, v9.8H, v0.H[1] // .....*............................................................. + mls v19.8H, v21.8H, v7.H[0] // ......*............................................................ + sqrdmulh v4.8H, v12.8H, v0.H[1] // .......*........................................................... + add v30.8H, v15.8H, v8.8H // ........*.......................................................... + mls v23.8H, v17.8H, v7.H[0] // .........*......................................................... + sub v20.8H, v18.8H, v19.8H // ..........*........................................................ + sqrdmulh v9.8H, v30.8H, v0.H[3] // ...........*....................................................... + mul v12.8H, v30.8H, v0.H[2] // ............*...................................................... + mul v31.8H, v20.8H, v0.H[4] // .............*..................................................... + sqrdmulh v17.8H, v20.8H, v0.H[5] // ..............*.................................................... + mls v16.8H, v4.8H, v7.H[0] // ...............*................................................... + mls v12.8H, v9.8H, v7.H[0] // ................*.................................................. + add v11.8H, v5.8H, v23.8H // .................*................................................. + mls v31.8H, v17.8H, v7.H[0] // ..................*................................................ + sub v13.8H, v10.8H, v16.8H // ...................*............................................... + add v25.8H, v18.8H, v19.8H // ....................*.............................................. + sub v3.8H, v11.8H, v12.8H // .....................*............................................. + add v18.8H, v13.8H, v31.8H // ......................*............................................ + sub v28.8H, v13.8H, v31.8H // .......................*........................................... + mul v17.8H, v3.8H, v1.H[0] // ........................*.......................................... + sqrdmulh v13.8H, v25.8H, v0.H[3] // .........................*......................................... + mul v21.8H, v25.8H, v0.H[2] // ..........................*........................................ + sqrdmulh v9.8H, v3.8H, v1.H[1] // ...........................*....................................... + sub v3.8H, v15.8H, v8.8H // ............................*...................................... + add v14.8H, v10.8H, v16.8H // .............................*..................................... + mls v21.8H, v13.8H, v7.H[0] // ..............................*.................................... + sqrdmulh v13.8H, v3.8H, v0.H[5] // ...............................*................................... + mul v31.8H, v3.8H, v0.H[4] // ................................*.................................. + mls v17.8H, v9.8H, v7.H[0] // .................................*................................. + sub v4.8H, v14.8H, v21.8H // ..................................*................................ + sub v16.8H, v5.8H, v23.8H // ...................................*............................... + mls v31.8H, v13.8H, v7.H[0] // ....................................*.............................. + sub v9.8H, v4.8H, v17.8H // .....................................*............................. + add v3.8H, v4.8H, v17.8H // ......................................*............................ + add v17.8H, v11.8H, v12.8H // .......................................*........................... + str q9, [x0, #192] // ........................................*.......................... + add v9.8H, v16.8H, v31.8H // .........................................*......................... + str q3, [x0, #128] // ..........................................*........................ + sub v31.8H, v16.8H, v31.8H // ...........................................*....................... + sqrdmulh v5.8H, v9.8H, v1.H[3] // ............................................*...................... + mul v8.8H, v9.8H, v1.H[2] // .............................................*..................... + add v4.8H, v14.8H, v21.8H // ..............................................*.................... + sqrdmulh v12.8H, v31.8H, v1.H[5] // ...............................................*................... + mul v31.8H, v31.8H, v1.H[4] // ................................................*.................. + mls v8.8H, v5.8H, v7.H[0] // .................................................*................. + sqrdmulh v3.8H, v17.8H, v0.H[7] // ..................................................*................ + mul v9.8H, v17.8H, v0.H[6] // ...................................................*............... + mls v31.8H, v12.8H, v7.H[0] // ....................................................*.............. + add v20.8H, v18.8H, v8.8H // .....................................................*............. + sub v17.8H, v18.8H, v8.8H // ......................................................*............ + mls v9.8H, v3.8H, v7.H[0] // .......................................................*........... + str q20, [x0, #256] // ........................................................*.......... + add v3.8H, v28.8H, v31.8H // .........................................................*......... + str q17, [x0, #320] // ..........................................................*........ + sub v12.8H, v28.8H, v31.8H // ...........................................................*....... + str q3, [x0, #384] // ............................................................*...... + add v26.8H, v4.8H, v9.8H // .............................................................*..... + str q12, [x0, #448] // ..............................................................*.... + sub v17.8H, v4.8H, v9.8H // ...............................................................*... + str q26, [x0], #(16) // ................................................................*.. + str q17, [x0, #48] // ..................................................................* + + // ------------------------ cycle (expected) ------------------------> + // 0 25 50 + // |------------------------|------------------------|---------------- + // sqrdmulh v3.8H, v12.8H, v0.H[1] // .......*........................................................... + // sqrdmulh v12.8H, v9.8H, v0.H[1] // .....*............................................................. + // mul v9.8H, v9.8H, v0.H[0] // ...*............................................................... + // sqrdmulh v17.8H, v31.8H, v0.H[1] // ..*................................................................ + // mls v16.8H, v3.8H, v7.H[0] // ...............*................................................... + // mul v3.8H, v31.8H, v0.H[0] // .*................................................................. + // mls v9.8H, v12.8H, v7.H[0] // .........*......................................................... + // sqrdmulh v12.8H, v23.8H, v0.H[1] // *.................................................................. + // sub v23.8H, v10.8H, v16.8H // ...................*............................................... + // mls v3.8H, v17.8H, v7.H[0] // ......*............................................................ + // sub v17.8H, v5.8H, v9.8H // ...................................*............................... + // add v9.8H, v5.8H, v9.8H // .................*................................................. + // add v16.8H, v10.8H, v16.8H // .............................*..................................... + // sub v31.8H, v18.8H, v3.8H // ..........*........................................................ + // add v3.8H, v18.8H, v3.8H // ....................*.............................................. + // mls v8.8H, v12.8H, v7.H[0] // ....*.............................................................. + // sqrdmulh v12.8H, v31.8H, v0.H[5] // ..............*.................................................... + // mul v31.8H, v31.8H, v0.H[4] // .............*..................................................... + // sqrdmulh v10.8H, v3.8H, v0.H[3] // .........................*......................................... + // sub v5.8H, v15.8H, v8.8H // ............................*...................................... + // add v8.8H, v15.8H, v8.8H // ........*.......................................................... + // mls v31.8H, v12.8H, v7.H[0] // ..................*................................................ + // sqrdmulh v12.8H, v5.8H, v0.H[5] // ...............................*................................... + // mul v5.8H, v5.8H, v0.H[4] // ................................*.................................. + // mul v3.8H, v3.8H, v0.H[2] // ..........................*........................................ + // sub v18.8H, v23.8H, v31.8H // .......................*........................................... + // add v23.8H, v23.8H, v31.8H // ......................*............................................ + // mls v5.8H, v12.8H, v7.H[0] // ....................................*.............................. + // sqrdmulh v12.8H, v8.8H, v0.H[3] // ...........*....................................................... + // mul v31.8H, v8.8H, v0.H[2] // ............*...................................................... + // mls v3.8H, v10.8H, v7.H[0] // ..............................*.................................... + // sub v8.8H, v17.8H, v5.8H // ...........................................*....................... + // add v17.8H, v17.8H, v5.8H // .........................................*......................... + // mls v31.8H, v12.8H, v7.H[0] // ................*.................................................. + // sub v12.8H, v16.8H, v3.8H // ..................................*................................ + // add v3.8H, v16.8H, v3.8H // ..............................................*.................... + // sqrdmulh v16.8H, v17.8H, v1.H[3] // ............................................*...................... + // sub v10.8H, v9.8H, v31.8H // .....................*............................................. + // add v9.8H, v9.8H, v31.8H // .......................................*........................... + // mul v17.8H, v17.8H, v1.H[2] // .............................................*..................... + // sqrdmulh v31.8H, v10.8H, v1.H[1] // ...........................*....................................... + // sqrdmulh v5.8H, v9.8H, v0.H[7] // ..................................................*................ + // mul v9.8H, v9.8H, v0.H[6] // ...................................................*............... + // mul v10.8H, v10.8H, v1.H[0] // ........................*.......................................... + // mls v17.8H, v16.8H, v7.H[0] // .................................................*................. + // sqrdmulh v16.8H, v8.8H, v1.H[5] // ...............................................*................... + // mls v9.8H, v5.8H, v7.H[0] // .......................................................*........... + // mls v10.8H, v31.8H, v7.H[0] // .................................*................................. + // sub v31.8H, v23.8H, v17.8H // ......................................................*............ + // add v17.8H, v23.8H, v17.8H // .....................................................*............. + // sub v23.8H, v3.8H, v9.8H // ...............................................................*... + // mul v8.8H, v8.8H, v1.H[4] // ................................................*.................. + // add v3.8H, v3.8H, v9.8H // .............................................................*..... + // sub v9.8H, v12.8H, v10.8H // .....................................*............................. + // add v12.8H, v12.8H, v10.8H // ......................................*............................ + // mls v8.8H, v16.8H, v7.H[0] // ....................................................*.............. + // str q3, [x0], #(16) // ................................................................*.. + // sub v3.8H, v18.8H, v8.8H // ...........................................................*....... + // add v16.8H, v18.8H, v8.8H // .........................................................*......... + // str q23, [x0, #48] // ..................................................................* + // str q12, [x0, #112] // ..........................................*........................ + // str q9, [x0, #176] // ........................................*.......................... + // str q17, [x0, #240] // ........................................................*.......... + // str q31, [x0, #304] // ..........................................................*........ + // str q16, [x0, #368] // ............................................................*...... + // str q3, [x0, #432] // ..............................................................*.... + + + ldr inp, [sp, #STACK0] // @slothy:reads=STACK0 mov count, #8 .p2align 2 - // gap // ............................... - ldr_vo v6, x1, 48 // .*............................. - // gap // ............................... - // gap // ............................... - ldr_vi v9, x3, 16 // ..*............................ - // gap // ............................... - // gap // ............................... - // gap // ............................... - ldr_vo v31, x1, 32 // .......*....................... - // gap // ............................... - // gap // ............................... - // gap // ............................... - sqrdmulh v2.8H, v6.8H, v9.H[1] // ....*.......................... - // gap // ............................... - mul v20.8H, v6.8H, v9.H[0] // ...*........................... - // gap // ............................... - ldr_vo v24, x1, 16 // *.............................. - // gap // ............................... - // gap // ............................... - // gap // ............................... - mul v3.8H, v31.8H, v9.H[0] // ..........*.................... - // gap // ............................... - mls v20.8H, v2.8H, v7.H[0] // ......*........................ - // gap // ............................... - sqrdmulh v11.8H, v31.8H, v9.H[1] // ...........*................... - // gap // ............................... - ldr_vo v18, x1, 0 // .....*......................... - // gap // ............................... - // gap // ............................... - // gap // ............................... - add v2.8H, v24.8H, v20.8H // ........*...................... - // gap // ............................... - sub v27.8H, v24.8H, v20.8H // .........*..................... - // gap // ............................... - mls v3.8H, v11.8H, v7.H[0] // ...............*............... - // gap // ............................... - mul v10.8H, v2.8H, v9.H[2] // ..............*................ - // gap // ............................... - sqrdmulh v24.8H, v27.8H, v9.H[5] // ............*.................. - // gap // ............................... - mul v11.8H, v27.8H, v9.H[4] // .............*................. - // gap // ............................... - sqrdmulh v28.8H, v2.8H, v9.H[3] // ........................*...... - // gap // ............................... - sub v31.8H, v18.8H, v3.8H // ..................*............ - // gap // ............................... - add v26.8H, v18.8H, v3.8H // ......................*........ - // gap // ............................... - mls v11.8H, v24.8H, v7.H[0] // .................*............. - // gap // ............................... - mls v10.8H, v28.8H, v7.H[0] // .........................*..... - // gap // ............................... - ldr_vi v19, x4, 96 // ................*.............. - // gap // ............................... - // gap // ............................... - // gap // ............................... - add v29.8H, v31.8H, v11.8H // ....................*.......... - // gap // ............................... - sub v9.8H, v31.8H, v11.8H // .....................*......... - // gap // ............................... - sub v12.8H, v26.8H, v10.8H // ..........................*.... - // gap // ............................... - add v0.8H, v26.8H, v10.8H // ...........................*... - // gap // ............................... - trn1 v22.4S, v29.4S, v9.4S // .......................*....... - // gap // ............................... - // gap // ............................... - // gap // ............................... - trn1 v26.4S, v0.4S, v12.4S // ............................*.. - // gap // ............................... - ldr_vo v6, x4, -48 // ...................*........... - // gap // ............................... - // gap // ............................... - // gap // ............................... - trn2 v24.2D, v26.2D, v22.2D // ..............................* - // gap // ............................... - ldr_vo v3, x4, -16 // .............................*. - // gap // ............................... - - // original source code - // ldr_vo v14, x1, 16 // .....*......................... || ........*.............................. - // ldr_vo v13, x1, 48 // *.............................. || *...................................... - // ldr_vi v1, x3, 16 // .*............................. || ..*.................................... - // mul v31.8H, v13.8H, v1.H[0] // ....*.......................... || .......*............................... - // sqrdmulh v19.8H, v13.8H, v1.H[1] // ...*........................... || ......*................................ - // ldr_vo v23, x1, 0 // .........*..................... || .............*......................... - // mls v31.8H, v19.8H, v7.H[0] // .......*....................... || ...........*........................... - // ldr_vo v30, x1, 32 // ..*............................ || ....*.................................. - // add v16.8H, v14.8H, v31.8H // ..........*.................... || ...............*....................... - // sub v0.8H, v14.8H, v31.8H // ...........*................... || ................*...................... - // mul v14.8H, v30.8H, v1.H[0] // ......*........................ || ..........*............................ - // sqrdmulh v30.8H, v30.8H, v1.H[1] // ........*...................... || ............*.......................... - // sqrdmulh v10.8H, v0.8H, v1.H[5] // ..............*................ || ...................*................... - // mul v31.8H, v0.8H, v1.H[4] // ...............*............... || ....................*.................. - // mul v26.8H, v16.8H, v1.H[2] // .............*................. || ..................*.................... - // mls v14.8H, v30.8H, v7.H[0] // ............*.................. || .................*..................... - // ldr_vi v19, x4, 96 // .....................*......... || ..........................*............ - // mls v31.8H, v10.8H, v7.H[0] // ...................*........... || ........................*.............. - // sub v12.8H, v23.8H, v14.8H // .................*............. || ......................*................ - // ldr_vo v6, x4, -48 // ............................*.. || ...................................*... - // add v29.8H, v12.8H, v31.8H // ......................*........ || ............................*.......... - // sub v9.8H, v12.8H, v31.8H // .......................*....... || .............................*......... - // add v24.8H, v23.8H, v14.8H // ..................*............ || .......................*............... - // trn1 v22.4S, v29.4S, v9.4S // ..........................*.... || ................................*...... - // sqrdmulh v0.8H, v16.8H, v1.H[3] // ................*.............. || .....................*................. - // mls v26.8H, v0.8H, v7.H[0] // ....................*.......... || .........................*............. - // sub v12.8H, v24.8H, v26.8H // ........................*...... || ..............................*........ - // add v0.8H, v24.8H, v26.8H // .........................*..... || ...............................*....... - // trn1 v26.4S, v0.4S, v12.4S // ...........................*... || ..................................*.... - // ldr_vo v3, x4, -16 // ..............................* || ......................................* - // trn2 v24.2D, v26.2D, v22.2D // .............................*. || .....................................*. - + // Instructions: 18 + // Expected cycles: 25 + // Expected IPC: 0.72 + // + // Cycle bound: 25.0 + // IPC bound: 0.72 + // + // Wall time: 0.04s + // User time: 0.04s + // + // ----- cycle (expected) ------> + // 0 25 + // |------------------------|---- + ldr q3, [x1, #48] // *............................. + ldr q6, [x3], #16 // ..*........................... + ldr q12, [x1, #16] // ....*......................... + mul v9.8H, v3.8H, v6.H[0] // ......*....................... + sqrdmulh v3.8H, v3.8H, v6.H[1] // .......*...................... + ldr q31, [x1, #0] // ........*..................... + ldr q17, [x1, #32] // ..........*................... + mls v9.8H, v3.8H, v7.H[0] // ............*................. + ldr q10, [x4, #80] // .............*................ + sqrdmulh v3.8H, v17.8H, v6.H[1] // ...............*.............. + add v14.8H, v12.8H, v9.8H // ................*............. + sub v12.8H, v12.8H, v9.8H // .................*............ + mul v21.8H, v17.8H, v6.H[0] // ..................*........... + ldr q11, [x4, #64] // ...................*.......... + mul v26.8H, v12.8H, v6.H[4] // .....................*........ + mls v21.8H, v3.8H, v7.H[0] // ......................*....... + sqrdmulh v15.8H, v12.8H, v6.H[5] // .......................*...... + ldr q18, [x4, #48] // ........................*..... + + // ------ cycle (expected) ------> + // 0 25 + // |------------------------|----- + // ldr q15, [x1, #48] // *.............................. + // ldr q13, [x1, #16] // ....*.......................... + // ldr q6, [x3], #16 // ..*............................ + // mul v19.8H, v15.8H, v6.H[0] // ......*........................ + // ldr q31, [x1, #0] // ........*...................... + // ldr q10, [x4, #80] // .............*................. + // ldr q20, [x1, #32] // ..........*.................... + // sqrdmulh v9.8H, v20.8H, v6.H[1] // ...............*............... + // sqrdmulh v3.8H, v15.8H, v6.H[1] // .......*....................... + // mul v21.8H, v20.8H, v6.H[0] // ..................*............ + // mls v21.8H, v9.8H, v7.H[0] // ......................*........ + // mls v19.8H, v3.8H, v7.H[0] // ............*.................. + // ldr q11, [x4, #64] // ...................*........... + // add v14.8H, v13.8H, v19.8H // ................*.............. + // ldr q18, [x4, #48] // ........................*...... + // sub v15.8H, v13.8H, v19.8H // .................*............. + // mul v26.8H, v15.8H, v6.H[4] // .....................*......... + // sqrdmulh v15.8H, v15.8H, v6.H[5] // .......................*....... + sub count, count, #1 -.p2align 2 layer4567_start: - mul v17.8H, v24.8H, v19.8H // .......................................*................................ - // gap // ........................................................................ - trn2 v9.4S, v29.4S, v9.4S // ............................*........................................... - // gap // ........................................................................ - trn2 v29.4S, v0.4S, v12.4S // ..........................*............................................. - // gap // ........................................................................ - // gap // ........................................................................ - ldr_vo v14, x1, 80 // .e...................................................................... - // gap // ........................................................................ - // gap // ........................................................................ - trn2 v12.2D, v29.2D, v9.2D // ..............................*......................................... - // gap // ........................................................................ - trn1 v5.2D, v29.2D, v9.2D // ................................*....................................... - // gap // ........................................................................ - ldr_vo v21, x4, -32 // .....................................*.................................. - // gap // ........................................................................ - // gap // ........................................................................ - // gap // ........................................................................ - mul v9.8H, v12.8H, v19.8H // ............................................*........................... - // gap // ........................................................................ - // gap // ........................................................................ - ldr_vo v23, x4, -80 // ..................................*..................................... - // gap // ........................................................................ - // gap // ........................................................................ - ldr_vo v13, x1, 112 // ...e.................................................................... - // gap // ........................................................................ - // gap // ........................................................................ - // gap // ........................................................................ - sqrdmulh v19.8H, v12.8H, v23.8H // .............................................*.......................... - // gap // ........................................................................ - // gap // ........................................................................ - ldr_vi v1, x3, 16 // ....e................................................................... - // gap // ........................................................................ - // gap // ........................................................................ - sqrdmulh v10.8H, v24.8H, v23.8H // ........................................*............................... - // gap // ........................................................................ - mls v9.8H, v19.8H, v7.H[0] // ..............................................*......................... - // gap // ........................................................................ - mul v31.8H, v13.8H, v1.H[0] // ..........e............................................................. - // gap // ........................................................................ - sqrdmulh v19.8H, v13.8H, v1.H[1] // ...........e............................................................ - // gap // ........................................................................ - mls v17.8H, v10.8H, v7.H[0] // .........................................*.............................. - // gap // ........................................................................ - sub v28.8H, v5.8H, v9.8H // ...............................................*........................ - // gap // ........................................................................ - ldr_vo v23, x1, 64 // e....................................................................... - // gap // ........................................................................ - // gap // ........................................................................ - // gap // ........................................................................ - sqrdmulh v15.8H, v28.8H, v3.8H // .......................................................*................ - // gap // ........................................................................ - trn1 v24.2D, v26.2D, v22.2D // ...............................*........................................ - // gap // ........................................................................ - mul v21.8H, v28.8H, v21.8H // ......................................................*................. - // gap // ........................................................................ - add v2.8H, v24.8H, v17.8H // ...........................................*............................ - // gap // ........................................................................ - mls v31.8H, v19.8H, v7.H[0] // ............e........................................................... - // gap // ........................................................................ - add v3.8H, v5.8H, v9.8H // ................................................*....................... - // gap // ........................................................................ - ldr_vo v30, x1, 96 // ..e..................................................................... - // gap // ........................................................................ - // gap // ........................................................................ - // gap // ........................................................................ - add v16.8H, v14.8H, v31.8H // ..............e......................................................... - // gap // ........................................................................ - sub v0.8H, v14.8H, v31.8H // .............e.......................................................... - // gap // ........................................................................ - mul v14.8H, v30.8H, v1.H[0] // .....e.................................................................. - // gap // ........................................................................ - sqrdmulh v25.8H, v3.8H, v6.8H // ..................................................*..................... - // gap // ........................................................................ - mls v21.8H, v15.8H, v7.H[0] // ........................................................*............... - // gap // ........................................................................ - sqrdmulh v30.8H, v30.8H, v1.H[1] // ......e................................................................. - // gap // ........................................................................ - sqrdmulh v10.8H, v0.8H, v1.H[5] // .....................e.................................................. - // gap // ........................................................................ - mul v31.8H, v0.8H, v1.H[4] // ....................e................................................... - // gap // ........................................................................ - mul v26.8H, v16.8H, v1.H[2] // ...............e........................................................ - // gap // ........................................................................ - mls v14.8H, v30.8H, v7.H[0] // .......e................................................................ - // gap // ........................................................................ - ldr_vi v19, x4, 96 // .................................e...................................... - // gap // ........................................................................ - // gap // ........................................................................ - // gap // ........................................................................ - mls v31.8H, v10.8H, v7.H[0] // ......................e................................................. - // gap // ........................................................................ - sub v12.8H, v23.8H, v14.8H // ........e............................................................... - // gap // ........................................................................ - ldr_vo v6, x4, -48 // ....................................e................................... - // gap // ........................................................................ - // gap // ........................................................................ - // gap // ........................................................................ - add v29.8H, v12.8H, v31.8H // ........................e............................................... - // gap // ........................................................................ - sub v9.8H, v12.8H, v31.8H // .......................e................................................ - // gap // ........................................................................ - sub v5.8H, v24.8H, v17.8H // ..........................................*............................. - // gap // ........................................................................ - add v24.8H, v23.8H, v14.8H // .........e.............................................................. - // gap // ........................................................................ - trn1 v22.4S, v29.4S, v9.4S // ...........................e............................................ - // gap // ........................................................................ - sub v18.8H, v5.8H, v21.8H // .........................................................*.............. - // gap // ........................................................................ - // gap // ........................................................................ - ldr_vo v27, x4, -160 // ...................................*.................................... - // gap // ........................................................................ - // gap // ........................................................................ - add v17.8H, v5.8H, v21.8H // ..........................................................*............. - // gap // ........................................................................ - sqdmulh v4.8H, v18.8H, v7.H[1] // ....................................................................*... - // gap // ........................................................................ - mul v3.8H, v3.8H, v27.8H // .................................................*...................... - // gap // ........................................................................ - sqdmulh v11.8H, v17.8H, v7.H[1] // .................................................................*...... - // gap // ........................................................................ - sqrdmulh v0.8H, v16.8H, v1.H[3] // ................e....................................................... - // gap // ........................................................................ - srshr v21.8H, v4.8H, #11 // .....................................................................*.. - // gap // ........................................................................ - mls v3.8H, v25.8H, v7.H[0] // ...................................................*.................... - // gap // ........................................................................ - srshr v27.8H, v11.8H, #11 // ..................................................................*..... - // gap // ........................................................................ - mls v26.8H, v0.8H, v7.H[0] // .................e...................................................... - // gap // ........................................................................ - mls v18.8H, v21.8H, v7.H[0] // ......................................................................*. - // gap // ........................................................................ - sub v16.8H, v2.8H, v3.8H // ....................................................*................... - // gap // ........................................................................ - add v15.8H, v2.8H, v3.8H // .....................................................*.................. - // gap // ........................................................................ - mls v17.8H, v27.8H, v7.H[0] // ...................................................................*.... - // gap // ........................................................................ - sqdmulh v20.8H, v16.8H, v7.H[1] // ..............................................................*......... - // gap // ........................................................................ - sqdmulh v3.8H, v15.8H, v7.H[1] // ...........................................................*............ - // gap // ........................................................................ - sub v12.8H, v24.8H, v26.8H // ..................e..................................................... - // gap // ........................................................................ - add v0.8H, v24.8H, v26.8H // ...................e.................................................... - // gap // ........................................................................ - srshr v30.8H, v20.8H, #11 // ...............................................................*........ - // gap // ........................................................................ - srshr v4.8H, v3.8H, #11 // ............................................................*........... - // gap // ........................................................................ - trn1 v26.4S, v0.4S, v12.4S // .........................e.............................................. - // gap // ........................................................................ - mls v16.8H, v30.8H, v7.H[0] // ................................................................*....... - // gap // ........................................................................ - mls v15.8H, v4.8H, v7.H[0] // .............................................................*.......... - // gap // ........................................................................ - ldr_vo v3, x4, -16 // ......................................e................................. - // gap // ........................................................................ - // gap // ........................................................................ - // gap // ........................................................................ - trn2 v24.2D, v26.2D, v22.2D // .............................e.......................................... - // gap // ........................................................................ - st4 {v15.4S,v16.4S,v17.4S,v18.4S}, [x1], #64 // .......................................................................* - // gap // ........................................................................ - // gap // ........................................................................ - // gap // ........................................................................ - // gap // ........................................................................ - // gap // ........................................................................ - // gap // ........................................................................ - // gap // ........................................................................ - // gap // ........................................................................ - // gap // ........................................................................ - - // original source code - // ldr_vo v8, x1, 0 // ...............e............................................................................................................................. || ....................e.................................................................................................................................................. - // ldr_vo v9, x1, 16 // e............................................................................................................................................ || e...................................................................................................................................................................... - // ldr_vo v10, x1, 32 // ......................e...................................................................................................................... || ............................e.......................................................................................................................................... - // ldr_vo v11, x1, 48 // ......e...................................................................................................................................... || .........e............................................................................................................................................................. - // ldr_vi v0, x3, 16 // ........e.................................................................................................................................... || ............e.......................................................................................................................................................... - // mul v24.8H, v10.8H, v0.H[0] // .........................e................................................................................................................... || ................................e...................................................................................................................................... - // sqrdmulh v10.8H, v10.8H, v0.H[1] // ............................e................................................................................................................ || ...................................e................................................................................................................................... - // mls v24.8H, v10.8H, v7.H[0] // ................................e............................................................................................................ || .......................................e............................................................................................................................... - // sub v10.8H, v8.8H, v24.8H // ...................................e......................................................................................................... || ...........................................e........................................................................................................................... - // add v8.8H, v8.8H, v24.8H // ........................................e.................................................................................................... || .................................................e..................................................................................................................... - // mul v24.8H, v11.8H, v0.H[0] // ...........e................................................................................................................................. || ................e...................................................................................................................................................... - // sqrdmulh v11.8H, v11.8H, v0.H[1] // ............e................................................................................................................................ || .................e..................................................................................................................................................... - // mls v24.8H, v11.8H, v7.H[0] // ....................e........................................................................................................................ || ..........................e............................................................................................................................................ - // sub v11.8H, v9.8H, v24.8H // ........................e.................................................................................................................... || ...............................e....................................................................................................................................... - // add v9.8H, v9.8H, v24.8H // .......................e..................................................................................................................... || ..............................e........................................................................................................................................ - // mul v24.8H, v9.8H, v0.H[2] // ...............................e............................................................................................................. || ......................................e................................................................................................................................ - // sqrdmulh v9.8H, v9.8H, v0.H[3] // ................................................e............................................................................................ || ..........................................................e............................................................................................................ - // mls v24.8H, v9.8H, v7.H[0] // ....................................................e........................................................................................ || ..............................................................e........................................................................................................ - // sub v9.8H, v8.8H, v24.8H // ...........................................................e................................................................................. || .....................................................................e................................................................................................. - // add v8.8H, v8.8H, v24.8H // ............................................................e................................................................................ || ......................................................................e................................................................................................ - // mul v24.8H, v11.8H, v0.H[4] // ..............................e.............................................................................................................. || .....................................e................................................................................................................................. - // sqrdmulh v11.8H, v11.8H, v0.H[5] // .............................e............................................................................................................... || ....................................e.................................................................................................................................. - // mls v24.8H, v11.8H, v7.H[0] // ..................................e.......................................................................................................... || ..........................................e............................................................................................................................ - // sub v11.8H, v10.8H, v24.8H // ......................................e...................................................................................................... || ...............................................e....................................................................................................................... - // add v10.8H, v10.8H, v24.8H // .....................................e....................................................................................................... || ..............................................e........................................................................................................................ - // trn1 v25.4S, v8.4S, v9.4S // ...............................................................e............................................................................. || .........................................................................e............................................................................................. - // trn2 v26.4S, v8.4S, v9.4S // .......................................................................*..................................................................... || ......................................................................................*................................................................................ - // trn1 v27.4S, v10.4S, v11.4S // .........................................e................................................................................................... || ..................................................e.................................................................................................................... - // trn2 v28.4S, v10.4S, v11.4S // ......................................................................*...................................................................... || .....................................................................................*................................................................................. - // trn2 v10.2D, v25.2D, v27.2D // ...................................................................e......................................................................... || ..............................................................................e........................................................................................ - // trn2 v11.2D, v26.2D, v28.2D // .........................................................................*................................................................... || .........................................................................................*............................................................................. - // trn1 v8.2D, v25.2D, v27.2D // .........................................................................................*................................................... || ..............................................................................................................*........................................................ - // trn1 v9.2D, v26.2D, v28.2D // ..........................................................................*.................................................................. || ..........................................................................................*............................................................................ - // ldr_vi v0, x4, 96 // .................................e........................................................................................................... || ........................................e.............................................................................................................................. - // ldr_vo v4, x4, -80 // .............................................................................*............................................................... || ..............................................................................................*........................................................................ - // ldr_vo v1, x4, -64 // ...................................................................................................................*......................... || ...........................................................................................................................................*........................... - // ldr_vo v5, x4, -48 // ....................................e........................................................................................................ || ............................................e.......................................................................................................................... - // ldr_vo v2, x4, -32 // ...........................................................................*................................................................. || ...........................................................................................*........................................................................... - // ldr_vo v6, x4, -16 // ..................................................................e.......................................................................... || ............................................................................e.......................................................................................... - // mul v24.8H, v10.8H, v0.8H // .....................................................................*....................................................................... || ....................................................................................*.................................................................................. - // sqrdmulh v10.8H, v10.8H, v4.8H // .................................................................................*........................................................... || .....................................................................................................*................................................................. - // mls v24.8H, v10.8H, v7.H[0] // .....................................................................................*....................................................... || .........................................................................................................*............................................................. - // sub v10.8H, v8.8H, v24.8H // ...............................................................................................................*............................. || .......................................................................................................................................*............................... - // add v8.8H, v8.8H, v24.8H // ...........................................................................................*................................................. || ................................................................................................................*...................................................... - // mul v24.8H, v11.8H, v0.8H // ............................................................................*................................................................ || .............................................................................................*......................................................................... - // sqrdmulh v11.8H, v11.8H, v4.8H // ...............................................................................*............................................................. || ..................................................................................................*.................................................................... - // mls v24.8H, v11.8H, v7.H[0] // ..................................................................................*.......................................................... || ......................................................................................................*................................................................ - // sub v11.8H, v9.8H, v24.8H // ......................................................................................*...................................................... || ..........................................................................................................*............................................................ - // add v9.8H, v9.8H, v24.8H // .............................................................................................*............................................... || ..................................................................................................................*.................................................... - // mul v24.8H, v9.8H, v1.8H // ......................................................................................................................*...................... || ...............................................................................................................................................*....................... - // sqrdmulh v9.8H, v9.8H, v5.8H // ..................................................................................................*.......................................... || ........................................................................................................................*.............................................. - // mls v24.8H, v9.8H, v7.H[0] // ..........................................................................................................................*.................. || ...................................................................................................................................................*................... - // sub v9.8H, v8.8H, v24.8H // ..............................................................................................................................*.............. || .......................................................................................................................................................*............... - // add v8.8H, v8.8H, v24.8H // ...............................................................................................................................*............. || ........................................................................................................................................................*.............. - // mul v24.8H, v11.8H, v2.8H // ..........................................................................................*.................................................. || ...............................................................................................................*....................................................... - // sqrdmulh v11.8H, v11.8H, v6.8H // ........................................................................................*.................................................... || .............................................................................................................*......................................................... - // mls v24.8H, v11.8H, v7.H[0] // ...................................................................................................*......................................... || .........................................................................................................................*............................................. - // sub v11.8H, v10.8H, v24.8H // ..................................................................................................................*.......................... || ..........................................................................................................................................*............................ - // add v10.8H, v10.8H, v24.8H // ....................................................................................................................*........................ || .............................................................................................................................................*......................... - // sqdmulh v25.8H, v8.8H, v7.H[1] // ..................................................................................................................................*.......... || ...........................................................................................................................................................*........... - // srshr v25.8H, v25.8H, #11 // ......................................................................................................................................*...... || ...............................................................................................................................................................*....... - // mls v8.8H, v25.8H, v7.H[0] // .........................................................................................................................................*... || ..................................................................................................................................................................*.... - // sqdmulh v25.8H, v9.8H, v7.H[1] // .................................................................................................................................*........... || ..........................................................................................................................................................*............ - // srshr v25.8H, v25.8H, #11 // .....................................................................................................................................*....... || ..............................................................................................................................................................*........ - // mls v9.8H, v25.8H, v7.H[0] // ........................................................................................................................................*.... || .................................................................................................................................................................*..... - // sqdmulh v25.8H, v10.8H, v7.H[1] // .......................................................................................................................*..................... || ................................................................................................................................................*...................... - // srshr v25.8H, v25.8H, #11 // ...........................................................................................................................*................. || ....................................................................................................................................................*.................. - // mls v10.8H, v25.8H, v7.H[0] // ................................................................................................................................*............ || .........................................................................................................................................................*............. - // sqdmulh v25.8H, v11.8H, v7.H[1] // .....................................................................................................................*....................... || ..............................................................................................................................................*........................ - // srshr v25.8H, v25.8H, #11 // .........................................................................................................................*................... || ..................................................................................................................................................*.................... - // mls v11.8H, v25.8H, v7.H[0] // .............................................................................................................................*............... || ......................................................................................................................................................*................ - // st4 {v8.4S,v9.4S,v10.4S,v11.4S}, [x1], #64 // ............................................................................................................................................* || ......................................................................................................................................................................* - - subs count, count, #1 - cbnz count, layer4567_start - trn2 v11.4S, v29.4S, v9.4S // .*....................................... - // gap // ......................................... - trn2 v21.4S, v0.4S, v12.4S // ..*...................................... - // gap // ......................................... - ldr_vo v10, x4, -80 // .......*................................. - // gap // ......................................... - // gap // ......................................... - // gap // ......................................... - trn2 v20.2D, v21.2D, v11.2D // ...*..................................... - // gap // ......................................... - mul v4.8H, v24.8H, v19.8H // *........................................ - // gap // ......................................... - mul v25.8H, v20.8H, v19.8H // ......*.................................. - // gap // ......................................... - sqrdmulh v20.8H, v20.8H, v10.8H // ........*................................ - // gap // ......................................... - sqrdmulh v13.8H, v24.8H, v10.8H // .........*............................... - // gap // ......................................... - ldr_vo v28, x4, -32 // .....*................................... - // gap // ......................................... - // gap // ......................................... - // gap // ......................................... - mls v25.8H, v20.8H, v7.H[0] // ..........*.............................. - // gap // ......................................... - trn1 v21.2D, v21.2D, v11.2D // ....*.................................... - // gap // ......................................... - ldr_vo v2, x4, -64 // ......................*.................. - // gap // ......................................... - // gap // ......................................... - // gap // ......................................... - add v11.8H, v21.8H, v25.8H // .................*....................... - // gap // ......................................... - mls v4.8H, v13.8H, v7.H[0] // ...........*............................. - // gap // ......................................... - sub v31.8H, v21.8H, v25.8H // ............*............................ - // gap // ......................................... - mul v2.8H, v11.8H, v2.8H // .........................*............... - // gap // ......................................... - sqrdmulh v11.8H, v11.8H, v6.8H // ..................*...................... - // gap // ......................................... - mul v27.8H, v31.8H, v28.8H // ...............*......................... - // gap // ......................................... - sqrdmulh v21.8H, v31.8H, v3.8H // .............*........................... - // gap // ......................................... - trn1 v18.2D, v26.2D, v22.2D // ..............*.......................... - // gap // ......................................... - mls v2.8H, v11.8H, v7.H[0] // ............................*............ - // gap // ......................................... - add v11.8H, v18.8H, v4.8H // ................*........................ - // gap // ......................................... - mls v27.8H, v21.8H, v7.H[0] // ...................*..................... - // gap // ......................................... - sub v3.8H, v18.8H, v4.8H // ....................*.................... - // gap // ......................................... - sub v16.8H, v11.8H, v2.8H // ...............................*......... - // gap // ......................................... - add v15.8H, v11.8H, v2.8H // ................................*........ - // gap // ......................................... - sub v18.8H, v3.8H, v27.8H // .....................*................... - // gap // ......................................... - add v17.8H, v3.8H, v27.8H // .......................*................. - // gap // ......................................... - sqdmulh v30.8H, v16.8H, v7.H[1] // ..................................*...... - // gap // ......................................... - sqdmulh v11.8H, v15.8H, v7.H[1] // ...................................*..... - // gap // ......................................... - sqdmulh v3.8H, v18.8H, v7.H[1] // ........................*................ - // gap // ......................................... - sqdmulh v20.8H, v17.8H, v7.H[1] // ..........................*.............. - // gap // ......................................... - srshr v21.8H, v30.8H, #11 // ....................................*.... - // gap // ......................................... - srshr v13.8H, v11.8H, #11 // .....................................*... - // gap // ......................................... - srshr v11.8H, v3.8H, #11 // ...........................*............. - // gap // ......................................... - mls v16.8H, v21.8H, v7.H[0] // ......................................*.. - // gap // ......................................... - srshr v21.8H, v20.8H, #11 // .............................*........... - // gap // ......................................... - mls v18.8H, v11.8H, v7.H[0] // ..............................*.......... - // gap // ......................................... - mls v15.8H, v13.8H, v7.H[0] // .......................................*. - // gap // ......................................... - mls v17.8H, v21.8H, v7.H[0] // .................................*....... - // gap // ......................................... - // gap // ......................................... - // gap // ......................................... - // gap // ......................................... - // gap // ......................................... - // gap // ......................................... - // gap // ......................................... - st4 {v15.4S,v16.4S,v17.4S,v18.4S}, [x1], #64 // ........................................* - // gap // ......................................... - - // original source code - // mul v17.8H, v24.8H, v19.8H // ....*.................................... || .....*......................................... - // trn2 v9.4S, v29.4S, v9.4S // *........................................ || *.............................................. - // trn2 v29.4S, v0.4S, v12.4S // .*....................................... || .*............................................. - // trn2 v12.2D, v29.2D, v9.2D // ...*..................................... || ....*.......................................... - // trn1 v5.2D, v29.2D, v9.2D // ..........*.............................. || ............*.................................. - // ldr_vo v21, x4, -32 // ........*................................ || .........*..................................... - // mul v9.8H, v12.8H, v19.8H // .....*................................... || ......*........................................ - // ldr_vo v23, x4, -80 // ..*...................................... || ..*............................................ - // sqrdmulh v19.8H, v12.8H, v23.8H // ......*.................................. || .......*....................................... - // sqrdmulh v10.8H, v24.8H, v23.8H // .......*................................. || ........*...................................... - // mls v9.8H, v19.8H, v7.H[0] // .........*............................... || ...........*................................... - // mls v17.8H, v10.8H, v7.H[0] // .............*........................... || ................*.............................. - // sub v28.8H, v5.8H, v9.8H // ..............*.......................... || .................*............................. - // sqrdmulh v15.8H, v28.8H, v3.8H // ..................*...................... || .....................*......................... - // trn1 v24.2D, v26.2D, v22.2D // ...................*..................... || ......................*........................ - // mul v21.8H, v28.8H, v21.8H // .................*....................... || ....................*.......................... - // add v2.8H, v24.8H, v17.8H // .....................*................... || ........................*...................... - // add v3.8H, v5.8H, v9.8H // ............*............................ || ...............*............................... - // sqrdmulh v25.8H, v3.8H, v6.8H // ................*........................ || ...................*........................... - // mls v21.8H, v15.8H, v7.H[0] // ......................*.................. || .........................*..................... - // sub v5.8H, v24.8H, v17.8H // .......................*................. || ..........................*.................... - // sub v18.8H, v5.8H, v21.8H // ..........................*.............. || .............................*................. - // ldr_vo v27, x4, -64 // ...........*............................. || .............*................................. - // add v17.8H, v5.8H, v21.8H // ...........................*............. || ..............................*................ - // sqdmulh v4.8H, v18.8H, v7.H[1] // ..............................*.......... || .................................*............. - // mul v3.8H, v3.8H, v27.8H // ...............*......................... || ..................*............................ - // sqdmulh v11.8H, v17.8H, v7.H[1] // ...............................*......... || ..................................*............ - // srshr v21.8H, v4.8H, #11 // ..................................*...... || .....................................*......... - // mls v3.8H, v25.8H, v7.H[0] // ....................*.................... || .......................*....................... - // srshr v27.8H, v11.8H, #11 // ....................................*.... || .......................................*....... - // mls v18.8H, v21.8H, v7.H[0] // .....................................*... || ........................................*...... - // sub v16.8H, v2.8H, v3.8H // ........................*................ || ...........................*................... - // add v15.8H, v2.8H, v3.8H // .........................*............... || ............................*.................. - // mls v17.8H, v27.8H, v7.H[0] // .......................................*. || ..........................................*.... - // sqdmulh v20.8H, v16.8H, v7.H[1] // ............................*............ || ...............................*............... - // sqdmulh v3.8H, v15.8H, v7.H[1] // .............................*........... || ................................*.............. - // srshr v30.8H, v20.8H, #11 // ................................*........ || ...................................*........... - // srshr v4.8H, v3.8H, #11 // .................................*....... || ....................................*.......... - // mls v16.8H, v30.8H, v7.H[0] // ...................................*..... || ......................................*........ - // mls v15.8H, v4.8H, v7.H[0] // ......................................*.. || .........................................*..... - // st4 {v15.4S,v16.4S,v17.4S,v18.4S}, [x1], #64 // ........................................* || ..............................................* - + // Instructions: 72 + // Expected cycles: 87 + // Expected IPC: 0.83 + // + // Cycle bound: 87.0 + // IPC bound: 0.83 + // + // Wall time: 154.77s + // User time: 154.77s + // + // ---------------------------------- cycle (expected) ----------------------------------> + // 0 25 50 75 + // |------------------------|------------------------|------------------------|----------- + ldr q4, [x4, #16] // *...................................................................................... + sqrdmulh v19.8H, v14.8H, v6.H[3] // ..*.................................................................................... + mul v29.8H, v14.8H, v6.H[2] // ...*................................................................................... + sub v3.8H, v31.8H, v21.8H // ....*.................................................................................. + mls v26.8H, v15.8H, v7.H[0] // .....*................................................................................. + ldr q2, [x4], #(6*16) // ......*................................................................................ + mls v29.8H, v19.8H, v7.H[0] // ........*.............................................................................. + add v15.8H, v31.8H, v21.8H // .........*............................................................................. + sub v5.8H, v3.8H, v26.8H // ..........*............................................................................ + add v25.8H, v3.8H, v26.8H // ...........*........................................................................... + add v26.8H, v15.8H, v29.8H // ............*.......................................................................... + sub v27.8H, v15.8H, v29.8H // .............*......................................................................... + trn2 v20.4S, v25.4S, v5.4S // ..............*........................................................................ + trn1 v14.4S, v25.4S, v5.4S // ...............*....................................................................... + trn2 v16.4S, v26.4S, v27.4S // ................*...................................................................... + ldr q15, [x1, #112] // .................e..................................................................... + trn2 v17.2D, v16.2D, v20.2D // ...................*................................................................... + ldr q13, [x1, #80] // ....................e.................................................................. + sqrdmulh v12.8H, v17.8H, v4.8H // ......................*................................................................ + mul v28.8H, v17.8H, v2.8H // .......................*............................................................... + trn1 v9.2D, v16.2D, v20.2D // ........................*.............................................................. + ldr q6, [x3], #16 // .........................e............................................................. + mls v28.8H, v12.8H, v7.H[0] // ...........................*........................................................... + ldr q5, [x4, #-64] // ............................*.......................................................... + mul v19.8H, v15.8H, v6.H[0] // ..............................e........................................................ + sub v12.8H, v9.8H, v28.8H // ...............................*....................................................... + add v9.8H, v9.8H, v28.8H // ................................*...................................................... + ldr q31, [x1, #64] // .................................e..................................................... + sqrdmulh v3.8H, v12.8H, v10.8H // ...................................*................................................... + ldr q10, [x4, #80] // ....................................e.................................................. + sqrdmulh v25.8H, v9.8H, v18.8H // ......................................*................................................ + trn1 v30.4S, v26.4S, v27.4S // .......................................*............................................... + ldr q20, [x1, #96] // ........................................e.............................................. + trn2 v17.2D, v30.2D, v14.2D // ..........................................*............................................ + trn1 v16.2D, v30.2D, v14.2D // ...........................................*........................................... + sqrdmulh v18.8H, v17.8H, v4.8H // ............................................*.......................................... + mul v21.8H, v17.8H, v2.8H // .............................................*......................................... + mul v29.8H, v12.8H, v11.8H // ..............................................*........................................ + mul v28.8H, v9.8H, v5.8H // ...............................................*....................................... + sqrdmulh v9.8H, v20.8H, v6.H[1] // ................................................e...................................... + mls v21.8H, v18.8H, v7.H[0] // .................................................*..................................... + mls v29.8H, v3.8H, v7.H[0] // ..................................................*.................................... + mls v28.8H, v25.8H, v7.H[0] // ...................................................*................................... + sqrdmulh v3.8H, v15.8H, v6.H[1] // ....................................................e.................................. + add v30.8H, v16.8H, v21.8H // .....................................................*................................. + sub v15.8H, v16.8H, v21.8H // ......................................................*................................ + mul v21.8H, v20.8H, v6.H[0] // .......................................................e............................... + add v24.8H, v30.8H, v28.8H // ........................................................*.............................. + sub v27.8H, v15.8H, v29.8H // .........................................................*............................. + sub v25.8H, v30.8H, v28.8H // ..........................................................*............................ + sqdmulh v16.8H, v24.8H, v7.H[1] // ...........................................................*........................... + sqdmulh v12.8H, v27.8H, v7.H[1] // ............................................................*.......................... + sqdmulh v0.8H, v25.8H, v7.H[1] // .............................................................*......................... + mls v21.8H, v9.8H, v7.H[0] // ..............................................................e........................ + srshr v9.8H, v16.8H, #11 // ...............................................................*....................... + srshr v30.8H, v12.8H, #11 // ................................................................*...................... + srshr v1.8H, v0.8H, #11 // .................................................................*..................... + add v26.8H, v15.8H, v29.8H // ..................................................................*.................... + mls v27.8H, v30.8H, v7.H[0] // ...................................................................*................... + mls v25.8H, v1.8H, v7.H[0] // ....................................................................*.................. + sqdmulh v14.8H, v26.8H, v7.H[1] // .....................................................................*................. + mls v19.8H, v3.8H, v7.H[0] // ......................................................................e................ + ldr q11, [x4, #64] // .......................................................................e............... + srshr v8.8H, v14.8H, #11 // .........................................................................*............. + add v14.8H, v13.8H, v19.8H // ..........................................................................e............ + mls v24.8H, v9.8H, v7.H[0] // ...........................................................................*........... + mls v26.8H, v8.8H, v7.H[0] // ............................................................................*.......... + ldr q18, [x4, #48] // .............................................................................e......... + sub v15.8H, v13.8H, v19.8H // ...............................................................................e....... + st4 {v24.4S, v25.4S, v26.4S, v27.4S}, [x1], #64 // ................................................................................*...... + mul v26.8H, v15.8H, v6.H[4] // .....................................................................................e. + sqrdmulh v15.8H, v15.8H, v6.H[5] // ......................................................................................e + + // ------------------------------------------------------------------ cycle (expected) ------------------------------------------------------------------> + // 0 25 50 75 100 125 + // |------------------------|------------------------|------------------------|------------------------|------------------------|------------------------- + // ldr q8, [x1, #(16*0)] // ................e.....................................................'................................~............................................... + // ldr q9, [x1, #(16*1)] // ...e..................................................................'...................~............................................................ + // ldr q10, [x1, #(16*2)] // .......................e..............................................'.......................................~........................................ + // ldr q11, [x1, #(16*3)] // e.....................................................................'................~............................................................... + // ldr q0, [x3], #16 // ........e.............................................................'........................~....................................................... + // sqrdmulh v27.8h, v10.8h, v0.h[1] // ...............................e......................................'...............................................~................................ + // mul v24.8h, v10.8h, v0.h[0] // ......................................e...............................'......................................................~......................... + // mls v24.8h, v27.8h, v7.h[0] // .............................................e........................'.............................................................~.................. + // sub v10.8h, v8.8h, v24.8h // ......................................................................'...*............................................................................ + // add v8.8h, v8.8h, v24.8h // ......................................................................'........*....................................................................... + // sqrdmulh v27.8h, v11.8h, v0.h[1] // ...................................e..................................'...................................................~............................ + // mul v24.8h, v11.8h, v0.h[0] // .............e........................................................'.............................~.................................................. + // mls v24.8h, v27.8h, v7.h[0] // .....................................................e................'.....................................................................~.......... + // sub v11.8h, v9.8h, v24.8h // ..............................................................e.......'..............................................................................~. + // add v9.8h, v9.8h, v24.8h // .........................................................e............'.........................................................................~...... + // sqrdmulh v27.8h, v9.8h, v0.h[3] // ......................................................................'.*.............................................................................. + // mul v24.8h, v9.8h, v0.h[2] // ......................................................................'..*............................................................................. + // mls v24.8h, v27.8h, v7.h[0] // ......................................................................'.......*........................................................................ + // sub v9.8h, v8.8h, v24.8h // ......................................................................'............*................................................................... + // add v8.8h, v8.8h, v24.8h // ......................................................................'...........*.................................................................... + // sqrdmulh v27.8h, v11.8h, v0.h[5] // .....................................................................e'................................................................................ + // mul v24.8h, v11.8h, v0.h[4] // ....................................................................e.'................................................................................ + // mls v24.8h, v27.8h, v7.h[0] // ......................................................................'....*........................................................................... + // sub v11.8h, v10.8h, v24.8h // ......................................................................'.........*...................................................................... + // add v10.8h, v10.8h, v24.8h // ......................................................................'..........*..................................................................... + // trn1 v25.4s, v8.4s, v9.4s // ......................~...............................................'......................................*......................................... + // trn2 v26.4s, v8.4s, v9.4s // ......................................................................'...............*................................................................ + // trn1 v27.4s, v10.4s, v11.4s // ......................................................................'..............*................................................................. + // trn2 v28.4s, v10.4s, v11.4s // ......................................................................'.............*.................................................................. + // trn2 v10.2d, v25.2d, v27.2d // .........................~............................................'.........................................*...................................... + // trn2 v11.2d, v26.2d, v28.2d // ..~...................................................................'..................*............................................................. + // trn1 v8.2d, v25.2d, v27.2d // ..........................~...........................................'..........................................*..................................... + // trn1 v9.2d, v26.2d, v28.2d // .......~..............................................................'.......................*........................................................ + // ldr q0, [x4], #(6*16) // ......................................................................'.....*.......................................................................... + // ldr q4, [x4, #(-6*16 + 1*16)] // ......................................................................*................................................................................ + // ldr q1, [x4, #(-6*16 + 2*16)] // ...........~..........................................................'...........................*.................................................... + // ldr q5, [x4, #(-6*16 + 3*16)] // ............................................................e.........'............................................................................~... + // ldr q2, [x4, #(-6*16 + 4*16)] // ......................................................e...............'......................................................................~......... + // ldr q6, [x4, #(-6*16 + 5*16)] // ...................e..................................................'...................................~............................................ + // sqrdmulh v27.8h, v10.8h, v4.8h // ...........................~..........................................'...........................................*.................................... + // mul v24.8h, v10.8h, v0.8h // ............................~.........................................'............................................*................................... + // mls v24.8h, v27.8h, v7.h[0] // ................................~.....................................'................................................*............................... + // sub v10.8h, v8.8h, v24.8h // .....................................~................................'.....................................................*.......................... + // add v8.8h, v8.8h, v24.8h // ....................................~.................................'....................................................*........................... + // sqrdmulh v27.8h, v11.8h, v4.8h // .....~................................................................'.....................*.......................................................... + // mul v24.8h, v11.8h, v0.8h // ......~...............................................................'......................*......................................................... + // mls v24.8h, v27.8h, v7.h[0] // ..........~...........................................................'..........................*..................................................... + // sub v11.8h, v9.8h, v24.8h // ..............~.......................................................'..............................*................................................. + // add v9.8h, v9.8h, v24.8h // ...............~......................................................'...............................*................................................ + // sqrdmulh v27.8h, v9.8h, v5.8h // .....................~................................................'.....................................*.......................................... + // mul v24.8h, v9.8h, v1.8h // ..............................~.......................................'..............................................*................................. + // mls v24.8h, v27.8h, v7.h[0] // ..................................~...................................'..................................................*............................. + // sub v9.8h, v8.8h, v24.8h // .........................................~............................'.........................................................*...................... + // add v8.8h, v8.8h, v24.8h // .......................................~..............................'.......................................................*........................ + // sqrdmulh v27.8h, v11.8h, v6.8h // ..................~...................................................'..................................*............................................. + // mul v24.8h, v11.8h, v2.8h // .............................~........................................'.............................................*.................................. + // mls v24.8h, v27.8h, v7.h[0] // .................................~....................................'.................................................*.............................. + // sub v11.8h, v10.8h, v24.8h // ........................................~.............................'........................................................*....................... + // add v10.8h, v10.8h, v24.8h // .................................................~....................'.................................................................*.............. + // sqdmulh v25.8h, v8.8h, v7.h[1] // ..........................................~...........................'..........................................................*..................... + // srshr v25.8h, v25.8h, #11 // ..............................................~.......................'..............................................................*................. + // mls v8.8h, v25.8h, v7.h[0] // ..........................................................~...........'..........................................................................*..... + // sqdmulh v25.8h, v9.8h, v7.h[1] // ............................................~.........................'............................................................*................... + // srshr v25.8h, v25.8h, #11 // ................................................~.....................'................................................................*............... + // mls v9.8h, v25.8h, v7.h[0] // ...................................................~..................'...................................................................*............ + // sqdmulh v25.8h, v10.8h, v7.h[1] // ....................................................~.................'....................................................................*........... + // srshr v25.8h, v25.8h, #11 // ........................................................~.............'........................................................................*....... + // mls v10.8h, v25.8h, v7.h[0] // ...........................................................~..........'...........................................................................*.... + // sqdmulh v25.8h, v11.8h, v7.h[1] // ...........................................~..........................'...........................................................*.................... + // srshr v25.8h, v25.8h, #11 // ...............................................~......................'...............................................................*................ + // mls v11.8h, v25.8h, v7.h[0] // ..................................................~...................'..................................................................*............. + // st4 {v8.4S, v9.4S, v10.4S, v11.4S}, [x1], #64 // ...............................................................~......'...............................................................................* - pop_stack - ret \ No newline at end of file + sub count, count, #1 + cbnz count, layer4567_start + // Instructions: 54 + // Expected cycles: 60 + // Expected IPC: 0.90 + // + // Cycle bound: 60.0 + // IPC bound: 0.90 + // + // Wall time: 5.15s + // User time: 5.15s + // + // -------------------- cycle (expected) ---------------------> + // 0 25 50 + // |------------------------|------------------------|--------- + mul v17.8H, v14.8H, v6.H[2] // *........................................................... + sqrdmulh v1.8H, v14.8H, v6.H[3] // .*.......................................................... + mls v26.8H, v15.8H, v7.H[0] // ..*......................................................... + sub v12.8H, v31.8H, v21.8H // ...*........................................................ + add v9.8H, v31.8H, v21.8H // ....*....................................................... + mls v17.8H, v1.8H, v7.H[0] // .....*...................................................... + add v3.8H, v12.8H, v26.8H // ......*..................................................... + ldr q8, [x4, #16] // .......*.................................................... + sub v12.8H, v12.8H, v26.8H // .........*.................................................. + add v1.8H, v9.8H, v17.8H // ..........*................................................. + sub v9.8H, v9.8H, v17.8H // ...........*................................................ + trn2 v17.4S, v3.4S, v12.4S // ............*............................................... + trn1 v31.4S, v3.4S, v12.4S // .............*.............................................. + trn2 v12.4S, v1.4S, v9.4S // ..............*............................................. + ldr q23, [x4], #(6*16) // ...............*............................................ + trn2 v3.2D, v12.2D, v17.2D // .................*.......................................... + trn1 v1.4S, v1.4S, v9.4S // ..................*......................................... + mul v16.8H, v3.8H, v23.8H // ...................*........................................ + sqrdmulh v9.8H, v3.8H, v8.8H // ....................*....................................... + trn2 v3.2D, v1.2D, v31.2D // .....................*...................................... + trn1 v17.2D, v12.2D, v17.2D // ......................*..................................... + mul v12.8H, v3.8H, v23.8H // .......................*.................................... + mls v16.8H, v9.8H, v7.H[0] // ........................*................................... + sqrdmulh v3.8H, v3.8H, v8.8H // .........................*.................................. + ldr q9, [x4, #-64] // ..........................*................................. + sub v23.8H, v17.8H, v16.8H // ............................*............................... + mls v12.8H, v3.8H, v7.H[0] // .............................*.............................. + add v16.8H, v17.8H, v16.8H // ..............................*............................. + sqrdmulh v3.8H, v23.8H, v10.8H // ...............................*............................ + mul v17.8H, v23.8H, v11.8H // ................................*........................... + mul v9.8H, v16.8H, v9.8H // .................................*.......................... + sqrdmulh v16.8H, v16.8H, v18.8H // ..................................*......................... + trn1 v1.2D, v1.2D, v31.2D // ...................................*........................ + mls v17.8H, v3.8H, v7.H[0] // ....................................*....................... + sub v3.8H, v1.8H, v12.8H // .....................................*...................... + mls v9.8H, v16.8H, v7.H[0] // ......................................*..................... + add v12.8H, v1.8H, v12.8H // .......................................*.................... + sub v26.8H, v3.8H, v17.8H // ........................................*................... + add v25.8H, v3.8H, v17.8H // .........................................*.................. + add v23.8H, v12.8H, v9.8H // ..........................................*................. + sub v24.8H, v12.8H, v9.8H // ...........................................*................ + sqdmulh v3.8H, v25.8H, v7.H[1] // ............................................*............... + sqdmulh v17.8H, v23.8H, v7.H[1] // .............................................*.............. + sqdmulh v12.8H, v24.8H, v7.H[1] // ..............................................*............. + sqdmulh v9.8H, v26.8H, v7.H[1] // ...............................................*............ + srshr v3.8H, v3.8H, #11 // ................................................*........... + srshr v17.8H, v17.8H, #11 // .................................................*.......... + srshr v12.8H, v12.8H, #11 // ..................................................*......... + mls v25.8H, v3.8H, v7.H[0] // ...................................................*........ + srshr v9.8H, v9.8H, #11 // ....................................................*....... + mls v23.8H, v17.8H, v7.H[0] // .....................................................*...... + mls v24.8H, v12.8H, v7.H[0] // ......................................................*..... + mls v26.8H, v9.8H, v7.H[0] // .......................................................*.... + st4 {v23.4S, v24.4S, v25.4S, v26.4S}, [x1], #64 // ...........................................................* + + // -------------------- cycle (expected) ---------------------> + // 0 25 50 + // |------------------------|------------------------|--------- + // ldr q4, [x4, #16] // .......*.................................................... + // sqrdmulh v19.8H, v14.8H, v6.H[3] // .*.......................................................... + // mul v29.8H, v14.8H, v6.H[2] // *........................................................... + // sub v3.8H, v31.8H, v21.8H // ...*........................................................ + // mls v26.8H, v15.8H, v7.H[0] // ..*......................................................... + // ldr q2, [x4], #(6*16) // ...............*............................................ + // mls v29.8H, v19.8H, v7.H[0] // .....*...................................................... + // add v15.8H, v31.8H, v21.8H // ....*....................................................... + // sub v5.8H, v3.8H, v26.8H // .........*.................................................. + // add v25.8H, v3.8H, v26.8H // ......*..................................................... + // add v26.8H, v15.8H, v29.8H // ..........*................................................. + // sub v27.8H, v15.8H, v29.8H // ...........*................................................ + // trn2 v20.4S, v25.4S, v5.4S // ............*............................................... + // trn1 v14.4S, v25.4S, v5.4S // .............*.............................................. + // trn2 v16.4S, v26.4S, v27.4S // ..............*............................................. + // trn2 v17.2D, v16.2D, v20.2D // .................*.......................................... + // sqrdmulh v12.8H, v17.8H, v4.8H // ....................*....................................... + // mul v28.8H, v17.8H, v2.8H // ...................*........................................ + // trn1 v9.2D, v16.2D, v20.2D // ......................*..................................... + // mls v28.8H, v12.8H, v7.H[0] // ........................*................................... + // ldr q5, [x4, #-64] // ..........................*................................. + // sub v12.8H, v9.8H, v28.8H // ............................*............................... + // add v9.8H, v9.8H, v28.8H // ..............................*............................. + // sqrdmulh v3.8H, v12.8H, v10.8H // ...............................*............................ + // sqrdmulh v25.8H, v9.8H, v18.8H // ..................................*......................... + // trn1 v30.4S, v26.4S, v27.4S // ..................*......................................... + // trn2 v17.2D, v30.2D, v14.2D // .....................*...................................... + // trn1 v16.2D, v30.2D, v14.2D // ...................................*........................ + // sqrdmulh v18.8H, v17.8H, v4.8H // .........................*.................................. + // mul v21.8H, v17.8H, v2.8H // .......................*.................................... + // mul v29.8H, v12.8H, v11.8H // ................................*........................... + // mul v28.8H, v9.8H, v5.8H // .................................*.......................... + // mls v21.8H, v18.8H, v7.H[0] // .............................*.............................. + // mls v29.8H, v3.8H, v7.H[0] // ....................................*....................... + // mls v28.8H, v25.8H, v7.H[0] // ......................................*..................... + // add v30.8H, v16.8H, v21.8H // .......................................*.................... + // sub v15.8H, v16.8H, v21.8H // .....................................*...................... + // add v24.8H, v30.8H, v28.8H // ..........................................*................. + // sub v27.8H, v15.8H, v29.8H // ........................................*................... + // sub v25.8H, v30.8H, v28.8H // ...........................................*................ + // sqdmulh v16.8H, v24.8H, v7.H[1] // .............................................*.............. + // sqdmulh v12.8H, v27.8H, v7.H[1] // ...............................................*............ + // sqdmulh v0.8H, v25.8H, v7.H[1] // ..............................................*............. + // srshr v9.8H, v16.8H, #11 // .................................................*.......... + // srshr v30.8H, v12.8H, #11 // ....................................................*....... + // srshr v1.8H, v0.8H, #11 // ..................................................*......... + // add v26.8H, v15.8H, v29.8H // .........................................*.................. + // mls v27.8H, v30.8H, v7.H[0] // .......................................................*.... + // mls v25.8H, v1.8H, v7.H[0] // ......................................................*..... + // sqdmulh v14.8H, v26.8H, v7.H[1] // ............................................*............... + // srshr v8.8H, v14.8H, #11 // ................................................*........... + // mls v24.8H, v9.8H, v7.H[0] // .....................................................*...... + // mls v26.8H, v8.8H, v7.H[0] // ...................................................*........ + // st4 {v24.4S, v25.4S, v26.4S, v27.4S}, [x1], #64 // ...........................................................* + + + pop_stack + ret \ No newline at end of file