From 4643e2555dc843ac3756e7abf34308acd6c6928c Mon Sep 17 00:00:00 2001 From: Hanno Becker Date: Sun, 29 Sep 2024 05:56:19 +0100 Subject: [PATCH] [TEST]: N1 opt --- mlkem/asm/aarch64/intt_opt.S | 1526 ++++++++--------- mlkem/asm/aarch64/ntt_opt.S | 1358 +++++++-------- mlkem/asm/aarch64/poly_opt.S | 578 +++---- mlkem/asm/aarch64/polyvec_opt.S | 2852 +++++++++++++++---------------- 4 files changed, 3157 insertions(+), 3157 deletions(-) diff --git a/mlkem/asm/aarch64/intt_opt.S b/mlkem/asm/aarch64/intt_opt.S index 2dba657cf..4ec0ca0b2 100644 --- a/mlkem/asm/aarch64/intt_opt.S +++ b/mlkem/asm/aarch64/intt_opt.S @@ -230,395 +230,395 @@ _intt_asm_opt: mov count, #8 .p2align 2 - // Instructions: 11 - // Expected cycles: 20 - // Expected IPC: 0.55 - // - // Cycle bound: 20.0 - // IPC bound: 0.55 - // - // Wall time: 0.01s - // User time: 0.01s - // - // ----- cycle (expected) ------> - // 0 25 - // |------------------------|---- - ldr q2, [x1, #0] // *............................. - ldr q22, [x1, #16] // ..*........................... - ldr q23, [x1, #32] // ....*......................... - ldr q17, [x1, #48] // ......*....................... - ldr q24, [x4], #(6*16) // ........*..................... - trn1 v30.4S, v23.4S, v17.4S // ..........*................... - ldr q6, [x4, #-80] // ...........*.................. - ldr q1, [x4, #-64] // .............*................ - ldr q9, [x4, #-48] // ...............*.............. - ldr q5, [x4, #-32] // .................*............ - ldr q3, [x4, #-16] // ...................*.......... + // Instructions: 57 + // Expected cycles: 54 + // Expected IPC: 1.06 + // + // Cycle bound: 54.0 + // IPC bound: 1.06 + // + // Wall time: 2.05s + // User time: 2.05s + // + // ----------------- cycle (expected) ------------------> + // 0 25 50 + // |------------------------|------------------------|--- + ldr q5, [x1, #32] // *..................................................... + ldr q22, [x1, #48] // *..................................................... + ldr q0, [x1, #16] // .*.................................................... + ldr q15, [x1, #0] // .*.................................................... + ldr q25, [x4, #16] // ..*................................................... + ldr q9, [x4, #80] // ..*................................................... + ldr q21, [x4, #64] // ...*.................................................. + ldr q23, [x4, #32] // ...*.................................................. + trn2 v31.4S, v5.4S, v22.4S // ....*................................................. + trn1 v27.4S, v5.4S, v22.4S // ....*................................................. + trn2 v19.4S, v15.4S, v0.4S // .....*................................................ + trn1 v15.4S, v15.4S, v0.4S // .....*................................................ + ldr q28, [x4, #48] // ......*............................................... + ldr q29, [x4], #(6*16) // ......*............................................... + trn2 v10.2D, v19.2D, v31.2D // .......*.............................................. + trn2 v20.2D, v15.2D, v27.2D // .......*.............................................. + trn1 v11.2D, v19.2D, v31.2D // ........*............................................. + trn1 v3.2D, v15.2D, v27.2D // ........*............................................. + add v22.8H, v20.8H, v10.8H // .........*............................................ + sub v1.8H, v20.8H, v10.8H // .........*............................................ + sub v5.8H, v3.8H, v11.8H // ..........*........................................... + add v16.8H, v3.8H, v11.8H // ..........*........................................... + sqrdmulh v31.8H, v1.8H, v9.8H // ...........*.......................................... + ldr q13, [x3], #16 // ...........*.......................................... + sub v4.8H, v16.8H, v22.8H // ............*......................................... + add v27.8H, v16.8H, v22.8H // .............*........................................ + sqrdmulh v18.8H, v5.8H, v28.8H // .............*........................................ + mul v24.8H, v1.8H, v21.8H // ...............*...................................... + mls v24.8H, v31.8H, v7.H[0] // .................*.................................... + mul v30.8H, v5.8H, v23.8H // ...................*.................................. + mls v30.8H, v18.8H, v7.H[0] // .....................*................................ + mul v26.8H, v4.8H, v29.8H // .......................*.............................. + sqrdmulh v11.8H, v4.8H, v25.8H // .........................*............................ + sub v6.8H, v30.8H, v24.8H // ..........................*........................... + add v20.8H, v30.8H, v24.8H // ...........................*.......................... + sqrdmulh v9.8H, v6.8H, v25.8H // ............................*......................... + trn1 v17.4S, v27.4S, v20.4S // .............................*........................ + trn2 v3.4S, v27.4S, v20.4S // ..............................*....................... + mls v26.8H, v11.8H, v7.H[0] // ..............................*....................... + mul v15.8H, v6.8H, v29.8H // ................................*..................... + mls v15.8H, v9.8H, v7.H[0] // ..................................*................... + trn2 v5.4S, v26.4S, v15.4S // .......................................*.............. + trn1 v30.4S, v26.4S, v15.4S // .......................................*.............. + trn1 v0.2D, v3.2D, v5.2D // .........................................*............ + trn1 v19.2D, v17.2D, v30.2D // .........................................*............ + trn2 v22.2D, v3.2D, v5.2D // ..........................................*........... + trn2 v27.2D, v17.2D, v30.2D // ..........................................*........... + sub v24.8H, v19.8H, v0.8H // ...........................................*.......... + add v12.8H, v27.8H, v22.8H // ............................................*......... + add v6.8H, v19.8H, v0.8H // .............................................*........ + mul v15.8H, v24.8H, v13.H[2] // .............................................*........ + sub v10.8H, v27.8H, v22.8H // ..............................................*....... + sqdmulh v4.8H, v6.8H, v7.H[1] // ...............................................*...... + sqrdmulh v3.8H, v24.8H, v13.H[3] // .................................................*.... + sqrdmulh v5.8H, v10.8H, v13.H[5] // ...................................................*.. + srshr v31.8H, v4.8H, #11 // .....................................................* + sqdmulh v26.8H, v12.8H, v7.H[1] // .....................................................* - // ------ cycle (expected) ------> - // 0 25 - // |------------------------|----- - // ldr q2, [x1, #0] // *.............................. - // ldr q22, [x1, #16] // ..*............................ - // ldr q23, [x1, #32] // ....*.......................... - // ldr q17, [x1, #48] // ......*........................ - // trn1 v30.4S, v23.4S, v17.4S // ..........*.................... - // ldr q24, [x4], #(6*16) // ........*...................... - // ldr q6, [x4, #-80] // ...........*................... - // ldr q1, [x4, #-64] // .............*................. - // ldr q9, [x4, #-48] // ...............*............... - // ldr q5, [x4, #-32] // .................*............. - // ldr q3, [x4, #-16] // ...................*........... + // ----------------- cycle (expected) ------------------> + // 0 25 50 + // |------------------------|------------------------|--- + // ldr q20, [x1, #0] // .*.................................................... + // ldr q4, [x1, #16] // .*.................................................... + // ldr q17, [x4], #(6*16) // ......*............................................... + // ldr q29, [x1, #32] // *..................................................... + // ldr q8, [x1, #48] // *..................................................... + // ldr q24, [x4, #-80] // ..*................................................... + // trn2 v10.4S, v20.4S, v4.4S // .....*................................................ + // ldr q27, [x4, #-48] // ......*............................................... + // trn1 v20.4S, v20.4S, v4.4S // .....*................................................ + // trn2 v25.4S, v29.4S, v8.4S // ....*................................................. + // ldr q22, [x4, #-16] // ..*................................................... + // trn1 v5.4S, v29.4S, v8.4S // ....*................................................. + // ldr q31, [x4, #-32] // ...*.................................................. + // trn2 v0.2D, v10.2D, v25.2D // .......*.............................................. + // trn2 v18.2D, v20.2D, v5.2D // .......*.............................................. + // trn1 v14.2D, v10.2D, v25.2D // ........*............................................. + // ldr q3, [x4, #-64] // ...*.................................................. + // sub v2.8H, v18.8H, v0.8H // .........*............................................ + // trn1 v5.2D, v20.2D, v5.2D // ........*............................................. + // mul v11.8H, v2.8H, v31.8H // ...............*...................................... + // add v16.8H, v18.8H, v0.8H // .........*............................................ + // add v8.8H, v5.8H, v14.8H // ..........*........................................... + // sub v18.8H, v5.8H, v14.8H // ..........*........................................... + // sqrdmulh v5.8H, v2.8H, v22.8H // ...........*.......................................... + // add v1.8H, v8.8H, v16.8H // .............*........................................ + // sqrdmulh v0.8H, v18.8H, v27.8H // .............*........................................ + // sub v25.8H, v8.8H, v16.8H // ............*......................................... + // mul v18.8H, v18.8H, v3.8H // ...................*.................................. + // mls v11.8H, v5.8H, v7.H[0] // .................*.................................... + // mls v18.8H, v0.8H, v7.H[0] // .....................*................................ + // sqrdmulh v20.8H, v25.8H, v24.8H // .........................*............................ + // mul v5.8H, v25.8H, v17.8H // .......................*.............................. + // sub v9.8H, v18.8H, v11.8H // ..........................*........................... + // sqrdmulh v3.8H, v9.8H, v24.8H // ............................*......................... + // mul v31.8H, v9.8H, v17.8H // ................................*..................... + // add v8.8H, v18.8H, v11.8H // ...........................*.......................... + // mls v5.8H, v20.8H, v7.H[0] // ..............................*....................... + // trn1 v30.4S, v1.4S, v8.4S // .............................*........................ + // mls v31.8H, v3.8H, v7.H[0] // ..................................*................... + // trn2 v6.4S, v1.4S, v8.4S // ..............................*....................... + // trn2 v3.4S, v5.4S, v31.4S // .......................................*.............. + // trn1 v10.4S, v5.4S, v31.4S // .......................................*.............. + // trn2 v27.2D, v6.2D, v3.2D // ..........................................*........... + // trn2 v2.2D, v30.2D, v10.2D // ..........................................*........... + // trn1 v8.2D, v30.2D, v10.2D // .........................................*............ + // add v12.8H, v2.8H, v27.8H // ............................................*......... + // sqdmulh v26.8H, v12.8H, v7.H[1] // .....................................................* + // trn1 v14.2D, v6.2D, v3.2D // .........................................*............ + // sub v30.8H, v8.8H, v14.8H // ...........................................*.......... + // add v6.8H, v8.8H, v14.8H // .............................................*........ + // ldr q13, [x3], #16 // ...........*.......................................... + // sqdmulh v21.8H, v6.8H, v7.H[1] // ...............................................*...... + // sub v10.8H, v2.8H, v27.8H // ..............................................*....... + // sqrdmulh v3.8H, v30.8H, v13.H[3] // .................................................*.... + // mul v15.8H, v30.8H, v13.H[2] // .............................................*........ + // srshr v31.8H, v21.8H, #11 // .....................................................* + // sqrdmulh v5.8H, v10.8H, v13.H[5] // ...................................................*.. sub count, count, #1 layer4567_start: - // Instructions: 83 - // Expected cycles: 94 - // Expected IPC: 0.88 - // - // Cycle bound: 94.0 - // IPC bound: 0.88 - // - // Wall time: 3.39s - // User time: 3.39s - // - // ------------------------------------- cycle (expected) --------------------------------------> - // 0 25 50 75 - // |------------------------|------------------------|------------------------|------------------ - trn1 v26.4S, v2.4S, v22.4S // *............................................................................................. - trn2 v2.4S, v2.4S, v22.4S // .*............................................................................................ - trn2 v22.4S, v23.4S, v17.4S // ..*........................................................................................... - trn2 v10.2D, v26.2D, v30.2D // ...*.......................................................................................... - trn1 v26.2D, v26.2D, v30.2D // ....*......................................................................................... - trn2 v17.2D, v2.2D, v22.2D // .....*........................................................................................ - trn1 v2.2D, v2.2D, v22.2D // ......*....................................................................................... - sub v22.8H, v10.8H, v17.8H // .......*...................................................................................... - add v10.8H, v10.8H, v17.8H // ........*..................................................................................... - sub v17.8H, v26.8H, v2.8H // .........*.................................................................................... - add v26.8H, v26.8H, v2.8H // ..........*................................................................................... - sqrdmulh v2.8H, v22.8H, v3.8H // ...........*.................................................................................. - sqrdmulh v30.8H, v17.8H, v9.8H // ............*................................................................................. - mul v17.8H, v17.8H, v1.8H // .............*................................................................................ - mul v22.8H, v22.8H, v5.8H // ..............*............................................................................... - sub v1.8H, v26.8H, v10.8H // ...............*.............................................................................. - add v26.8H, v26.8H, v10.8H // ................*............................................................................. - mls v17.8H, v30.8H, v7.H[0] // .................*............................................................................ - mls v22.8H, v2.8H, v7.H[0] // ..................*........................................................................... - sqrdmulh v2.8H, v1.8H, v6.8H // ...................*.......................................................................... - mul v10.8H, v1.8H, v24.8H // ....................*......................................................................... - ldr q1, [x3], #16 // .....................*........................................................................ - sub v30.8H, v17.8H, v22.8H // .......................*...................................................................... - mls v10.8H, v2.8H, v7.H[0] // ........................*..................................................................... - add v2.8H, v17.8H, v22.8H // .........................*.................................................................... - sqrdmulh v22.8H, v30.8H, v6.8H // ..........................*................................................................... - mul v17.8H, v30.8H, v24.8H // ...........................*.................................................................. - trn1 v30.4S, v26.4S, v2.4S // ............................*................................................................. - trn2 v26.4S, v26.4S, v2.4S // .............................*................................................................ - ldr q2, [x1, #64] // ..............................e............................................................... - mls v17.8H, v22.8H, v7.H[0] // ................................*............................................................. - ldr q22, [x1, #80] // .................................e............................................................ - ldr q23, [x1, #96] // ...................................e.......................................................... - trn1 v24.4S, v10.4S, v17.4S // .....................................*........................................................ - trn2 v10.4S, v10.4S, v17.4S // ......................................*....................................................... - ldr q17, [x1, #112] // .......................................e...................................................... - trn2 v6.2D, v30.2D, v24.2D // .........................................*.................................................... - trn2 v9.2D, v26.2D, v10.2D // ..........................................*................................................... - trn1 v30.2D, v30.2D, v24.2D // ...........................................*.................................................. - trn1 v26.2D, v26.2D, v10.2D // ............................................*................................................. - sub v10.8H, v6.8H, v9.8H // .............................................*................................................ - sub v24.8H, v30.8H, v26.8H // ..............................................*............................................... - add v26.8H, v30.8H, v26.8H // ...............................................*.............................................. - sqrdmulh v30.8H, v10.8H, v1.H[5] // ................................................*............................................. - sqrdmulh v5.8H, v24.8H, v1.H[3] // .................................................*............................................ - mul v24.8H, v24.8H, v1.H[2] // ..................................................*........................................... - mul v10.8H, v10.8H, v1.H[4] // ...................................................*.......................................... - add v6.8H, v6.8H, v9.8H // ....................................................*......................................... - sqdmulh v9.8H, v26.8H, v7.H[1] // .....................................................*........................................ - mls v24.8H, v5.8H, v7.H[0] // ......................................................*....................................... - mls v10.8H, v30.8H, v7.H[0] // .......................................................*...................................... - sqdmulh v30.8H, v6.8H, v7.H[1] // ........................................................*..................................... - srshr v9.8H, v9.8H, #11 // .........................................................*.................................... - sqdmulh v5.8H, v24.8H, v7.H[1] // ..........................................................*................................... - sqdmulh v3.8H, v10.8H, v7.H[1] // ...........................................................*.................................. - mls v26.8H, v9.8H, v7.H[0] // ............................................................*................................. - srshr v30.8H, v30.8H, #11 // .............................................................*................................ - srshr v9.8H, v5.8H, #11 // ..............................................................*............................... - srshr v5.8H, v3.8H, #11 // ...............................................................*.............................. - mls v6.8H, v30.8H, v7.H[0] // ................................................................*............................. - mls v24.8H, v9.8H, v7.H[0] // .................................................................*............................ - mls v10.8H, v5.8H, v7.H[0] // ..................................................................*........................... - trn1 v30.4S, v23.4S, v17.4S // ...................................................................e.......................... - sub v9.8H, v26.8H, v6.8H // ....................................................................*......................... - add v26.8H, v26.8H, v6.8H // .....................................................................*........................ - sub v6.8H, v24.8H, v10.8H // ......................................................................*....................... - sqrdmulh v5.8H, v9.8H, v1.H[1] // .......................................................................*...................... - mul v9.8H, v9.8H, v1.H[0] // ........................................................................*..................... - sqrdmulh v3.8H, v6.8H, v1.H[1] // .........................................................................*.................... - mul v1.8H, v6.8H, v1.H[0] // ..........................................................................*................... - add v10.8H, v24.8H, v10.8H // ...........................................................................*.................. - mls v9.8H, v5.8H, v7.H[0] // ............................................................................*................. - str q26, [x1], #(64) // .............................................................................*................ - mls v1.8H, v3.8H, v7.H[0] // ..............................................................................*............... - str q10, [x1, #-48] // ...............................................................................*.............. - ldr q24, [x4], #(6*16) // ................................................................................e............. - str q9, [x1, #-32] // ..................................................................................*........... - ldr q6, [x4, #-80] // ...................................................................................e.......... - str q1, [x1, #-16] // .....................................................................................*........ - ldr q1, [x4, #-64] // ......................................................................................e....... - ldr q9, [x4, #-48] // ........................................................................................e..... - ldr q5, [x4, #-32] // ..........................................................................................e... - ldr q3, [x4, #-16] // ............................................................................................e. + // Instructions: 83 + // Expected cycles: 64 + // Expected IPC: 1.30 + // + // Cycle bound: 64.0 + // IPC bound: 1.30 + // + // Wall time: 62.44s + // User time: 62.44s + // + // ---------------------- cycle (expected) -----------------------> + // 0 25 50 + // |------------------------|------------------------|------------- + ldr q20, [x1, #64] // e............................................................... + ldr q4, [x1, #80] // e............................................................... + mul v23.8H, v10.8H, v13.H[4] // .*.............................................................. + ldr q17, [x4], #(6*16) // .e.............................................................. + ldr q29, [x1, #96] // ..e............................................................. + ldr q8, [x1, #112] // ..e............................................................. + ldr q24, [x4, #-80] // ...e............................................................ + mls v15.8H, v3.8H, v7.H[0] // ...*............................................................ + trn2 v10.4S, v20.4S, v4.4S // ....e........................................................... + ldr q27, [x4, #-48] // ....e........................................................... + trn1 v20.4S, v20.4S, v4.4S // .....e.......................................................... + mls v23.8H, v5.8H, v7.H[0] // .....*.......................................................... + trn2 v25.4S, v29.4S, v8.4S // ......e......................................................... + ldr q22, [x4, #-16] // ......e......................................................... + mls v6.8H, v31.8H, v7.H[0] // .......*........................................................ + trn1 v5.4S, v29.4S, v8.4S // .......e........................................................ + ldr q31, [x4, #-32] // ........e....................................................... + trn2 v0.2D, v10.2D, v25.2D // ........e....................................................... + trn2 v18.2D, v20.2D, v5.2D // .........e...................................................... + sqdmulh v28.8H, v15.8H, v7.H[1] // .........*...................................................... + trn1 v14.2D, v10.2D, v25.2D // ..........e..................................................... + ldr q3, [x4, #-64] // ..........e..................................................... + sub v2.8H, v18.8H, v0.8H // ...........e.................................................... + sqdmulh v10.8H, v23.8H, v7.H[1] // ...........*.................................................... + trn1 v5.2D, v20.2D, v5.2D // ............e................................................... + mul v11.8H, v2.8H, v31.8H // .............e.................................................. + add v16.8H, v18.8H, v0.8H // .............e.................................................. + add v8.8H, v5.8H, v14.8H // ..............e................................................. + sub v18.8H, v5.8H, v14.8H // ...............e................................................ + sqrdmulh v5.8H, v2.8H, v22.8H // ...............e................................................ + add v1.8H, v8.8H, v16.8H // ................e............................................... + sqrdmulh v0.8H, v18.8H, v27.8H // .................e.............................................. + sub v25.8H, v8.8H, v16.8H // .................e.............................................. + srshr v8.8H, v26.8H, #11 // ..................*............................................. + mul v18.8H, v18.8H, v3.8H // ...................e............................................ + srshr v10.8H, v10.8H, #11 // ...................*............................................ + mls v11.8H, v5.8H, v7.H[0] // .....................e.......................................... + mls v18.8H, v0.8H, v7.H[0] // .......................e........................................ + sqrdmulh v20.8H, v25.8H, v24.8H // .........................e...................................... + mul v5.8H, v25.8H, v17.8H // ...........................e.................................... + mls v12.8H, v8.8H, v7.H[0] // .............................*.................................. + sub v9.8H, v18.8H, v11.8H // .............................e.................................. + sqrdmulh v3.8H, v9.8H, v24.8H // ...............................e................................ + mul v31.8H, v9.8H, v17.8H // .................................e.............................. + add v8.8H, v18.8H, v11.8H // .................................e.............................. + sub v16.8H, v6.8H, v12.8H // ..................................*............................. + add v21.8H, v6.8H, v12.8H // ...................................*............................ + mls v5.8H, v20.8H, v7.H[0] // ...................................e............................ + trn1 v30.4S, v1.4S, v8.4S // ....................................e........................... + mls v31.8H, v3.8H, v7.H[0] // .....................................e.......................... + str q21, [x1], #(64) // .....................................*.......................... + trn2 v6.4S, v1.4S, v8.4S // ......................................e......................... + mls v23.8H, v10.8H, v7.H[0] // .......................................*........................ + srshr v10.8H, v28.8H, #11 // .......................................*........................ + sqrdmulh v12.8H, v16.8H, v13.H[1] // .........................................*...................... + trn2 v3.4S, v5.4S, v31.4S // ..........................................e..................... + mls v15.8H, v10.8H, v7.H[0] // ...........................................*.................... + trn1 v10.4S, v5.4S, v31.4S // ...........................................e.................... + trn2 v27.2D, v6.2D, v3.2D // ............................................e................... + trn2 v2.2D, v30.2D, v10.2D // .............................................e.................. + mul v31.8H, v16.8H, v13.H[0] // .............................................*.................. + trn1 v8.2D, v30.2D, v10.2D // ..............................................e................. + mls v31.8H, v12.8H, v7.H[0] // ...............................................*................ + add v12.8H, v2.8H, v27.8H // ...............................................e................ + sub v21.8H, v15.8H, v23.8H // ................................................*............... + add v15.8H, v15.8H, v23.8H // .................................................*.............. + sqdmulh v26.8H, v12.8H, v7.H[1] // .................................................e.............. + trn1 v14.2D, v6.2D, v3.2D // ..................................................e............. + str q15, [x1, #-48] // ...................................................*............ + sqrdmulh v10.8H, v21.8H, v13.H[1] // ...................................................*............ + str q31, [x1, #-32] // ....................................................*........... + sub v30.8H, v8.8H, v14.8H // ....................................................e........... + add v6.8H, v8.8H, v14.8H // .....................................................e.......... + mul v4.8H, v21.8H, v13.H[0] // .....................................................*.......... + ldr q13, [x3], #16 // ......................................................e......... + sqdmulh v21.8H, v6.8H, v7.H[1] // .......................................................e........ + mls v4.8H, v10.8H, v7.H[0] // .........................................................*...... + sub v10.8H, v2.8H, v27.8H // .........................................................e...... + sqrdmulh v3.8H, v30.8H, v13.H[3] // ...........................................................e.... + mul v15.8H, v30.8H, v13.H[2] // .............................................................e.. + str q4, [x1, #-16] // ..............................................................*. + srshr v31.8H, v21.8H, #11 // ...............................................................e + sqrdmulh v5.8H, v10.8H, v13.H[5] // ...............................................................e - // ----------------------------------------------------------------- cycle (expected) ------------------------------------------------------------------> + // ------------------------------------------------------ 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......................................................'......................................~.............................................. - // trn1 v25.4s, v8.4s, v9.4s // ................................................................*..................................................................................... - // trn2 v26.4s, v8.4s, v9.4s // ................................................................'*.................................................................................... - // trn1 v27.4s, v10.4s, v11.4s // .....................................e..........................'..................................................................~.................. - // 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) // ..................................................e.............'...............................................................................~..... - // ldr q4, [x4, #(-6*16 + 1*16)] // .....................................................e..........'..................................................................................~.. - // ldr q1, [x4, #(-6*16 + 2*16)] // ........................................................e.......'..................................................................................... - // ldr q5, [x4, #(-6*16 + 3*16)] // ..........................................................e.....'..................................................................................... - // ldr q2, [x4, #(-6*16 + 4*16)] // ............................................................e...'..................................................................................... - // ldr q6, [x4, #(-6*16 + 5*16)] // ..............................................................e.'..................................................................................... - // sub v24.8h, v8.8h, v9.8h // ................................................................'........*............................................................................ - // add v8.8h, v8.8h, v9.8h // ................................................................'.........*........................................................................... - // sqrdmulh v27.8h, v24.8h, v5.8h // ................................................................'...........*......................................................................... - // mul v9.8h, v24.8h, v1.8h // ................................................................'............*........................................................................ - // mls v9.8h, v27.8h, v7.h[0] // ................................................................'................*.................................................................... - // sub v24.8h, v10.8h, v11.8h // ................................................................'......*.............................................................................. - // add v10.8h, v10.8h, v11.8h // ................................................................'.......*............................................................................. - // sqrdmulh v27.8h, v24.8h, v6.8h // ................................................................'..........*.......................................................................... - // mul v11.8h, v24.8h, v2.8h // ................................................................'.............*....................................................................... - // mls v11.8h, v27.8h, v7.h[0] // ................................................................'.................*................................................................... - // sub v24.8h, v8.8h, v10.8h // ................................................................'..............*...................................................................... - // add v8.8h, v8.8h, v10.8h // ................................................................'...............*..................................................................... - // sqrdmulh v27.8h, v24.8h, v4.8h // ................................................................'..................*.................................................................. - // mul v10.8h, v24.8h, v0.8h // ................................................................'...................*................................................................. - // mls v10.8h, v27.8h, v7.h[0] // ................................................................'.......................*............................................................. - // sub v24.8h, v9.8h, v11.8h // ................................................................'......................*.............................................................. - // add v9.8h, v9.8h, v11.8h // ................................................................'........................*............................................................ - // sqrdmulh v27.8h, v24.8h, v4.8h // ................................................................'.........................*........................................................... - // mul v11.8h, v24.8h, v0.8h // ................................................................'..........................*.......................................................... - // mls v11.8h, v27.8h, v7.h[0] // ..~.............................................................'...............................*..................................................... - // 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, [x3], #16 // ................................................................'....................*................................................................ - // sub v24.8h, v8.8h, v9.8h // ................~...............................................'.............................................*....................................... - // add v8.8h, v8.8h, v9.8h // .................~..............................................'..............................................*...................................... - // sqrdmulh v27.8h, v24.8h, v0.h[3] // ...................~............................................'................................................*.................................... - // mul v9.8h, v24.8h, v0.h[2] // ....................~...........................................'.................................................*................................... - // mls v9.8h, v27.8h, v7.h[0] // ........................~.......................................'.....................................................*............................... - // sub v24.8h, v10.8h, v11.8h // ...............~................................................'............................................*........................................ - // add v10.8h, v10.8h, v11.8h // ......................~.........................................'...................................................*................................. - // sqrdmulh v27.8h, v24.8h, v0.h[5] // ..................~.............................................'...............................................*..................................... - // mul v11.8h, v24.8h, v0.h[4] // .....................~..........................................'..................................................*.................................. - // mls v11.8h, v27.8h, v7.h[0] // .........................~......................................'......................................................*.............................. - // 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, v10.8h, v7.h[1] // ..........................~.....................................'.......................................................*............................. - // srshr v25.8h, v25.8h, #11 // ...............................~................................'............................................................*........................ - // mls v10.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, v11.8h, v7.h[1] // .............................~..................................'..........................................................*.......................... - // srshr v25.8h, v25.8h, #11 // .................................~..............................'..............................................................*...................... - // mls v11.8h, v25.8h, v7.h[0] // ....................................~...........................'.................................................................*................... - // sub v24.8h, v8.8h, v10.8h // ......................................~.........................'...................................................................*................. - // add v8.8h, v8.8h, v10.8h // .......................................~........................'....................................................................*................ - // sqrdmulh v27.8h, v24.8h, v0.h[1] // .........................................~......................'......................................................................*.............. - // mul v10.8h, v24.8h, v0.h[0] // ..........................................~.....................'.......................................................................*............. - // mls v10.8h, v27.8h, v7.h[0] // ..............................................~.................'...........................................................................*......... - // sub v24.8h, v9.8h, v11.8h // ........................................~.......................'.....................................................................*............... - // add v9.8h, v9.8h, v11.8h // .............................................~..................'..........................................................................*.......... - // sqrdmulh v27.8h, v24.8h, v0.h[1] // ...........................................~....................'........................................................................*............ - // mul v11.8h, v24.8h, v0.h[0] // ............................................~...................'.........................................................................*........... - // mls v11.8h, v27.8h, v7.h[0] // ................................................~...............'.............................................................................*....... - // str q8, [x1], #(64) // ...............................................~................'............................................................................*........ - // str q9, [x1, #(-64 + 16*1)] // .................................................~..............'..............................................................................*...... - // str q10, [x1, #(-64 + 16*2)] // ....................................................~...........'.................................................................................*... - // str q11, [x1, #(-64 + 16*3)] // .......................................................~........'....................................................................................* + // |------------------------|------------------------|------------------------|------------------------|------------------------|- + // ldr q8, [x1, #(16*0)] // e...............................................................~.............................................................. + // ldr q9, [x1, #(16*1)] // e...............................................................~.............................................................. + // ldr q10, [x1, #(16*2)] // ..e.............................................................'.~............................................................ + // ldr q11, [x1, #(16*3)] // ..e.............................................................'.~............................................................ + // trn1 v25.4s, v8.4s, v9.4s // .....e..........................................................'....~......................................................... + // trn2 v26.4s, v8.4s, v9.4s // ....e...........................................................'...~.......................................................... + // trn1 v27.4s, v10.4s, v11.4s // .......e........................................................'......~....................................................... + // trn2 v28.4s, v10.4s, v11.4s // ......e.........................................................'.....~........................................................ + // trn2 v10.2d, v25.2d, v27.2d // .........e......................................................'........~..................................................... + // trn2 v11.2d, v26.2d, v28.2d // ........e.......................................................'.......~...................................................... + // trn1 v8.2d, v25.2d, v27.2d // ............e...................................................'...........~.................................................. + // trn1 v9.2d, v26.2d, v28.2d // ..........e.....................................................'.........~.................................................... + // ldr q0, [x4], #(6*16) // .e..............................................................'~............................................................. + // ldr q4, [x4, #(-6*16 + 1*16)] // ...e............................................................'..~........................................................... + // ldr q1, [x4, #(-6*16 + 2*16)] // ..........e.....................................................'.........~.................................................... + // ldr q5, [x4, #(-6*16 + 3*16)] // ....e...........................................................'...~.......................................................... + // ldr q2, [x4, #(-6*16 + 4*16)] // ........e.......................................................'.......~...................................................... + // ldr q6, [x4, #(-6*16 + 5*16)] // ......e.........................................................'.....~........................................................ + // sub v24.8h, v8.8h, v9.8h // ...............e................................................'..............~............................................... + // add v8.8h, v8.8h, v9.8h // ..............e.................................................'.............~................................................ + // sqrdmulh v27.8h, v24.8h, v5.8h // .................e..............................................'................~............................................. + // mul v9.8h, v24.8h, v1.8h // ...................e............................................'..................~........................................... + // mls v9.8h, v27.8h, v7.h[0] // .......................e........................................'......................~....................................... + // sub v24.8h, v10.8h, v11.8h // ...........e....................................................'..........~................................................... + // add v10.8h, v10.8h, v11.8h // .............e..................................................'............~................................................. + // sqrdmulh v27.8h, v24.8h, v6.8h // ...............e................................................'..............~............................................... + // mul v11.8h, v24.8h, v2.8h // .............e..................................................'............~................................................. + // mls v11.8h, v27.8h, v7.h[0] // .....................e..........................................'....................~......................................... + // sub v24.8h, v8.8h, v10.8h // .................e..............................................'................~............................................. + // add v8.8h, v8.8h, v10.8h // ................e...............................................'...............~.............................................. + // sqrdmulh v27.8h, v24.8h, v4.8h // .........................e......................................'........................~..................................... + // mul v10.8h, v24.8h, v0.8h // ...........................e....................................'..........................~................................... + // mls v10.8h, v27.8h, v7.h[0] // ...................................e............................'..................................~........................... + // sub v24.8h, v9.8h, v11.8h // .............................e..................................'............................~................................. + // add v9.8h, v9.8h, v11.8h // .................................e..............................'................................~............................. + // sqrdmulh v27.8h, v24.8h, v4.8h // ...............................e................................'..............................~............................... + // mul v11.8h, v24.8h, v0.8h // .................................e..............................'................................~............................. + // mls v11.8h, v27.8h, v7.h[0] // .....................................e..........................'....................................~......................... + // trn1 v25.4s, v8.4s, v9.4s // ....................................e...........................'...................................~.......................... + // trn2 v26.4s, v8.4s, v9.4s // ......................................e.........................'.....................................~........................ + // trn1 v27.4s, v10.4s, v11.4s // ...........................................e....................'..........................................~................... + // trn2 v28.4s, v10.4s, v11.4s // ..........................................e.....................'.........................................~.................... + // trn2 v10.2d, v25.2d, v27.2d // .............................................e..................'............................................~................. + // trn2 v11.2d, v26.2d, v28.2d // ............................................e...................'...........................................~.................. + // trn1 v8.2d, v25.2d, v27.2d // ..............................................e.................'.............................................~................ + // trn1 v9.2d, v26.2d, v28.2d // ..................................................e.............'.................................................~............ + // ldr q0, [x3], #16 // ......................................................e.........'.....................................................~........ + // sub v24.8h, v8.8h, v9.8h // ....................................................e...........'...................................................~.......... + // add v8.8h, v8.8h, v9.8h // .....................................................e..........'....................................................~......... + // sqrdmulh v27.8h, v24.8h, v0.h[3] // ...........................................................e....'..........................................................~... + // mul v9.8h, v24.8h, v0.h[2] // .............................................................e..'............................................................~. + // mls v9.8h, v27.8h, v7.h[0] // ...~............................................................'..*........................................................... + // sub v24.8h, v10.8h, v11.8h // .........................................................e......'........................................................~..... + // add v10.8h, v10.8h, v11.8h // ...............................................e................'..............................................~............... + // sqrdmulh v27.8h, v24.8h, v0.h[5] // ...............................................................e'.............................................................. + // mul v11.8h, v24.8h, v0.h[4] // .~..............................................................'*............................................................. + // mls v11.8h, v27.8h, v7.h[0] // .....~..........................................................'....*......................................................... + // sqdmulh v25.8h, v8.8h, v7.h[1] // .......................................................e........'......................................................~....... + // srshr v25.8h, v25.8h, #11 // ...............................................................e'.............................................................. + // mls v8.8h, v25.8h, v7.h[0] // .......~........................................................'......*....................................................... + // sqdmulh v25.8h, v10.8h, v7.h[1] // .................................................e..............'................................................~............. + // srshr v25.8h, v25.8h, #11 // ..................~.............................................'.................*............................................ + // mls v10.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, v11.8h, v7.h[1] // ...........~....................................................'..........*................................................... + // srshr v25.8h, v25.8h, #11 // ...................~............................................'..................*........................................... + // mls v11.8h, v25.8h, v7.h[0] // .......................................~........................'......................................*....................... + // sub v24.8h, v8.8h, v10.8h // ..................................~.............................'.................................*............................ + // add v8.8h, v8.8h, v10.8h // ...................................~............................'..................................*........................... + // sqrdmulh v27.8h, v24.8h, v0.h[1] // .........................................~......................'........................................*..................... + // mul v10.8h, v24.8h, v0.h[0] // .............................................~..................'............................................*................. + // mls v10.8h, v27.8h, v7.h[0] // ...............................................~................'..............................................*............... + // sub v24.8h, v9.8h, v11.8h // ................................................~...............'...............................................*.............. + // add v9.8h, v9.8h, v11.8h // .................................................~..............'................................................*............. + // sqrdmulh v27.8h, v24.8h, v0.h[1] // ...................................................~............'..................................................*........... + // mul v11.8h, v24.8h, v0.h[0] // .....................................................~..........'....................................................*......... + // mls v11.8h, v27.8h, v7.h[0] // .........................................................~......'........................................................*..... + // str q8, [x1], #(64) // .....................................~..........................'....................................*......................... + // str q9, [x1, #(-64 + 16*1)] // ...................................................~............'..................................................*........... + // str q10, [x1, #(-64 + 16*2)] // ....................................................~...........'...................................................*.......... + // str q11, [x1, #(-64 + 16*3)] // ..............................................................~.'.............................................................* sub count, count, #1 cbnz count, layer4567_start - // Instructions: 72 - // Expected cycles: 79 - // Expected IPC: 0.91 - // - // Cycle bound: 79.0 - // IPC bound: 0.91 - // - // Wall time: 9.61s - // User time: 9.61s - // - // ------------------------------ cycle (expected) ------------------------------> - // 0 25 50 75 - // |------------------------|------------------------|------------------------|--- - trn1 v10.4S, v2.4S, v22.4S // *.............................................................................. - trn2 v17.4S, v23.4S, v17.4S // .*............................................................................. - trn2 v26.4S, v2.4S, v22.4S // ..*............................................................................ - trn2 v23.2D, v10.2D, v30.2D // ...*........................................................................... - trn1 v27.2D, v10.2D, v30.2D // ....*.......................................................................... - trn2 v30.2D, v26.2D, v17.2D // .....*......................................................................... - trn1 v17.2D, v26.2D, v17.2D // ......*........................................................................ - sub v2.8H, v23.8H, v30.8H // .......*....................................................................... - sub v26.8H, v27.8H, v17.8H // ........*...................................................................... - add v28.8H, v27.8H, v17.8H // .........*..................................................................... - mul v22.8H, v2.8H, v5.8H // ..........*.................................................................... - mul v10.8H, v26.8H, v1.8H // ...........*................................................................... - sqrdmulh v26.8H, v26.8H, v9.8H // ............*.................................................................. - sqrdmulh v2.8H, v2.8H, v3.8H // .............*................................................................. - add v23.8H, v23.8H, v30.8H // ..............*................................................................ - mls v10.8H, v26.8H, v7.H[0] // ................*.............................................................. - mls v22.8H, v2.8H, v7.H[0] // .................*............................................................. - sub v2.8H, v28.8H, v23.8H // ..................*............................................................ - ldr q3, [x3], #16 // ...................*........................................................... - sub v26.8H, v10.8H, v22.8H // .....................*......................................................... - mul v17.8H, v2.8H, v24.8H // ......................*........................................................ - sqrdmulh v30.8H, v2.8H, v6.8H // .......................*....................................................... - mul v2.8H, v26.8H, v24.8H // ........................*...................................................... - sqrdmulh v26.8H, v26.8H, v6.8H // .........................*..................................................... - add v10.8H, v10.8H, v22.8H // ..........................*.................................................... - add v23.8H, v28.8H, v23.8H // ...........................*................................................... - mls v17.8H, v30.8H, v7.H[0] // ............................*.................................................. - mls v2.8H, v26.8H, v7.H[0] // .............................*................................................. - trn1 v30.4S, v23.4S, v10.4S // ..............................*................................................ - trn2 v22.4S, v23.4S, v10.4S // ...............................*............................................... - trn2 v26.4S, v17.4S, v2.4S // .................................*............................................. - trn1 v2.4S, v17.4S, v2.4S // ..................................*............................................ - trn1 v23.2D, v22.2D, v26.2D // ....................................*.......................................... - trn2 v17.2D, v22.2D, v26.2D // .....................................*......................................... - trn2 v6.2D, v30.2D, v2.2D // ......................................*........................................ - trn1 v24.2D, v30.2D, v2.2D // .......................................*....................................... - sub v10.8H, v6.8H, v17.8H // ........................................*...................................... - add v17.8H, v6.8H, v17.8H // .........................................*..................................... - sub v22.8H, v24.8H, v23.8H // ..........................................*.................................... - sqrdmulh v2.8H, v10.8H, v3.H[5] // ...........................................*................................... - mul v8.8H, v10.8H, v3.H[4] // ............................................*.................................. - mul v1.8H, v22.8H, v3.H[2] // .............................................*................................. - sqrdmulh v26.8H, v22.8H, v3.H[3] // ..............................................*................................ - add v23.8H, v24.8H, v23.8H // ...............................................*............................... - mls v8.8H, v2.8H, v7.H[0] // ................................................*.............................. - sqdmulh v30.8H, v17.8H, v7.H[1] // .................................................*............................. - mls v1.8H, v26.8H, v7.H[0] // ..................................................*............................ - sqdmulh v31.8H, v23.8H, v7.H[1] // ...................................................*........................... - sqdmulh v10.8H, v8.8H, v7.H[1] // ....................................................*.......................... - srshr v22.8H, v30.8H, #11 // .....................................................*......................... - sqdmulh v2.8H, v1.8H, v7.H[1] // ......................................................*........................ - srshr v19.8H, v31.8H, #11 // .......................................................*....................... - mls v17.8H, v22.8H, v7.H[0] // ........................................................*...................... - srshr v26.8H, v10.8H, #11 // .........................................................*..................... - srshr v2.8H, v2.8H, #11 // ..........................................................*.................... - mls v23.8H, v19.8H, v7.H[0] // ...........................................................*................... - mls v8.8H, v26.8H, v7.H[0] // ............................................................*.................. - mls v1.8H, v2.8H, v7.H[0] // .............................................................*................. - sub v26.8H, v23.8H, v17.8H // ...............................................................*............... - add v30.8H, v23.8H, v17.8H // ................................................................*.............. - sub v22.8H, v1.8H, v8.8H // .................................................................*............. - mul v10.8H, v26.8H, v3.H[0] // ..................................................................*............ - sqrdmulh v17.8H, v26.8H, v3.H[1] // ...................................................................*........... - mul v2.8H, v22.8H, v3.H[0] // ....................................................................*.......... - sqrdmulh v22.8H, v22.8H, v3.H[1] // .....................................................................*......... - add v26.8H, v1.8H, v8.8H // ......................................................................*........ - str q30, [x1], #(64) // .......................................................................*....... - mls v10.8H, v17.8H, v7.H[0] // ........................................................................*...... - str q26, [x1, #-48] // .........................................................................*..... - mls v2.8H, v22.8H, v7.H[0] // ..........................................................................*.... - str q10, [x1, #-32] // ............................................................................*.. - str q2, [x1, #-16] // ..............................................................................* + // Instructions: 26 + // Expected cycles: 37 + // Expected IPC: 0.70 + // + // Cycle bound: 37.0 + // IPC bound: 0.70 + // + // Wall time: 0.14s + // User time: 0.14s + // + // --------- cycle (expected) ---------> + // 0 25 + // |------------------------|----------- + mul v10.8H, v10.8H, v13.H[4] // *.................................... + mls v15.8H, v3.8H, v7.H[0] // ..*.................................. + srshr v3.8H, v26.8H, #11 // ..*.................................. + mls v10.8H, v5.8H, v7.H[0] // ....*................................ + sqdmulh v21.8H, v15.8H, v7.H[1] // .......*............................. + sqdmulh v30.8H, v10.8H, v7.H[1] // .........*........................... + mls v6.8H, v31.8H, v7.H[0] // ...........*......................... + srshr v21.8H, v21.8H, #11 // ............*........................ + mls v12.8H, v3.8H, v7.H[0] // .............*....................... + srshr v30.8H, v30.8H, #11 // ..............*...................... + mls v15.8H, v21.8H, v7.H[0] // ................*.................... + mls v10.8H, v30.8H, v7.H[0] // ..................*.................. + sub v3.8H, v6.8H, v12.8H // ..................*.................. + sqrdmulh v30.8H, v3.8H, v13.H[1] // ....................*................ + mul v3.8H, v3.8H, v13.H[0] // ......................*.............. + sub v21.8H, v15.8H, v10.8H // .......................*............. + sqrdmulh v31.8H, v21.8H, v13.H[1] // .........................*........... + mul v19.8H, v21.8H, v13.H[0] // ...........................*......... + add v13.8H, v6.8H, v12.8H // ...........................*......... + mls v3.8H, v30.8H, v7.H[0] // .............................*....... + str q13, [x1], #(64) // .............................*....... + add v13.8H, v15.8H, v10.8H // ..............................*...... + mls v19.8H, v31.8H, v7.H[0] // ...............................*..... + str q13, [x1, #-48] // ................................*.... + str q3, [x1, #-32] // ..................................*.. + str q19, [x1, #-16] // ....................................* - // ------------------------------ cycle (expected) ------------------------------> - // 0 25 50 75 - // |------------------------|------------------------|------------------------|--- - // trn1 v26.4S, v2.4S, v22.4S // *.............................................................................. - // trn2 v2.4S, v2.4S, v22.4S // ..*............................................................................ - // trn2 v22.4S, v23.4S, v17.4S // .*............................................................................. - // trn2 v10.2D, v26.2D, v30.2D // ...*........................................................................... - // trn1 v26.2D, v26.2D, v30.2D // ....*.......................................................................... - // trn2 v17.2D, v2.2D, v22.2D // .....*......................................................................... - // trn1 v2.2D, v2.2D, v22.2D // ......*........................................................................ - // sub v22.8H, v10.8H, v17.8H // .......*....................................................................... - // add v10.8H, v10.8H, v17.8H // ..............*................................................................ - // sub v17.8H, v26.8H, v2.8H // ........*...................................................................... - // add v26.8H, v26.8H, v2.8H // .........*..................................................................... - // sqrdmulh v2.8H, v22.8H, v3.8H // .............*................................................................. - // sqrdmulh v30.8H, v17.8H, v9.8H // ............*.................................................................. - // mul v17.8H, v17.8H, v1.8H // ...........*................................................................... - // mul v22.8H, v22.8H, v5.8H // ..........*.................................................................... - // sub v1.8H, v26.8H, v10.8H // ..................*............................................................ - // add v26.8H, v26.8H, v10.8H // ...........................*................................................... - // mls v17.8H, v30.8H, v7.H[0] // ................*.............................................................. - // mls v22.8H, v2.8H, v7.H[0] // .................*............................................................. - // sqrdmulh v2.8H, v1.8H, v6.8H // .......................*....................................................... - // mul v10.8H, v1.8H, v24.8H // ......................*........................................................ - // ldr q1, [x3], #16 // ...................*........................................................... - // sub v30.8H, v17.8H, v22.8H // .....................*......................................................... - // mls v10.8H, v2.8H, v7.H[0] // ............................*.................................................. - // add v2.8H, v17.8H, v22.8H // ..........................*.................................................... - // sqrdmulh v22.8H, v30.8H, v6.8H // .........................*..................................................... - // mul v17.8H, v30.8H, v24.8H // ........................*...................................................... - // trn1 v30.4S, v26.4S, v2.4S // ..............................*................................................ - // trn2 v26.4S, v26.4S, v2.4S // ...............................*............................................... - // mls v17.8H, v22.8H, v7.H[0] // .............................*................................................. - // trn1 v24.4S, v10.4S, v17.4S // ..................................*............................................ - // trn2 v10.4S, v10.4S, v17.4S // .................................*............................................. - // trn2 v6.2D, v30.2D, v24.2D // ......................................*........................................ - // trn2 v9.2D, v26.2D, v10.2D // .....................................*......................................... - // trn1 v30.2D, v30.2D, v24.2D // .......................................*....................................... - // trn1 v26.2D, v26.2D, v10.2D // ....................................*.......................................... - // sub v10.8H, v6.8H, v9.8H // ........................................*...................................... - // sub v24.8H, v30.8H, v26.8H // ..........................................*.................................... - // add v26.8H, v30.8H, v26.8H // ...............................................*............................... - // sqrdmulh v30.8H, v10.8H, v1.H[5] // ...........................................*................................... - // sqrdmulh v5.8H, v24.8H, v1.H[3] // ..............................................*................................ - // mul v24.8H, v24.8H, v1.H[2] // .............................................*................................. - // mul v10.8H, v10.8H, v1.H[4] // ............................................*.................................. - // add v6.8H, v6.8H, v9.8H // .........................................*..................................... - // sqdmulh v9.8H, v26.8H, v7.H[1] // ...................................................*........................... - // mls v24.8H, v5.8H, v7.H[0] // ..................................................*............................ - // mls v10.8H, v30.8H, v7.H[0] // ................................................*.............................. - // sqdmulh v30.8H, v6.8H, v7.H[1] // .................................................*............................. - // srshr v9.8H, v9.8H, #11 // .......................................................*....................... - // sqdmulh v5.8H, v24.8H, v7.H[1] // ......................................................*........................ - // sqdmulh v3.8H, v10.8H, v7.H[1] // ....................................................*.......................... - // mls v26.8H, v9.8H, v7.H[0] // ...........................................................*................... - // srshr v30.8H, v30.8H, #11 // .....................................................*......................... - // srshr v9.8H, v5.8H, #11 // ..........................................................*.................... - // srshr v5.8H, v3.8H, #11 // .........................................................*..................... - // mls v6.8H, v30.8H, v7.H[0] // ........................................................*...................... - // mls v24.8H, v9.8H, v7.H[0] // .............................................................*................. - // mls v10.8H, v5.8H, v7.H[0] // ............................................................*.................. - // sub v9.8H, v26.8H, v6.8H // ...............................................................*............... - // add v26.8H, v26.8H, v6.8H // ................................................................*.............. - // sub v6.8H, v24.8H, v10.8H // .................................................................*............. - // sqrdmulh v5.8H, v9.8H, v1.H[1] // ...................................................................*........... - // mul v9.8H, v9.8H, v1.H[0] // ..................................................................*............ - // sqrdmulh v3.8H, v6.8H, v1.H[1] // .....................................................................*......... - // mul v1.8H, v6.8H, v1.H[0] // ....................................................................*.......... - // add v10.8H, v24.8H, v10.8H // ......................................................................*........ - // mls v9.8H, v5.8H, v7.H[0] // ........................................................................*...... - // str q26, [x1], #(64) // .......................................................................*....... - // mls v1.8H, v3.8H, v7.H[0] // ..........................................................................*.... - // str q10, [x1, #-48] // .........................................................................*..... - // str q9, [x1, #-32] // ............................................................................*.. - // str q1, [x1, #-16] // ..............................................................................* + // --------- cycle (expected) ---------> + // 0 25 + // |------------------------|----------- + // mul v23.8H, v10.8H, v13.H[4] // *.................................... + // mls v15.8H, v3.8H, v7.H[0] // ..*.................................. + // mls v23.8H, v5.8H, v7.H[0] // ....*................................ + // mls v6.8H, v31.8H, v7.H[0] // ...........*......................... + // sqdmulh v28.8H, v15.8H, v7.H[1] // .......*............................. + // sqdmulh v10.8H, v23.8H, v7.H[1] // .........*........................... + // srshr v8.8H, v26.8H, #11 // ..*.................................. + // srshr v10.8H, v10.8H, #11 // ..............*...................... + // mls v12.8H, v8.8H, v7.H[0] // .............*....................... + // sub v16.8H, v6.8H, v12.8H // ..................*.................. + // add v21.8H, v6.8H, v12.8H // ...........................*......... + // str q21, [x1], #(64) // .............................*....... + // mls v23.8H, v10.8H, v7.H[0] // ..................*.................. + // srshr v10.8H, v28.8H, #11 // ............*........................ + // sqrdmulh v12.8H, v16.8H, v13.H[1] // ....................*................ + // mls v15.8H, v10.8H, v7.H[0] // ................*.................... + // mul v31.8H, v16.8H, v13.H[0] // ......................*.............. + // mls v31.8H, v12.8H, v7.H[0] // .............................*....... + // sub v21.8H, v15.8H, v23.8H // .......................*............. + // add v15.8H, v15.8H, v23.8H // ..............................*...... + // str q15, [x1, #-48] // ................................*.... + // sqrdmulh v10.8H, v21.8H, v13.H[1] // .........................*........... + // str q31, [x1, #-32] // ..................................*.. + // mul v4.8H, v21.8H, v13.H[0] // ...........................*......... + // mls v4.8H, v10.8H, v7.H[0] // ...............................*..... + // str q4, [x1, #-16] // ....................................* // --------------------------------------------------------------------- @@ -637,47 +637,69 @@ layer4567_start: .p2align 2 - // Instructions: 12 - // Expected cycles: 19 - // Expected IPC: 0.63 - // - // Cycle bound: 19.0 - // IPC bound: 0.63 - // - // Wall time: 0.01s - // User time: 0.01s - // - // ----- cycle (expected) ------> - // 0 25 - // |------------------------|---- - ldr q22, [x0, #128] // *............................. - ldr q6, [x0, #320] // ..*........................... - ldr q5, [x0, #448] // ....*......................... - ldr q24, [x0, #256] // ......*....................... - ldr q9, [x0, #384] // ........*..................... - ldr q17, [x0, #192] // ..........*................... - add v28.8H, v24.8H, v6.8H // ............*................. - add v21.8H, v9.8H, v5.8H // .............*................ - add v23.8H, v22.8H, v17.8H // ..............*............... - ldr q2, [x0, #0] // ...............*.............. - add v3.8H, v28.8H, v21.8H // .................*............ - ldr q10, [x0, #64] // ..................*........... + // Instructions: 23 + // Expected cycles: 16 + // Expected IPC: 1.44 + // + // Cycle bound: 16.0 + // IPC bound: 1.44 + // + // Wall time: 0.10s + // User time: 0.10s + // + // ----- cycle (expected) ------> + // 0 25 + // |------------------------|---- + ldr q5, [x0, #192] // *............................. + ldr q18, [x0, #128] // *............................. + ldr q24, [x0, #384] // .*............................ + ldr q22, [x0, #64] // ..*........................... + ldr q21, [x0, #0] // ..*........................... + ldr q10, [x0, #320] // ...*.......................... + sub v15.8H, v18.8H, v5.8H // ....*......................... + ldr q13, [x0, #448] // ....*......................... + add v17.8H, v18.8H, v5.8H // .....*........................ + ldr q5, [x0, #256] // .....*........................ + add v14.8H, v21.8H, v22.8H // ......*....................... + sqrdmulh v20.8H, v15.8H, v1.H[1] // ......*....................... + mul v11.8H, v15.8H, v1.H[0] // ........*..................... + sub v8.8H, v14.8H, v17.8H // ........*..................... + add v6.8H, v5.8H, v10.8H // .........*.................... + add v23.8H, v14.8H, v17.8H // ..........*................... + sqrdmulh v14.8H, v8.8H, v0.H[3] // ..........*................... + add v2.8H, v24.8H, v13.8H // ...........*.................. + sub v25.8H, v24.8H, v13.8H // ............*................. + mul v24.8H, v8.8H, v0.H[2] // ............*................. + add v17.8H, v6.8H, v2.8H // .............*................ + mls v24.8H, v14.8H, v7.H[0] // ...............*.............. + add v15.8H, v23.8H, v17.8H // ...............*.............. - // ------ cycle (expected) ------> - // 0 25 - // |------------------------|----- - // ldr q2, [x0, #0] // ...............*............... - // ldr q10, [x0, #64] // ..................*............ - // ldr q22, [x0, #128] // *.............................. - // ldr q24, [x0, #256] // ......*........................ - // ldr q6, [x0, #320] // ..*............................ - // ldr q9, [x0, #384] // ........*...................... - // add v28.8H, v24.8H, v6.8H // ............*.................. - // ldr q5, [x0, #448] // ....*.......................... - // ldr q17, [x0, #192] // ..........*.................... - // add v21.8H, v9.8H, v5.8H // .............*................. - // add v23.8H, v22.8H, v17.8H // ..............*................ - // add v3.8H, v28.8H, v21.8H // .................*............. + // ------ cycle (expected) ------> + // 0 25 + // |------------------------|----- + // ldr q22, [x0, #64] // ..*............................ + // ldr q5, [x0, #256] // .....*......................... + // ldr q10, [x0, #320] // ...*........................... + // add v6.8H, v5.8H, v10.8H // .........*..................... + // ldr q21, [x0, #0] // ..*............................ + // add v8.8H, v21.8H, v22.8H // ......*........................ + // ldr q27, [x0, #192] // *.............................. + // ldr q13, [x0, #128] // *.............................. + // ldr q9, [x0, #384] // .*............................. + // add v18.8H, v13.8H, v27.8H // .....*......................... + // sub v31.8H, v8.8H, v18.8H // ........*...................... + // add v23.8H, v8.8H, v18.8H // ..........*.................... + // sub v8.8H, v13.8H, v27.8H // ....*.......................... + // ldr q13, [x0, #448] // ....*.......................... + // sqrdmulh v20.8H, v8.8H, v1.H[1] // ......*........................ + // sub v25.8H, v9.8H, v13.8H // ............*.................. + // add v2.8H, v9.8H, v13.8H // ...........*................... + // sqrdmulh v18.8H, v31.8H, v0.H[3] // ..........*.................... + // mul v11.8H, v8.8H, v1.H[0] // ........*...................... + // add v17.8H, v6.8H, v2.8H // .............*................. + // mul v24.8H, v31.8H, v0.H[2] // ............*.................. + // add v15.8H, v23.8H, v17.8H // ...............*............... + // mls v24.8H, v18.8H, v7.H[0] // ...............*............... sub count, count, #1 layer123_start: @@ -688,364 +710,342 @@ layer123_start: // Cycle bound: 96.0 // IPC bound: 0.92 // - // Wall time: 3.45s - // User time: 3.45s + // Wall time: 8.35s + // User time: 8.35s // // -------------------------------------- cycle (expected) ---------------------------------------> // 0 25 50 75 // |------------------------|------------------------|------------------------|-------------------- - sub v26.8H, v2.8H, v10.8H // *............................................................................................... - add v2.8H, v2.8H, v10.8H // .*.............................................................................................. - sub v22.8H, v22.8H, v17.8H // ..*............................................................................................. - sqrdmulh v10.8H, v26.8H, v0.H[7] // ...*............................................................................................ - mul v26.8H, v26.8H, v0.H[6] // ....*........................................................................................... - sub v17.8H, v2.8H, v23.8H // .....*.......................................................................................... - add v2.8H, v2.8H, v23.8H // ......*......................................................................................... - sqrdmulh v23.8H, v22.8H, v1.H[1] // .......*........................................................................................ - mul v22.8H, v22.8H, v1.H[0] // ........*....................................................................................... - mls v26.8H, v10.8H, v7.H[0] // .........*...................................................................................... - sub v10.8H, v24.8H, v6.8H // ..........*..................................................................................... - sqrdmulh v24.8H, v17.8H, v0.H[3] // ...........*.................................................................................... - mul v17.8H, v17.8H, v0.H[2] // ............*................................................................................... - sub v6.8H, v2.8H, v3.8H // .............*.................................................................................. - add v2.8H, v2.8H, v3.8H // ..............*................................................................................. - mls v22.8H, v23.8H, v7.H[0] // ...............*................................................................................ - sqrdmulh v23.8H, v10.8H, v1.H[3] // ................*............................................................................... - mul v10.8H, v10.8H, v1.H[2] // .................*.............................................................................. - sub v9.8H, v9.8H, v5.8H // ..................*............................................................................. - sub v5.8H, v26.8H, v22.8H // ...................*............................................................................ - add v26.8H, v26.8H, v22.8H // ....................*........................................................................... - mls v10.8H, v23.8H, v7.H[0] // .....................*.......................................................................... - sqrdmulh v22.8H, v9.8H, v1.H[5] // ......................*......................................................................... - mls v17.8H, v24.8H, v7.H[0] // .......................*........................................................................ - mul v23.8H, v9.8H, v1.H[4] // ........................*....................................................................... - sqrdmulh v24.8H, v5.8H, v0.H[3] // .........................*...................................................................... - mul v9.8H, v5.8H, v0.H[2] // ..........................*..................................................................... - sqrdmulh v5.8H, v6.8H, v0.H[1] // ...........................*.................................................................... - mul v6.8H, v6.8H, v0.H[0] // ............................*................................................................... - sqrdmulh v3.8H, v2.8H, v30.8H // .............................*.................................................................. - mul v2.8H, v2.8H, v29.8H // ..............................*................................................................. - mls v23.8H, v22.8H, v7.H[0] // ...............................*................................................................ - mls v9.8H, v24.8H, v7.H[0] // ................................*............................................................... - sub v22.8H, v28.8H, v21.8H // .................................*.............................................................. - mls v6.8H, v5.8H, v7.H[0] // ..................................*............................................................. - sub v24.8H, v10.8H, v23.8H // ...................................*............................................................ - sqrdmulh v5.8H, v22.8H, v0.H[5] // ....................................*........................................................... - mul v22.8H, v22.8H, v0.H[4] // .....................................*.......................................................... - add v10.8H, v10.8H, v23.8H // ......................................*......................................................... - sqrdmulh v23.8H, v24.8H, v0.H[5] // .......................................*........................................................ - mul v24.8H, v24.8H, v0.H[4] // ........................................*....................................................... - sub v28.8H, v26.8H, v10.8H // .........................................*...................................................... - add v26.8H, v26.8H, v10.8H // ..........................................*..................................................... - mls v22.8H, v5.8H, v7.H[0] // ...........................................*.................................................... - mls v24.8H, v23.8H, v7.H[0] // ............................................*................................................... - sqrdmulh v10.8H, v28.8H, v0.H[1] // .............................................*.................................................. - mul v23.8H, v28.8H, v0.H[0] // ..............................................*................................................. - sub v5.8H, v17.8H, v22.8H // ...............................................*................................................ - add v22.8H, v17.8H, v22.8H // ................................................*............................................... - sub v17.8H, v9.8H, v24.8H // .................................................*.............................................. - mls v23.8H, v10.8H, v7.H[0] // ..................................................*............................................. - sqrdmulh v10.8H, v5.8H, v0.H[1] // ...................................................*............................................ - mul v5.8H, v5.8H, v0.H[0] // ....................................................*........................................... - add v24.8H, v9.8H, v24.8H // .....................................................*.......................................... - sqrdmulh v9.8H, v17.8H, v0.H[1] // ......................................................*......................................... - mul v17.8H, v17.8H, v0.H[0] // .......................................................*........................................ - mls v5.8H, v10.8H, v7.H[0] // ........................................................*....................................... - str q6, [x0, #256] // .........................................................*...................................... - mls v2.8H, v3.8H, v7.H[0] // ..........................................................*..................................... - mls v17.8H, v9.8H, v7.H[0] // ...........................................................*.................................... - str q23, [x0, #320] // ............................................................*................................... - sqrdmulh v10.8H, v26.8H, v30.8H // .............................................................*.................................. - str q5, [x0, #384] // ..............................................................*................................. - mul v26.8H, v26.8H, v29.8H // ...............................................................*................................ - str q17, [x0, #448] // ................................................................*............................... - sqrdmulh v17.8H, v22.8H, v30.8H // .................................................................*.............................. - mul v22.8H, v22.8H, v29.8H // ..................................................................*............................. - mls v26.8H, v10.8H, v7.H[0] // ...................................................................*............................ - sqrdmulh v10.8H, v24.8H, v30.8H // ....................................................................*........................... - mul v23.8H, v24.8H, v29.8H // .....................................................................*.......................... - mls v22.8H, v17.8H, v7.H[0] // ......................................................................*......................... - str q2, [x0], #(16) // .......................................................................*........................ - ldr q2, [x0, #0] // ........................................................................e....................... - mls v23.8H, v10.8H, v7.H[0] // ..........................................................................*..................... - str q26, [x0, #48] // ...........................................................................*.................... - ldr q10, [x0, #64] // ............................................................................e................... - str q22, [x0, #112] // ..............................................................................*................. - ldr q22, [x0, #128] // ...............................................................................e................ - ldr q24, [x0, #256] // .................................................................................e.............. - ldr q6, [x0, #320] // ...................................................................................e............ - ldr q9, [x0, #384] // .....................................................................................e.......... - add v28.8H, v24.8H, v6.8H // .......................................................................................e........ - ldr q5, [x0, #448] // ........................................................................................e....... - ldr q17, [x0, #192] // ..........................................................................................e..... - add v21.8H, v9.8H, v5.8H // ............................................................................................e... - str q23, [x0, #176] // .............................................................................................*.. - add v23.8H, v22.8H, v17.8H // ..............................................................................................e. - add v3.8H, v28.8H, v21.8H // ...............................................................................................e + sub v9.8H, v21.8H, v22.8H // *............................................................................................... + sqrdmulh v13.8H, v15.8H, v30.8H // *............................................................................................... + ldr q22, [x0, #80] // .e.............................................................................................. + mls v11.8H, v20.8H, v7.H[0] // ..*............................................................................................. + mul v14.8H, v25.8H, v1.H[4] // ....*........................................................................................... + mul v26.8H, v15.8H, v29.8H // ......*......................................................................................... + sub v15.8H, v6.8H, v2.8H // ......*......................................................................................... + sqrdmulh v4.8H, v9.8H, v0.H[7] // ........*....................................................................................... + mul v16.8H, v9.8H, v0.H[6] // ..........*..................................................................................... + sqrdmulh v21.8H, v25.8H, v1.H[5] // ............*................................................................................... + mls v16.8H, v4.8H, v7.H[0] // ..............*................................................................................. + mls v26.8H, v13.8H, v7.H[0] // ................*............................................................................... + mls v14.8H, v21.8H, v7.H[0] // ..................*............................................................................. + sub v2.8H, v16.8H, v11.8H // ....................*........................................................................... + sqrdmulh v20.8H, v15.8H, v0.H[5] // ....................*........................................................................... + add v4.8H, v16.8H, v11.8H // .....................*.......................................................................... + str q26, [x0], #(16) // .....................*.......................................................................... + sub v13.8H, v5.8H, v10.8H // ......................*......................................................................... + sqrdmulh v26.8H, v2.8H, v0.H[3] // ......................*......................................................................... + ldr q5, [x0, #256] // .......................e........................................................................ + mul v9.8H, v2.8H, v0.H[2] // ........................*....................................................................... + mul v3.8H, v13.8H, v1.H[2] // ..........................*..................................................................... + sqrdmulh v10.8H, v13.8H, v1.H[3] // ............................*................................................................... + mls v9.8H, v26.8H, v7.H[0] // ..............................*................................................................. + sub v26.8H, v23.8H, v17.8H // ...............................*................................................................ + mul v13.8H, v15.8H, v0.H[4] // ................................*............................................................... + mls v3.8H, v10.8H, v7.H[0] // ..................................*............................................................. + ldr q10, [x0, #320] // ..................................e............................................................. + sqrdmulh v8.8H, v26.8H, v0.H[1] // ....................................*........................................................... + mls v13.8H, v20.8H, v7.H[0] // ......................................*......................................................... + add v31.8H, v3.8H, v14.8H // .......................................*........................................................ + sub v15.8H, v3.8H, v14.8H // ........................................*....................................................... + mul v3.8H, v26.8H, v0.H[0] // ........................................*....................................................... + sub v21.8H, v4.8H, v31.8H // .........................................*...................................................... + add v16.8H, v4.8H, v31.8H // ..........................................*..................................................... + mls v3.8H, v8.8H, v7.H[0] // ..........................................*..................................................... + sub v6.8H, v24.8H, v13.8H // ...........................................*.................................................... + sqrdmulh v4.8H, v15.8H, v0.H[5] // ............................................*................................................... + mul v18.8H, v15.8H, v0.H[4] // ..............................................*................................................. + add v28.8H, v24.8H, v13.8H // ...............................................*................................................ + str q3, [x0, #240] // ...............................................*................................................ + sqrdmulh v26.8H, v21.8H, v0.H[1] // ................................................*............................................... + mls v18.8H, v4.8H, v7.H[0] // ..................................................*............................................. + sqrdmulh v14.8H, v16.8H, v30.8H // ....................................................*........................................... + sqrdmulh v8.8H, v6.8H, v0.H[1] // ......................................................*......................................... + sub v4.8H, v9.8H, v18.8H // .......................................................*........................................ + add v15.8H, v9.8H, v18.8H // ........................................................*....................................... + mul v25.8H, v6.8H, v0.H[0] // ........................................................*....................................... + add v6.8H, v5.8H, v10.8H // .........................................................e...................................... + mul v13.8H, v21.8H, v0.H[0] // ..........................................................*..................................... + ldr q21, [x0, #0] // ..........................................................e..................................... + sqrdmulh v23.8H, v28.8H, v30.8H // ............................................................*................................... + mls v13.8H, v26.8H, v7.H[0] // ..............................................................*................................. + mls v25.8H, v8.8H, v7.H[0] // ................................................................*............................... + add v8.8H, v21.8H, v22.8H // ................................................................e............................... + mul v26.8H, v28.8H, v29.8H // ..................................................................*............................. + str q13, [x0, #304] // ...................................................................*............................ + mul v13.8H, v16.8H, v29.8H // ....................................................................*........................... + str q25, [x0, #368] // .....................................................................*.......................... + mls v13.8H, v14.8H, v7.H[0] // ......................................................................*......................... + mls v26.8H, v23.8H, v7.H[0] // ........................................................................*....................... + ldr q27, [x0, #192] // .........................................................................e...................... + sqrdmulh v23.8H, v4.8H, v0.H[1] // ..........................................................................*..................... + str q13, [x0, #48] // ...........................................................................*.................... + ldr q13, [x0, #128] // ...........................................................................e.................... + sqrdmulh v28.8H, v15.8H, v30.8H // ............................................................................*................... + ldr q9, [x0, #384] // ............................................................................e................... + str q26, [x0, #112] // .............................................................................*.................. + mul v11.8H, v4.8H, v0.H[0] // ..............................................................................*................. + add v18.8H, v13.8H, v27.8H // ...............................................................................e................ + mls v11.8H, v23.8H, v7.H[0] // ................................................................................*............... + sub v31.8H, v8.8H, v18.8H // .................................................................................e.............. + mul v14.8H, v15.8H, v29.8H // ..................................................................................*............. + add v23.8H, v8.8H, v18.8H // ..................................................................................e............. + sub v8.8H, v13.8H, v27.8H // ...................................................................................e............ + ldr q13, [x0, #448] // ...................................................................................e............ + mls v14.8H, v28.8H, v7.H[0] // ....................................................................................*........... + str q11, [x0, #432] // .....................................................................................*.......... + sqrdmulh v20.8H, v8.8H, v1.H[1] // ......................................................................................e......... + sub v25.8H, v9.8H, v13.8H // .......................................................................................e........ + add v2.8H, v9.8H, v13.8H // ........................................................................................e....... + sqrdmulh v18.8H, v31.8H, v0.H[3] // ........................................................................................e....... + str q14, [x0, #176] // .........................................................................................*...... + mul v11.8H, v8.8H, v1.H[0] // ..........................................................................................e..... + add v17.8H, v6.8H, v2.8H // ..........................................................................................e..... + mul v24.8H, v31.8H, v0.H[2] // ............................................................................................e... + add v15.8H, v23.8H, v17.8H // ............................................................................................e... + mls v24.8H, v18.8H, v7.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.......'.......................................................................................~..... - // sub v24.8h, v8.8h, v9.8h // ........................*............................................................................................. - // add v8.8h, v8.8h, v9.8h // ........................'*............................................................................................ - // sqrdmulh v27.8h, v24.8h, v0.h[7] // ........................'..*.......................................................................................... - // mul v9.8h, v24.8h, v0.h[6] // ........................'...*......................................................................................... - // mls v9.8h, v27.8h, v7.h[0] // ........................'........*.................................................................................... - // sub v24.8h, v10.8h, v11.8h // ........................'.*........................................................................................... - // add v10.8h, v10.8h, v11.8h // ......................e.'............................................................................................. - // sqrdmulh v27.8h, v24.8h, v1.h[1] // ........................'......*...................................................................................... - // mul v11.8h, v24.8h, v1.h[0] // ........................'.......*..................................................................................... - // mls v11.8h, v27.8h, v7.h[0] // ........................'..............*.............................................................................. - // sub v24.8h, v12.8h, v13.8h // ........................'.........*................................................................................... - // add v12.8h, v12.8h, v13.8h // ...............e........'......................................................................................~...... - // sqrdmulh v27.8h, v24.8h, v1.h[3] // ........................'...............*............................................................................. - // mul v13.8h, v24.8h, v1.h[2] // ........................'................*............................................................................ - // mls v13.8h, v27.8h, v7.h[0] // ........................'....................*........................................................................ - // sub v24.8h, v14.8h, v15.8h // ........................'.................*........................................................................... - // add v14.8h, v14.8h, v15.8h // ....................e...'...........................................................................................~. - // sqrdmulh v27.8h, v24.8h, v1.h[5] // ........................'.....................*....................................................................... - // mul v15.8h, v24.8h, v1.h[4] // ........................'.......................*..................................................................... - // mls v15.8h, v27.8h, v7.h[0] // ........................'..............................*.............................................................. - // sub v24.8h, v8.8h, v10.8h // ........................'....*........................................................................................ - // add v8.8h, v8.8h, v10.8h // ........................'.....*....................................................................................... - // sqrdmulh v27.8h, v24.8h, v0.h[3] // ........................'..........*.................................................................................. - // mul v10.8h, v24.8h, v0.h[2] // ........................'...........*................................................................................. - // mls v10.8h, v27.8h, v7.h[0] // ........................'......................*...................................................................... - // sub v24.8h, v9.8h, v11.8h // ........................'..................*.......................................................................... - // add v9.8h, v9.8h, v11.8h // ........................'...................*......................................................................... - // sqrdmulh v27.8h, v24.8h, v0.h[3] // ........................'........................*.................................................................... - // mul v11.8h, v24.8h, v0.h[2] // ........................'.........................*................................................................... - // mls v11.8h, v27.8h, v7.h[0] // ........................'...............................*............................................................. - // sub v24.8h, v12.8h, v14.8h // ........................'................................*............................................................ - // add v12.8h, v12.8h, v14.8h // .......................e'............................................................................................. - // sqrdmulh v27.8h, v24.8h, v0.h[5] // ........................'...................................*......................................................... - // mul v14.8h, v24.8h, v0.h[4] // ........................'....................................*........................................................ - // mls v14.8h, v27.8h, v7.h[0] // ........................'..........................................*.................................................. - // sub v24.8h, v13.8h, v15.8h // ........................'..................................*.......................................................... - // add v13.8h, v13.8h, v15.8h // ........................'.....................................*....................................................... - // sqrdmulh v27.8h, v24.8h, v0.h[5] // ........................'......................................*...................................................... - // mul v15.8h, v24.8h, v0.h[4] // ........................'.......................................*..................................................... - // mls v15.8h, v27.8h, v7.h[0] // ........................'...........................................*................................................. - // sub v24.8h, v8.8h, v12.8h // ........................'............*................................................................................ - // add v8.8h, v8.8h, v12.8h // ........................'.............*............................................................................... - // sqrdmulh v27.8h, v24.8h, v0.h[1] // ........................'..........................*.................................................................. - // mul v12.8h, v24.8h, v0.h[0] // ........................'...........................*................................................................. - // mls v12.8h, v27.8h, v7.h[0] // ........................'.................................*........................................................... - // sub v24.8h, v9.8h, v13.8h // ........................'........................................*.................................................... - // add v9.8h, v9.8h, v13.8h // ........................'.........................................*................................................... - // sqrdmulh v27.8h, v24.8h, v0.h[1] // ........................'............................................*................................................ - // mul v13.8h, v24.8h, v0.h[0] // ........................'.............................................*............................................... - // mls v13.8h, v27.8h, v7.h[0] // ........................'.................................................*........................................... - // sub v24.8h, v10.8h, v14.8h // ........................'..............................................*.............................................. - // add v10.8h, v10.8h, v14.8h // ........................'...............................................*............................................. - // sqrdmulh v27.8h, v24.8h, v0.h[1] // ........................'..................................................*.......................................... - // mul v14.8h, v24.8h, v0.h[0] // ........................'...................................................*......................................... - // mls v14.8h, v27.8h, v7.h[0] // ........................'.......................................................*..................................... - // sub v24.8h, v11.8h, v15.8h // ........................'................................................*............................................ - // add v11.8h, v11.8h, v15.8h // ........................'....................................................*........................................ - // sqrdmulh v27.8h, v24.8h, v0.h[1] // ........................'.....................................................*....................................... - // mul v15.8h, v24.8h, v0.h[0] // ........................'......................................................*...................................... - // mls v15.8h, v27.8h, v7.h[0] // ........................'..........................................................*.................................. - // str q12, [x0, #(4*(512/8))] // ........................'........................................................*.................................... - // str q13, [x0, #(5*(512/8))] // ........................'...........................................................*................................. - // str q14, [x0, #(6*(512/8))] // ........................'.............................................................*............................... - // str q15, [x0, #(7*(512/8))] // ........................'...............................................................*............................. - // sqrdmulh v27.8h, v8.8h, v30.8h // ........................'............................*................................................................ - // mul v8.8h, v8.8h, v29.8h // ........................'.............................*............................................................... - // mls v8.8h, v27.8h, v7.h[0] // ........................'.........................................................*................................... - // sqrdmulh v27.8h, v9.8h, v30.8h // ........................'............................................................*................................ - // mul v9.8h, v9.8h, v29.8h // ........................'..............................................................*.............................. - // mls v9.8h, v27.8h, v7.h[0] // ........................'..................................................................*.......................... - // sqrdmulh v27.8h, v10.8h, v30.8h // ........................'................................................................*............................ - // mul v10.8h, v10.8h, v29.8h // ........................'.................................................................*........................... - // mls v10.8h, v27.8h, v7.h[0] // ........................'.....................................................................*....................... - // sqrdmulh v27.8h, v11.8h, v30.8h // ........................'...................................................................*......................... - // mul v11.8h, v11.8h, v29.8h // ........................'....................................................................*........................ - // mls v11.8h, v27.8h, v7.h[0] // ..~.....................'.........................................................................*................... - // 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))] // .....................~..'............................................................................................* + // ----------------------------------------------------------------------------------- cycle (expected) -----------------------------------------------------------------------------------> + // 0 25 50 75 100 125 150 175 + // |------------------------|------------------------|------------------------|------------------------|------------------------|------------------------|------------------------|--------- + // 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............'..................................................................................~...... + // sub v24.8h, v8.8h, v9.8h // ...............................................................................................*......................................................................................... + // add v8.8h, v8.8h, v9.8h // ...............................................................e...............................'...............................................................~......................... + // sqrdmulh v27.8h, v24.8h, v0.h[7] // .......~.......................................................................................'.......*................................................................................. + // mul v9.8h, v24.8h, v0.h[6] // .........~.....................................................................................'.........*............................................................................... + // mls v9.8h, v27.8h, v7.h[0] // .............~.................................................................................'.............*........................................................................... + // sub v24.8h, v10.8h, v11.8h // ..................................................................................e............'..................................................................................~...... + // add v10.8h, v10.8h, v11.8h // ..............................................................................e................'..............................................................................~.......... + // sqrdmulh v27.8h, v24.8h, v1.h[1] // .....................................................................................e.........'.....................................................................................~... + // mul v11.8h, v24.8h, v1.h[0] // .........................................................................................e.....'......................................................................................... + // mls v11.8h, v27.8h, v7.h[0] // .~.............................................................................................'.*....................................................................................... + // sub v24.8h, v12.8h, v13.8h // .....................~.........................................................................'.....................*................................................................... + // add v12.8h, v12.8h, v13.8h // ........................................................e......................................'........................................................~................................ + // sqrdmulh v27.8h, v24.8h, v1.h[3] // ...........................~...................................................................'...........................*............................................................. + // mul v13.8h, v24.8h, v1.h[2] // .........................~.....................................................................'.........................*............................................................... + // mls v13.8h, v27.8h, v7.h[0] // .................................~.............................................................'.................................*....................................................... + // sub v24.8h, v14.8h, v15.8h // ......................................................................................e........'......................................................................................~.. + // add v14.8h, v14.8h, v15.8h // .......................................................................................e.......'.......................................................................................~. + // sqrdmulh v27.8h, v24.8h, v1.h[5] // ...........~...................................................................................'...........*............................................................................. + // mul v15.8h, v24.8h, v1.h[4] // ...~...........................................................................................'...*..................................................................................... + // mls v15.8h, v27.8h, v7.h[0] // .................~.............................................................................'.................*....................................................................... + // sub v24.8h, v8.8h, v10.8h // ................................................................................e..............'................................................................................~........ + // add v8.8h, v8.8h, v10.8h // .................................................................................e.............'.................................................................................~....... + // sqrdmulh v27.8h, v24.8h, v0.h[3] // .......................................................................................e.......'.......................................................................................~. + // mul v10.8h, v24.8h, v0.h[2] // ...........................................................................................e...'......................................................................................... + // mls v10.8h, v27.8h, v7.h[0] // .............................................................................................e.'......................................................................................... + // sub v24.8h, v9.8h, v11.8h // ...................~...........................................................................'...................*..................................................................... + // add v9.8h, v9.8h, v11.8h // ....................~..........................................................................'....................*.................................................................... + // sqrdmulh v27.8h, v24.8h, v0.h[3] // .....................~.........................................................................'.....................*................................................................... + // mul v11.8h, v24.8h, v0.h[2] // .......................~.......................................................................'.......................*................................................................. + // mls v11.8h, v27.8h, v7.h[0] // .............................~.................................................................'.............................*........................................................... + // sub v24.8h, v12.8h, v14.8h // .....~.........................................................................................'.....*................................................................................... + // add v12.8h, v12.8h, v14.8h // .........................................................................................e.....'......................................................................................... + // sqrdmulh v27.8h, v24.8h, v0.h[5] // ...................~...........................................................................'...................*..................................................................... + // mul v14.8h, v24.8h, v0.h[4] // ...............................~...............................................................'...............................*......................................................... + // mls v14.8h, v27.8h, v7.h[0] // .....................................~.........................................................'.....................................*................................................... + // sub v24.8h, v13.8h, v15.8h // .......................................~.......................................................'.......................................*................................................. + // add v13.8h, v13.8h, v15.8h // ......................................~........................................................'......................................*.................................................. + // sqrdmulh v27.8h, v24.8h, v0.h[5] // ...........................................~...................................................'...........................................*............................................. + // mul v15.8h, v24.8h, v0.h[4] // .............................................~.................................................'.............................................*........................................... + // mls v15.8h, v27.8h, v7.h[0] // .................................................~.............................................'.................................................*....................................... + // sub v24.8h, v8.8h, v12.8h // ..............................~................................................................'..............................*.......................................................... + // add v8.8h, v8.8h, v12.8h // ...........................................................................................e...'......................................................................................... + // sqrdmulh v27.8h, v24.8h, v0.h[1] // ...................................~...........................................................'...................................*..................................................... + // mul v12.8h, v24.8h, v0.h[0] // .......................................~.......................................................'.......................................*................................................. + // mls v12.8h, v27.8h, v7.h[0] // .........................................~.....................................................'.........................................*............................................... + // sub v24.8h, v9.8h, v13.8h // ........................................~......................................................'........................................*................................................ + // add v9.8h, v9.8h, v13.8h // .........................................~.....................................................'.........................................*............................................... + // sqrdmulh v27.8h, v24.8h, v0.h[1] // ...............................................~...............................................'...............................................*......................................... + // mul v13.8h, v24.8h, v0.h[0] // .........................................................~.....................................'.........................................................*............................... + // mls v13.8h, v27.8h, v7.h[0] // .............................................................~.................................'.............................................................*........................... + // sub v24.8h, v10.8h, v14.8h // ..........................................~....................................................'..........................................*.............................................. + // add v10.8h, v10.8h, v14.8h // ..............................................~................................................'..............................................*.......................................... + // sqrdmulh v27.8h, v24.8h, v0.h[1] // .....................................................~.........................................'.....................................................*................................... + // mul v14.8h, v24.8h, v0.h[0] // .......................................................~.......................................'.......................................................*................................. + // mls v14.8h, v27.8h, v7.h[0] // ...............................................................~...............................'...............................................................*......................... + // sub v24.8h, v11.8h, v15.8h // ......................................................~........................................'......................................................*.................................. + // add v11.8h, v11.8h, v15.8h // .......................................................~.......................................'.......................................................*................................. + // sqrdmulh v27.8h, v24.8h, v0.h[1] // .........................................................................~.....................'.........................................................................*............... + // mul v15.8h, v24.8h, v0.h[0] // .............................................................................~.................'.............................................................................*........... + // mls v15.8h, v27.8h, v7.h[0] // ...............................................................................~...............'...............................................................................*......... + // str q12, [x0, #(4*(512/8))] // ..............................................~................................................'..............................................*.......................................... + // str q13, [x0, #(5*(512/8))] // ..................................................................~............................'..................................................................*...................... + // str q14, [x0, #(6*(512/8))] // ....................................................................~..........................'....................................................................*.................... + // str q15, [x0, #(7*(512/8))] // ....................................................................................~..........'....................................................................................*.... + // sqrdmulh v27.8h, v8.8h, v30.8h // ...............................................................................................*......................................................................................... + // mul v8.8h, v8.8h, v29.8h // .....~.........................................................................................'.....*................................................................................... + // mls v8.8h, v27.8h, v7.h[0] // ...............~...............................................................................'...............*......................................................................... + // sqrdmulh v27.8h, v9.8h, v30.8h // ...................................................~...........................................'...................................................*..................................... + // mul v9.8h, v9.8h, v29.8h // ...................................................................~...........................'...................................................................*..................... + // mls v9.8h, v27.8h, v7.h[0] // .....................................................................~.........................'.....................................................................*................... + // sqrdmulh v27.8h, v10.8h, v30.8h // ...........................................................~...................................'...........................................................*............................. + // mul v10.8h, v10.8h, v29.8h // .................................................................~.............................'.................................................................*....................... + // mls v10.8h, v27.8h, v7.h[0] // .......................................................................~.......................'.......................................................................*................. + // sqrdmulh v27.8h, v11.8h, v30.8h // ...........................................................................~...................'...........................................................................*............. + // mul v11.8h, v11.8h, v29.8h // .................................................................................~.............'.................................................................................*....... + // mls v11.8h, v27.8h, v7.h[0] // ...................................................................................~...........'...................................................................................*..... + // 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))] // ........................................................................................~......'........................................................................................* sub count, count, #1 cbnz count, layer123_start - // Instructions: 76 - // Expected cycles: 78 - // Expected IPC: 0.97 + // Instructions: 65 + // Expected cycles: 90 + // Expected IPC: 0.72 // - // Cycle bound: 78.0 - // IPC bound: 0.97 + // Cycle bound: 90.0 + // IPC bound: 0.72 // - // Wall time: 7.41s - // User time: 7.41s + // Wall time: 3.77s + // User time: 3.77s // - // ----------------------------- cycle (expected) ------------------------------> + // ----------------------------------- cycle (expected) ------------------------------------> // 0 25 50 75 - // |------------------------|------------------------|------------------------|-- - sub v12.8H, v9.8H, v5.8H // *............................................................................. - sub v9.8H, v2.8H, v10.8H // .*............................................................................ - sub v14.8H, v22.8H, v17.8H // ..*........................................................................... - mul v26.8H, v12.8H, v1.H[4] // ...*.......................................................................... - sqrdmulh v18.8H, v12.8H, v1.H[5] // ....*......................................................................... - sqrdmulh v22.8H, v14.8H, v1.H[1] // .....*........................................................................ - mul v5.8H, v14.8H, v1.H[0] // ......*....................................................................... - sub v24.8H, v24.8H, v6.8H // .......*...................................................................... - mul v11.8H, v9.8H, v0.H[6] // ........*..................................................................... - sqrdmulh v8.8H, v9.8H, v0.H[7] // .........*.................................................................... - mul v31.8H, v24.8H, v1.H[2] // ..........*................................................................... - sqrdmulh v17.8H, v24.8H, v1.H[3] // ...........*.................................................................. - sub v25.8H, v28.8H, v21.8H // ............*................................................................. - mls v11.8H, v8.8H, v7.H[0] // .............*................................................................ - mls v26.8H, v18.8H, v7.H[0] // ..............*............................................................... - mls v31.8H, v17.8H, v7.H[0] // ...............*.............................................................. - mls v5.8H, v22.8H, v7.H[0] // ................*............................................................. - sqrdmulh v19.8H, v25.8H, v0.H[5] // .................*............................................................ - mul v9.8H, v25.8H, v0.H[4] // ..................*........................................................... - add v22.8H, v31.8H, v26.8H // ...................*.......................................................... - add v4.8H, v11.8H, v5.8H // ....................*......................................................... - add v16.8H, v2.8H, v10.8H // .....................*........................................................ - mls v9.8H, v19.8H, v7.H[0] // ......................*....................................................... - sub v24.8H, v4.8H, v22.8H // .......................*...................................................... - add v22.8H, v4.8H, v22.8H // ........................*..................................................... - add v2.8H, v16.8H, v23.8H // .........................*.................................................... - sqrdmulh v28.8H, v24.8H, v0.H[1] // ..........................*................................................... - mul v10.8H, v22.8H, v29.8H // ...........................*.................................................. - sqrdmulh v22.8H, v22.8H, v30.8H // ............................*................................................. - sub v6.8H, v2.8H, v3.8H // .............................*................................................ - sub v26.8H, v31.8H, v26.8H // ..............................*............................................... - sub v8.8H, v16.8H, v23.8H // ...............................*.............................................. - sqrdmulh v17.8H, v6.8H, v0.H[1] // ................................*............................................. - mul v21.8H, v26.8H, v0.H[4] // .................................*............................................ - sqrdmulh v19.8H, v26.8H, v0.H[5] // ..................................*........................................... - mul v27.8H, v6.8H, v0.H[0] // ...................................*.......................................... - mls v10.8H, v22.8H, v7.H[0] // ....................................*......................................... - mul v23.8H, v8.8H, v0.H[2] // .....................................*........................................ - sqrdmulh v22.8H, v8.8H, v0.H[3] // ......................................*....................................... - mls v21.8H, v19.8H, v7.H[0] // .......................................*...................................... - sub v26.8H, v11.8H, v5.8H // ........................................*..................................... - add v18.8H, v2.8H, v3.8H // .........................................*.................................... - mls v23.8H, v22.8H, v7.H[0] // ..........................................*................................... - mul v6.8H, v26.8H, v0.H[2] // ...........................................*.................................. - sqrdmulh v31.8H, v26.8H, v0.H[3] // ............................................*................................. - sqrdmulh v15.8H, v18.8H, v30.8H // .............................................*................................ - sub v14.8H, v23.8H, v9.8H // ..............................................*............................... - add v5.8H, v23.8H, v9.8H // ...............................................*.............................. - mls v6.8H, v31.8H, v7.H[0] // ................................................*............................. - mul v18.8H, v18.8H, v29.8H // .................................................*............................ - mul v9.8H, v24.8H, v0.H[0] // ..................................................*........................... - str q10, [x0, #64] // ...................................................*.......................... - sub v24.8H, v6.8H, v21.8H // ....................................................*......................... - mls v18.8H, v15.8H, v7.H[0] // .....................................................*........................ - mls v9.8H, v28.8H, v7.H[0] // ......................................................*....................... - sqrdmulh v2.8H, v24.8H, v0.H[1] // .......................................................*...................... - mul v24.8H, v24.8H, v0.H[0] // ........................................................*..................... - str q18, [x0], #(16) // .........................................................*.................... - add v20.8H, v6.8H, v21.8H // ..........................................................*................... - mul v22.8H, v14.8H, v0.H[0] // ...........................................................*.................. - mls v24.8H, v2.8H, v7.H[0] // ............................................................*................. - sqrdmulh v2.8H, v20.8H, v30.8H // .............................................................*................ - mul v26.8H, v20.8H, v29.8H // ..............................................................*............... - mls v27.8H, v17.8H, v7.H[0] // ...............................................................*.............. - str q24, [x0, #432] // ................................................................*............. - sqrdmulh v23.8H, v14.8H, v0.H[1] // .................................................................*............ - mls v26.8H, v2.8H, v7.H[0] // ..................................................................*........... - str q27, [x0, #240] // ...................................................................*.......... - sqrdmulh v10.8H, v5.8H, v30.8H // ....................................................................*......... - mul v19.8H, v5.8H, v29.8H // .....................................................................*........ - str q26, [x0, #176] // ......................................................................*....... - mls v22.8H, v23.8H, v7.H[0] // .......................................................................*...... - str q9, [x0, #304] // ........................................................................*..... - mls v19.8H, v10.8H, v7.H[0] // .........................................................................*.... - str q22, [x0, #368] // ...........................................................................*.. - str q19, [x0, #112] // .............................................................................* + // |------------------------|------------------------|------------------------|-------------- + mul v14.8H, v15.8H, v29.8H // *......................................................................................... + sub v9.8H, v23.8H, v17.8H // *......................................................................................... + sub v27.8H, v21.8H, v22.8H // .*........................................................................................ + mls v11.8H, v20.8H, v7.H[0] // ..*....................................................................................... + sub v2.8H, v6.8H, v2.8H // ..*....................................................................................... + sqrdmulh v20.8H, v25.8H, v1.H[5] // ....*..................................................................................... + mul v4.8H, v25.8H, v1.H[4] // ......*................................................................................... + sqrdmulh v3.8H, v15.8H, v30.8H // ........*................................................................................. + sub v15.8H, v5.8H, v10.8H // ........*................................................................................. + mul v6.8H, v27.8H, v0.H[6] // ..........*............................................................................... + sqrdmulh v13.8H, v2.8H, v0.H[5] // ............*............................................................................. + mls v14.8H, v3.8H, v7.H[0] // ..............*........................................................................... + mul v28.8H, v2.8H, v0.H[4] // ................*......................................................................... + mls v28.8H, v13.8H, v7.H[0] // ..................*....................................................................... + str q14, [x0], #(16) // ...................*...................................................................... + sqrdmulh v18.8H, v27.8H, v0.H[7] // ....................*..................................................................... + sqrdmulh v31.8H, v15.8H, v1.H[3] // ......................*................................................................... + sub v13.8H, v24.8H, v28.8H // .......................*.................................................................. + add v10.8H, v24.8H, v28.8H // ........................*................................................................. + mul v28.8H, v9.8H, v0.H[0] // ........................*................................................................. + sqrdmulh v12.8H, v13.8H, v0.H[1] // ..........................*............................................................... + mul v23.8H, v15.8H, v1.H[2] // ............................*............................................................. + mul v27.8H, v13.8H, v0.H[0] // ..............................*........................................................... + mls v4.8H, v20.8H, v7.H[0] // ................................*......................................................... + mls v23.8H, v31.8H, v7.H[0] // ..................................*....................................................... + mls v6.8H, v18.8H, v7.H[0] // ....................................*..................................................... + mul v21.8H, v10.8H, v29.8H // ......................................*................................................... + sub v13.8H, v23.8H, v4.8H // .......................................*.................................................. + sqrdmulh v3.8H, v9.8H, v0.H[1] // ........................................*................................................. + add v31.8H, v23.8H, v4.8H // ........................................*................................................. + add v25.8H, v6.8H, v11.8H // .........................................*................................................ + sub v17.8H, v6.8H, v11.8H // ..........................................*............................................... + sqrdmulh v10.8H, v10.8H, v30.8H // ..........................................*............................................... + sub v2.8H, v25.8H, v31.8H // ...........................................*.............................................. + add v6.8H, v25.8H, v31.8H // ............................................*............................................. + mul v31.8H, v17.8H, v0.H[2] // ............................................*............................................. + mul v24.8H, v2.8H, v0.H[0] // ..............................................*........................................... + mls v27.8H, v12.8H, v7.H[0] // ................................................*......................................... + sqrdmulh v5.8H, v17.8H, v0.H[3] // ..................................................*....................................... + sqrdmulh v26.8H, v13.8H, v0.H[5] // ....................................................*..................................... + sqrdmulh v11.8H, v2.8H, v0.H[1] // ......................................................*................................... + str q27, [x0, #368] // ......................................................*................................... + mls v31.8H, v5.8H, v7.H[0] // ........................................................*................................. + mul v8.8H, v13.8H, v0.H[4] // ..........................................................*............................... + mls v8.8H, v26.8H, v7.H[0] // ............................................................*............................. + mls v21.8H, v10.8H, v7.H[0] // ..............................................................*........................... + mls v24.8H, v11.8H, v7.H[0] // ................................................................*......................... + sub v19.8H, v31.8H, v8.8H // .................................................................*........................ + add v22.8H, v31.8H, v8.8H // ..................................................................*....................... + mls v28.8H, v3.8H, v7.H[0] // ..................................................................*....................... + sqrdmulh v25.8H, v22.8H, v30.8H // ....................................................................*..................... + sqrdmulh v13.8H, v19.8H, v0.H[1] // ......................................................................*................... + str q28, [x0, #240] // .......................................................................*.................. + str q21, [x0, #112] // ........................................................................*................. + mul v28.8H, v19.8H, v0.H[0] // ........................................................................*................. + sqrdmulh v10.8H, v6.8H, v30.8H // ..........................................................................*............... + str q24, [x0, #304] // ............................................................................*............. + mls v28.8H, v13.8H, v7.H[0] // ............................................................................*............. + mul v4.8H, v22.8H, v29.8H // ..............................................................................*........... + mul v21.8H, v6.8H, v29.8H // ................................................................................*......... + str q28, [x0, #432] // .................................................................................*........ + mls v21.8H, v10.8H, v7.H[0] // ..................................................................................*....... + mls v4.8H, v25.8H, v7.H[0] // ....................................................................................*..... + str q21, [x0, #48] // .......................................................................................*.. + str q4, [x0, #176] // .........................................................................................* - // ----------------------------- cycle (expected) ------------------------------> + // ----------------------------------- cycle (expected) ------------------------------------> // 0 25 50 75 - // |------------------------|------------------------|------------------------|-- - // sub v26.8H, v2.8H, v10.8H // .*............................................................................ - // add v2.8H, v2.8H, v10.8H // .....................*........................................................ - // sub v22.8H, v22.8H, v17.8H // ..*........................................................................... - // sqrdmulh v10.8H, v26.8H, v0.H[7] // .........*.................................................................... - // mul v26.8H, v26.8H, v0.H[6] // ........*..................................................................... - // sub v17.8H, v2.8H, v23.8H // ...............................*.............................................. - // add v2.8H, v2.8H, v23.8H // .........................*.................................................... - // sqrdmulh v23.8H, v22.8H, v1.H[1] // .....*........................................................................ - // mul v22.8H, v22.8H, v1.H[0] // ......*....................................................................... - // mls v26.8H, v10.8H, v7.H[0] // .............*................................................................ - // sub v10.8H, v24.8H, v6.8H // .......*...................................................................... - // sqrdmulh v24.8H, v17.8H, v0.H[3] // ......................................*....................................... - // mul v17.8H, v17.8H, v0.H[2] // .....................................*........................................ - // sub v6.8H, v2.8H, v3.8H // .............................*................................................ - // add v2.8H, v2.8H, v3.8H // .........................................*.................................... - // mls v22.8H, v23.8H, v7.H[0] // ................*............................................................. - // sqrdmulh v23.8H, v10.8H, v1.H[3] // ...........*.................................................................. - // mul v10.8H, v10.8H, v1.H[2] // ..........*................................................................... - // sub v9.8H, v9.8H, v5.8H // *............................................................................. - // sub v5.8H, v26.8H, v22.8H // ........................................*..................................... - // add v26.8H, v26.8H, v22.8H // ....................*......................................................... - // mls v10.8H, v23.8H, v7.H[0] // ...............*.............................................................. - // sqrdmulh v22.8H, v9.8H, v1.H[5] // ....*......................................................................... - // mls v17.8H, v24.8H, v7.H[0] // ..........................................*................................... - // mul v23.8H, v9.8H, v1.H[4] // ...*.......................................................................... - // sqrdmulh v24.8H, v5.8H, v0.H[3] // ............................................*................................. - // mul v9.8H, v5.8H, v0.H[2] // ...........................................*.................................. - // sqrdmulh v5.8H, v6.8H, v0.H[1] // ................................*............................................. - // mul v6.8H, v6.8H, v0.H[0] // ...................................*.......................................... - // sqrdmulh v3.8H, v2.8H, v30.8H // .............................................*................................ - // mul v2.8H, v2.8H, v29.8H // .................................................*............................ - // mls v23.8H, v22.8H, v7.H[0] // ..............*............................................................... - // mls v9.8H, v24.8H, v7.H[0] // ................................................*............................. - // sub v22.8H, v28.8H, v21.8H // ............*................................................................. - // mls v6.8H, v5.8H, v7.H[0] // ...............................................................*.............. - // sub v24.8H, v10.8H, v23.8H // ..............................*............................................... - // sqrdmulh v5.8H, v22.8H, v0.H[5] // .................*............................................................ - // mul v22.8H, v22.8H, v0.H[4] // ..................*........................................................... - // add v10.8H, v10.8H, v23.8H // ...................*.......................................................... - // sqrdmulh v23.8H, v24.8H, v0.H[5] // ..................................*........................................... - // mul v24.8H, v24.8H, v0.H[4] // .................................*............................................ - // sub v28.8H, v26.8H, v10.8H // .......................*...................................................... - // add v26.8H, v26.8H, v10.8H // ........................*..................................................... - // mls v22.8H, v5.8H, v7.H[0] // ......................*....................................................... - // mls v24.8H, v23.8H, v7.H[0] // .......................................*...................................... - // sqrdmulh v10.8H, v28.8H, v0.H[1] // ..........................*................................................... - // mul v23.8H, v28.8H, v0.H[0] // ..................................................*........................... - // sub v5.8H, v17.8H, v22.8H // ..............................................*............................... - // add v22.8H, v17.8H, v22.8H // ...............................................*.............................. - // sub v17.8H, v9.8H, v24.8H // ....................................................*......................... - // mls v23.8H, v10.8H, v7.H[0] // ......................................................*....................... - // sqrdmulh v10.8H, v5.8H, v0.H[1] // .................................................................*............ - // mul v5.8H, v5.8H, v0.H[0] // ...........................................................*.................. - // add v24.8H, v9.8H, v24.8H // ..........................................................*................... - // sqrdmulh v9.8H, v17.8H, v0.H[1] // .......................................................*...................... - // mul v17.8H, v17.8H, v0.H[0] // ........................................................*..................... - // mls v5.8H, v10.8H, v7.H[0] // .......................................................................*...... - // str q6, [x0, #256] // ...................................................................*.......... - // mls v2.8H, v3.8H, v7.H[0] // .....................................................*........................ - // mls v17.8H, v9.8H, v7.H[0] // ............................................................*................. - // str q23, [x0, #320] // ........................................................................*..... - // sqrdmulh v10.8H, v26.8H, v30.8H // ............................*................................................. - // str q5, [x0, #384] // ...........................................................................*.. - // mul v26.8H, v26.8H, v29.8H // ...........................*.................................................. - // str q17, [x0, #448] // ................................................................*............. - // sqrdmulh v17.8H, v22.8H, v30.8H // ....................................................................*......... - // mul v22.8H, v22.8H, v29.8H // .....................................................................*........ - // mls v26.8H, v10.8H, v7.H[0] // ....................................*......................................... - // sqrdmulh v10.8H, v24.8H, v30.8H // .............................................................*................ - // mul v23.8H, v24.8H, v29.8H // ..............................................................*............... - // mls v22.8H, v17.8H, v7.H[0] // .........................................................................*.... - // str q2, [x0], #(16) // .........................................................*.................... - // mls v23.8H, v10.8H, v7.H[0] // ..................................................................*........... - // str q26, [x0, #48] // ...................................................*.......................... - // str q22, [x0, #112] // .............................................................................* - // str q23, [x0, #176] // ......................................................................*....... + // |------------------------|------------------------|------------------------|-------------- + // sub v9.8H, v21.8H, v22.8H // .*........................................................................................ + // sqrdmulh v13.8H, v15.8H, v30.8H // ........*................................................................................. + // mls v11.8H, v20.8H, v7.H[0] // ..*....................................................................................... + // mul v14.8H, v25.8H, v1.H[4] // ......*................................................................................... + // mul v26.8H, v15.8H, v29.8H // *......................................................................................... + // sub v15.8H, v6.8H, v2.8H // ..*....................................................................................... + // sqrdmulh v4.8H, v9.8H, v0.H[7] // ....................*..................................................................... + // mul v16.8H, v9.8H, v0.H[6] // ..........*............................................................................... + // sqrdmulh v21.8H, v25.8H, v1.H[5] // ....*..................................................................................... + // mls v16.8H, v4.8H, v7.H[0] // ....................................*..................................................... + // mls v26.8H, v13.8H, v7.H[0] // ..............*........................................................................... + // mls v14.8H, v21.8H, v7.H[0] // ................................*......................................................... + // sub v2.8H, v16.8H, v11.8H // ..........................................*............................................... + // sqrdmulh v20.8H, v15.8H, v0.H[5] // ............*............................................................................. + // add v4.8H, v16.8H, v11.8H // .........................................*................................................ + // str q26, [x0], #(16) // ...................*...................................................................... + // sub v13.8H, v5.8H, v10.8H // ........*................................................................................. + // sqrdmulh v26.8H, v2.8H, v0.H[3] // ..................................................*....................................... + // mul v9.8H, v2.8H, v0.H[2] // ............................................*............................................. + // mul v3.8H, v13.8H, v1.H[2] // ............................*............................................................. + // sqrdmulh v10.8H, v13.8H, v1.H[3] // ......................*................................................................... + // mls v9.8H, v26.8H, v7.H[0] // ........................................................*................................. + // sub v26.8H, v23.8H, v17.8H // *......................................................................................... + // mul v13.8H, v15.8H, v0.H[4] // ................*......................................................................... + // mls v3.8H, v10.8H, v7.H[0] // ..................................*....................................................... + // sqrdmulh v8.8H, v26.8H, v0.H[1] // ........................................*................................................. + // mls v13.8H, v20.8H, v7.H[0] // ..................*....................................................................... + // add v31.8H, v3.8H, v14.8H // ........................................*................................................. + // sub v15.8H, v3.8H, v14.8H // .......................................*.................................................. + // mul v3.8H, v26.8H, v0.H[0] // ........................*................................................................. + // sub v21.8H, v4.8H, v31.8H // ...........................................*.............................................. + // add v16.8H, v4.8H, v31.8H // ............................................*............................................. + // mls v3.8H, v8.8H, v7.H[0] // ..................................................................*....................... + // sub v6.8H, v24.8H, v13.8H // .......................*.................................................................. + // sqrdmulh v4.8H, v15.8H, v0.H[5] // ....................................................*..................................... + // mul v18.8H, v15.8H, v0.H[4] // ..........................................................*............................... + // add v28.8H, v24.8H, v13.8H // ........................*................................................................. + // str q3, [x0, #240] // .......................................................................*.................. + // sqrdmulh v26.8H, v21.8H, v0.H[1] // ......................................................*................................... + // mls v18.8H, v4.8H, v7.H[0] // ............................................................*............................. + // sqrdmulh v14.8H, v16.8H, v30.8H // ..........................................................................*............... + // sqrdmulh v8.8H, v6.8H, v0.H[1] // ..........................*............................................................... + // sub v4.8H, v9.8H, v18.8H // .................................................................*........................ + // add v15.8H, v9.8H, v18.8H // ..................................................................*....................... + // mul v25.8H, v6.8H, v0.H[0] // ..............................*........................................................... + // mul v13.8H, v21.8H, v0.H[0] // ..............................................*........................................... + // sqrdmulh v23.8H, v28.8H, v30.8H // ..........................................*............................................... + // mls v13.8H, v26.8H, v7.H[0] // ................................................................*......................... + // mls v25.8H, v8.8H, v7.H[0] // ................................................*......................................... + // mul v26.8H, v28.8H, v29.8H // ......................................*................................................... + // str q13, [x0, #304] // ............................................................................*............. + // mul v13.8H, v16.8H, v29.8H // ................................................................................*......... + // str q25, [x0, #368] // ......................................................*................................... + // mls v13.8H, v14.8H, v7.H[0] // ..................................................................................*....... + // mls v26.8H, v23.8H, v7.H[0] // ..............................................................*........................... + // sqrdmulh v23.8H, v4.8H, v0.H[1] // ......................................................................*................... + // str q13, [x0, #48] // .......................................................................................*.. + // sqrdmulh v28.8H, v15.8H, v30.8H // ....................................................................*..................... + // str q26, [x0, #112] // ........................................................................*................. + // mul v11.8H, v4.8H, v0.H[0] // ........................................................................*................. + // mls v11.8H, v23.8H, v7.H[0] // ............................................................................*............. + // mul v14.8H, v15.8H, v29.8H // ..............................................................................*........... + // mls v14.8H, v28.8H, v7.H[0] // ....................................................................................*..... + // str q11, [x0, #432] // .................................................................................*........ + // str q14, [x0, #176] // .........................................................................................* pop_stack diff --git a/mlkem/asm/aarch64/ntt_opt.S b/mlkem/asm/aarch64/ntt_opt.S index e3791acd4..9fc51e45f 100644 --- a/mlkem/asm/aarch64/ntt_opt.S +++ b/mlkem/asm/aarch64/ntt_opt.S @@ -204,718 +204,718 @@ _ntt_asm_opt: load_roots_123 .p2align 2 - // 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 q21, [x0, #0] // *............................. - ldr q8, [x0, #64] // ..*........................... - ldr q5, [x0, #128] // ....*......................... - ldr q4, [x0, #192] // ......*....................... - ldr q15, [x0, #256] // ........*..................... - ldr q6, [x0, #448] // ..........*................... - mul v25.8H, v15.8H, v0.H[0] // ............*................. - ldr q30, [x0, #320] // .............*................ - mul v11.8H, v6.8H, v0.H[0] // ...............*.............. - ldr q17, [x0, #384] // ................*............. - - // ------ cycle (expected) ------> - // 0 25 - // |------------------------|----- - // ldr q21, [x0, #0] // *.............................. - // ldr q8, [x0, #64] // ..*............................ - // ldr q5, [x0, #128] // ....*.......................... - // ldr q4, [x0, #192] // ......*........................ - // ldr q15, [x0, #256] // ........*...................... - // ldr q30, [x0, #320] // .............*................. - // mul v25.8H, v15.8H, v0.H[0] // ............*.................. - // ldr q6, [x0, #448] // ..........*.................... - // ldr q17, [x0, #384] // ................*.............. - // mul v11.8H, v6.8H, v0.H[0] // ...............*............... - - sub count, count, #1 -layer123_start: - // Instructions: 76 - // Expected cycles: 84 - // Expected IPC: 0.90 - // - // Cycle bound: 84.0 - // IPC bound: 0.90 - // - // Wall time: 2.33s - // User time: 2.33s - // - // -------------------------------- cycle (expected) ---------------------------------> - // 0 25 50 75 - // |------------------------|------------------------|------------------------|-------- - sqrdmulh v13.8H, v15.8H, v0.H[1] // *................................................................................... - sqrdmulh v15.8H, v30.8H, v0.H[1] // .*.................................................................................. - mul v30.8H, v30.8H, v0.H[0] // ..*................................................................................. - sqrdmulh v3.8H, v17.8H, v0.H[1] // ...*................................................................................ - mls v25.8H, v13.8H, v7.H[0] // ....*............................................................................... - mul v13.8H, v17.8H, v0.H[0] // .....*.............................................................................. - mls v30.8H, v15.8H, v7.H[0] // ......*............................................................................. - sqrdmulh v15.8H, v6.8H, v0.H[1] // .......*............................................................................ - sub v6.8H, v21.8H, v25.8H // ........*........................................................................... - mls v13.8H, v3.8H, v7.H[0] // .........*.......................................................................... - sub v3.8H, v8.8H, v30.8H // ..........*......................................................................... - add v30.8H, v8.8H, v30.8H // ...........*........................................................................ - add v25.8H, v21.8H, v25.8H // ............*....................................................................... - sub v17.8H, v5.8H, v13.8H // .............*...................................................................... - add v13.8H, v5.8H, v13.8H // ..............*..................................................................... - mls v11.8H, v15.8H, v7.H[0] // ...............*.................................................................... - sqrdmulh v15.8H, v17.8H, v0.H[5] // ................*................................................................... - mul v17.8H, v17.8H, v0.H[4] // .................*.................................................................. - sqrdmulh v21.8H, v13.8H, v0.H[3] // ..................*................................................................. - sub v8.8H, v4.8H, v11.8H // ...................*................................................................ - add v11.8H, v4.8H, v11.8H // ....................*............................................................... - mls v17.8H, v15.8H, v7.H[0] // .....................*.............................................................. - sqrdmulh v15.8H, v8.8H, v0.H[5] // ......................*............................................................. - mul v8.8H, v8.8H, v0.H[4] // .......................*............................................................ - mul v13.8H, v13.8H, v0.H[2] // ........................*........................................................... - sub v5.8H, v6.8H, v17.8H // .........................*.......................................................... - add v6.8H, v6.8H, v17.8H // ..........................*......................................................... - mls v8.8H, v15.8H, v7.H[0] // ...........................*........................................................ - sqrdmulh v15.8H, v11.8H, v0.H[3] // ............................*....................................................... - mul v17.8H, v11.8H, v0.H[2] // .............................*...................................................... - mls v13.8H, v21.8H, v7.H[0] // ..............................*..................................................... - sub v11.8H, v3.8H, v8.8H // ...............................*.................................................... - add v3.8H, v3.8H, v8.8H // ................................*................................................... - mls v17.8H, v15.8H, v7.H[0] // .................................*.................................................. - sub v15.8H, v25.8H, v13.8H // ..................................*................................................. - add v13.8H, v25.8H, v13.8H // ...................................*................................................ - sqrdmulh v25.8H, v3.8H, v1.H[3] // ....................................*............................................... - sub v21.8H, v30.8H, v17.8H // .....................................*.............................................. - add v30.8H, v30.8H, v17.8H // ......................................*............................................. - mul v3.8H, v3.8H, v1.H[2] // .......................................*............................................ - sqrdmulh v17.8H, v21.8H, v1.H[1] // ........................................*........................................... - sqrdmulh v8.8H, v30.8H, v0.H[7] // .........................................*.......................................... - mul v30.8H, v30.8H, v0.H[6] // ..........................................*......................................... - mul v21.8H, v21.8H, v1.H[0] // ...........................................*........................................ - mls v3.8H, v25.8H, v7.H[0] // ............................................*....................................... - sqrdmulh v25.8H, v11.8H, v1.H[5] // .............................................*...................................... - mls v30.8H, v8.8H, v7.H[0] // ..............................................*..................................... - mls v21.8H, v17.8H, v7.H[0] // ...............................................*.................................... - sub v17.8H, v6.8H, v3.8H // ................................................*................................... - add v3.8H, v6.8H, v3.8H // .................................................*.................................. - sub v6.8H, v13.8H, v30.8H // ..................................................*................................. - mul v11.8H, v11.8H, v1.H[4] // ...................................................*................................ - add v13.8H, v13.8H, v30.8H // ....................................................*............................... - sub v30.8H, v15.8H, v21.8H // .....................................................*.............................. - add v15.8H, v15.8H, v21.8H // ......................................................*............................. - mls v11.8H, v25.8H, v7.H[0] // .......................................................*............................ - str q13, [x0], #(16) // ........................................................*........................... - ldr q21, [x0, #0] // .........................................................e.......................... - sub v13.8H, v5.8H, v11.8H // ...........................................................*........................ - add v25.8H, v5.8H, v11.8H // ............................................................*....................... - str q6, [x0, #48] // .............................................................*...................... - ldr q8, [x0, #64] // ..............................................................e..................... - str q15, [x0, #112] // ................................................................*................... - ldr q5, [x0, #128] // .................................................................e.................. - str q30, [x0, #176] // ...................................................................*................ - ldr q4, [x0, #192] // ....................................................................e............... - str q3, [x0, #240] // ......................................................................*............. - ldr q15, [x0, #256] // .......................................................................e............ - str q17, [x0, #304] // .........................................................................*.......... - ldr q30, [x0, #320] // ..........................................................................e......... - str q25, [x0, #368] // ............................................................................*....... - mul v25.8H, v15.8H, v0.H[0] // .............................................................................e...... - str q13, [x0, #432] // ..............................................................................*..... - ldr q6, [x0, #448] // ...............................................................................e.... - ldr q17, [x0, #384] // .................................................................................e.. - mul v11.8H, v6.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))] // .....................~.....'.............................................................................* - - sub count, count, #1 - cbnz count, layer123_start - // Instructions: 66 + // Instructions: 53 // Expected cycles: 67 - // Expected IPC: 0.99 + // Expected IPC: 0.79 // // Cycle bound: 67.0 - // IPC bound: 0.99 + // IPC bound: 0.79 // - // Wall time: 7.16s - // User time: 7.16s + // Wall time: 1.34s + // User time: 1.34s // // ------------------------ cycle (expected) ------------------------> // 0 25 50 // |------------------------|------------------------|---------------- - sqrdmulh v26.8H, v6.8H, v0.H[1] // *.................................................................. - mul v10.8H, v17.8H, v0.H[0] // .*................................................................. - sqrdmulh v9.8H, v17.8H, v0.H[1] // ..*................................................................ - mul v6.8H, v30.8H, v0.H[0] // ...*............................................................... - mls v11.8H, v26.8H, v7.H[0] // ....*.............................................................. - sqrdmulh v3.8H, v30.8H, v0.H[1] // .....*............................................................. - mls v10.8H, v9.8H, v7.H[0] // ......*............................................................ - sqrdmulh v24.8H, v15.8H, v0.H[1] // .......*........................................................... - add v12.8H, v4.8H, v11.8H // ........*.......................................................... - mls v6.8H, v3.8H, v7.H[0] // .........*......................................................... - sub v22.8H, v5.8H, v10.8H // ..........*........................................................ - sqrdmulh v30.8H, v12.8H, v0.H[3] // ...........*....................................................... - mul v15.8H, v12.8H, v0.H[2] // ............*...................................................... - mul v17.8H, v22.8H, v0.H[4] // .............*..................................................... - sqrdmulh v3.8H, v22.8H, v0.H[5] // ..............*.................................................... - mls v25.8H, v24.8H, v7.H[0] // ...............*................................................... - mls v15.8H, v30.8H, v7.H[0] // ................*.................................................. - add v26.8H, v8.8H, v6.8H // .................*................................................. - mls v17.8H, v3.8H, v7.H[0] // ..................*................................................ - sub v28.8H, v21.8H, v25.8H // ...................*............................................... - add v27.8H, v5.8H, v10.8H // ....................*.............................................. - sub v13.8H, v26.8H, v15.8H // .....................*............................................. - add v5.8H, v28.8H, v17.8H // ......................*............................................ - sub v14.8H, v28.8H, v17.8H // .......................*........................................... - mul v3.8H, v13.8H, v1.H[0] // ........................*.......................................... - sqrdmulh v28.8H, v27.8H, v0.H[3] // .........................*......................................... - mul v9.8H, v27.8H, v0.H[2] // ..........................*........................................ - sqrdmulh v30.8H, v13.8H, v1.H[1] // ...........................*....................................... - sub v13.8H, v4.8H, v11.8H // ............................*...................................... - add v31.8H, v21.8H, v25.8H // .............................*..................................... - mls v9.8H, v28.8H, v7.H[0] // ..............................*.................................... - sqrdmulh v28.8H, v13.8H, v0.H[5] // ...............................*................................... - mul v17.8H, v13.8H, v0.H[4] // ................................*.................................. - mls v3.8H, v30.8H, v7.H[0] // .................................*................................. - sub v24.8H, v31.8H, v9.8H // ..................................*................................ - sub v25.8H, v8.8H, v6.8H // ...................................*............................... - mls v17.8H, v28.8H, v7.H[0] // ....................................*.............................. - sub v30.8H, v24.8H, v3.8H // .....................................*............................. - add v13.8H, v24.8H, v3.8H // ......................................*............................ - add v3.8H, v26.8H, v15.8H // .......................................*........................... - str q30, [x0, #192] // ........................................*.......................... - add v30.8H, v25.8H, v17.8H // .........................................*......................... - str q13, [x0, #128] // ..........................................*........................ - sub v17.8H, v25.8H, v17.8H // ...........................................*....................... - sqrdmulh v8.8H, v30.8H, v1.H[3] // ............................................*...................... - mul v11.8H, v30.8H, v1.H[2] // .............................................*..................... - add v24.8H, v31.8H, v9.8H // ..............................................*.................... - sqrdmulh v15.8H, v17.8H, v1.H[5] // ...............................................*................... - mul v17.8H, v17.8H, v1.H[4] // ................................................*.................. - mls v11.8H, v8.8H, v7.H[0] // .................................................*................. - sqrdmulh v13.8H, v3.8H, v0.H[7] // ..................................................*................ - mul v30.8H, v3.8H, v0.H[6] // ...................................................*............... - mls v17.8H, v15.8H, v7.H[0] // ....................................................*.............. - add v22.8H, v5.8H, v11.8H // .....................................................*............. - sub v3.8H, v5.8H, v11.8H // ......................................................*............ - mls v30.8H, v13.8H, v7.H[0] // .......................................................*........... - str q22, [x0, #256] // ........................................................*.......... - add v13.8H, v14.8H, v17.8H // .........................................................*......... - str q3, [x0, #320] // ..........................................................*........ - sub v15.8H, v14.8H, v17.8H // ...........................................................*....... - str q13, [x0, #384] // ............................................................*...... - add v2.8H, v24.8H, v30.8H // .............................................................*..... - str q15, [x0, #448] // ..............................................................*.... - sub v3.8H, v24.8H, v30.8H // ...............................................................*... - str q2, [x0], #(16) // ................................................................*.. - str q3, [x0, #48] // ..................................................................* + ldr q6, [x0, #256] // *.................................................................. + ldr q23, [x0, #64] // *.................................................................. + ldr q3, [x0, #320] // .*................................................................. + ldr q31, [x0, #448] // ..*................................................................ + ldr q22, [x0, #384] // ..*................................................................ + sqrdmulh v27.8H, v6.8H, v0.H[1] // ....*.............................................................. + mul v13.8H, v22.8H, v0.H[0] // ......*............................................................ + sqrdmulh v12.8H, v31.8H, v0.H[1] // ........*.......................................................... + sqrdmulh v21.8H, v3.8H, v0.H[1] // ..........*........................................................ + ldr q10, [x0, #128] // ..........*........................................................ + sqrdmulh v28.8H, v22.8H, v0.H[1] // ............*...................................................... + mul v24.8H, v3.8H, v0.H[0] // ..............*.................................................... + mul v11.8H, v6.8H, v0.H[0] // ................*.................................................. + mls v13.8H, v28.8H, v7.H[0] // ..................*................................................ + mls v11.8H, v27.8H, v7.H[0] // ....................*.............................................. + ldr q27, [x0, #0] // .....................*............................................. + mul v6.8H, v31.8H, v0.H[0] // ......................*............................................ + sub v31.8H, v10.8H, v13.8H // .......................*........................................... + mls v6.8H, v12.8H, v7.H[0] // ........................*.......................................... + ldr q15, [x0, #192] // ........................*.......................................... + add v12.8H, v10.8H, v13.8H // .........................*......................................... + mul v13.8H, v31.8H, v0.H[4] // ..........................*........................................ + add v19.8H, v27.8H, v11.8H // ..........................*........................................ + sub v10.8H, v27.8H, v11.8H // ...........................*....................................... + mls v24.8H, v21.8H, v7.H[0] // ............................*...................................... + sub v3.8H, v15.8H, v6.8H // .............................*..................................... + add v20.8H, v15.8H, v6.8H // ..............................*.................................... + sqrdmulh v6.8H, v12.8H, v0.H[3] // ..............................*.................................... + sqrdmulh v21.8H, v3.8H, v0.H[5] // ................................*.................................. + sqrdmulh v5.8H, v20.8H, v0.H[3] // ..................................*................................ + mul v25.8H, v3.8H, v0.H[4] // ....................................*.............................. + mls v25.8H, v21.8H, v7.H[0] // ......................................*............................ + mul v21.8H, v20.8H, v0.H[2] // ........................................*.......................... + add v3.8H, v23.8H, v24.8H // ........................................*.......................... + mls v21.8H, v5.8H, v7.H[0] // ..........................................*........................ + sub v15.8H, v23.8H, v24.8H // ..........................................*........................ + mul v9.8H, v12.8H, v0.H[2] // ............................................*...................... + sub v5.8H, v15.8H, v25.8H // ............................................*...................... + add v30.8H, v15.8H, v25.8H // .............................................*..................... + mul v8.8H, v5.8H, v1.H[4] // ..............................................*.................... + add v12.8H, v3.8H, v21.8H // ...............................................*................... + sqrdmulh v15.8H, v5.8H, v1.H[5] // ................................................*.................. + sub v5.8H, v3.8H, v21.8H // ................................................*.................. + sqrdmulh v3.8H, v30.8H, v1.H[3] // ..................................................*................ + sqrdmulh v21.8H, v31.8H, v0.H[5] // ....................................................*.............. + mul v31.8H, v30.8H, v1.H[2] // ......................................................*............ + mls v31.8H, v3.8H, v7.H[0] // ........................................................*.......... + sqrdmulh v23.8H, v12.8H, v0.H[7] // ..........................................................*........ + mls v9.8H, v6.8H, v7.H[0] // ............................................................*...... + mls v13.8H, v21.8H, v7.H[0] // ..............................................................*.... + mul v21.8H, v12.8H, v0.H[6] // ................................................................*.. + add v25.8H, v19.8H, v9.8H // .................................................................*. + mls v21.8H, v23.8H, v7.H[0] // ..................................................................* // ------------------------ cycle (expected) ------------------------> // 0 25 50 // |------------------------|------------------------|---------------- - // sqrdmulh v13.8H, v15.8H, v0.H[1] // .......*........................................................... - // sqrdmulh v15.8H, v30.8H, v0.H[1] // .....*............................................................. - // mul v30.8H, v30.8H, v0.H[0] // ...*............................................................... - // sqrdmulh v3.8H, v17.8H, v0.H[1] // ..*................................................................ - // mls v25.8H, v13.8H, v7.H[0] // ...............*................................................... - // mul v13.8H, v17.8H, v0.H[0] // .*................................................................. - // mls v30.8H, v15.8H, v7.H[0] // .........*......................................................... - // sqrdmulh v15.8H, v6.8H, v0.H[1] // *.................................................................. - // sub v6.8H, v21.8H, v25.8H // ...................*............................................... - // mls v13.8H, v3.8H, v7.H[0] // ......*............................................................ - // sub v3.8H, v8.8H, v30.8H // ...................................*............................... - // add v30.8H, v8.8H, v30.8H // .................*................................................. - // add v25.8H, v21.8H, v25.8H // .............................*..................................... - // sub v17.8H, v5.8H, v13.8H // ..........*........................................................ - // add v13.8H, v5.8H, v13.8H // ....................*.............................................. - // mls v11.8H, v15.8H, v7.H[0] // ....*.............................................................. - // sqrdmulh v15.8H, v17.8H, v0.H[5] // ..............*.................................................... - // mul v17.8H, v17.8H, v0.H[4] // .............*..................................................... - // sqrdmulh v21.8H, v13.8H, v0.H[3] // .........................*......................................... - // sub v8.8H, v4.8H, v11.8H // ............................*...................................... - // add v11.8H, v4.8H, v11.8H // ........*.......................................................... - // mls v17.8H, v15.8H, v7.H[0] // ..................*................................................ - // sqrdmulh v15.8H, v8.8H, v0.H[5] // ...............................*................................... - // mul v8.8H, v8.8H, v0.H[4] // ................................*.................................. - // mul v13.8H, v13.8H, v0.H[2] // ..........................*........................................ - // sub v5.8H, v6.8H, v17.8H // .......................*........................................... - // add v6.8H, v6.8H, v17.8H // ......................*............................................ - // mls v8.8H, v15.8H, v7.H[0] // ....................................*.............................. - // sqrdmulh v15.8H, v11.8H, v0.H[3] // ...........*....................................................... - // mul v17.8H, v11.8H, v0.H[2] // ............*...................................................... - // mls v13.8H, v21.8H, v7.H[0] // ..............................*.................................... - // sub v11.8H, v3.8H, v8.8H // ...........................................*....................... - // add v3.8H, v3.8H, v8.8H // .........................................*......................... - // mls v17.8H, v15.8H, v7.H[0] // ................*.................................................. - // sub v15.8H, v25.8H, v13.8H // ..................................*................................ - // add v13.8H, v25.8H, v13.8H // ..............................................*.................... - // sqrdmulh v25.8H, v3.8H, v1.H[3] // ............................................*...................... - // sub v21.8H, v30.8H, v17.8H // .....................*............................................. - // add v30.8H, v30.8H, v17.8H // .......................................*........................... - // mul v3.8H, v3.8H, v1.H[2] // .............................................*..................... - // sqrdmulh v17.8H, v21.8H, v1.H[1] // ...........................*....................................... - // sqrdmulh v8.8H, v30.8H, v0.H[7] // ..................................................*................ - // mul v30.8H, v30.8H, v0.H[6] // ...................................................*............... - // mul v21.8H, v21.8H, v1.H[0] // ........................*.......................................... - // mls v3.8H, v25.8H, v7.H[0] // .................................................*................. - // sqrdmulh v25.8H, v11.8H, v1.H[5] // ...............................................*................... - // mls v30.8H, v8.8H, v7.H[0] // .......................................................*........... - // mls v21.8H, v17.8H, v7.H[0] // .................................*................................. - // sub v17.8H, v6.8H, v3.8H // ......................................................*............ - // add v3.8H, v6.8H, v3.8H // .....................................................*............. - // sub v6.8H, v13.8H, v30.8H // ...............................................................*... - // mul v11.8H, v11.8H, v1.H[4] // ................................................*.................. - // add v13.8H, v13.8H, v30.8H // .............................................................*..... - // sub v30.8H, v15.8H, v21.8H // .....................................*............................. - // add v15.8H, v15.8H, v21.8H // ......................................*............................ - // mls v11.8H, v25.8H, v7.H[0] // ....................................................*.............. - // str q13, [x0], #(16) // ................................................................*.. - // sub v13.8H, v5.8H, v11.8H // ...........................................................*....... - // add v25.8H, v5.8H, v11.8H // .........................................................*......... - // str q6, [x0, #48] // ..................................................................* - // str q15, [x0, #112] // ..........................................*........................ - // str q30, [x0, #176] // ........................................*.......................... - // str q3, [x0, #240] // ........................................................*.......... - // str q17, [x0, #304] // ..........................................................*........ - // str q25, [x0, #368] // ............................................................*...... - // str q13, [x0, #432] // ..............................................................*.... + // ldr q18, [x0, #448] // ..*................................................................ + // ldr q20, [x0, #256] // *.................................................................. + // ldr q26, [x0, #384] // ..*................................................................ + // ldr q4, [x0, #0] // .....................*............................................. + // sqrdmulh v13.8H, v18.8H, v0.H[1] // ........*.......................................................... + // ldr q17, [x0, #192] // ........................*.......................................... + // mul v23.8H, v18.8H, v0.H[0] // ......................*............................................ + // ldr q30, [x0, #320] // .*................................................................. + // sqrdmulh v25.8H, v26.8H, v0.H[1] // ............*...................................................... + // mls v23.8H, v13.8H, v7.H[0] // ........................*.......................................... + // ldr q22, [x0, #128] // ..........*........................................................ + // sqrdmulh v31.8H, v30.8H, v0.H[1] // ..........*........................................................ + // mul v28.8H, v30.8H, v0.H[0] // ..............*.................................................... + // ldr q14, [x0, #64] // *.................................................................. + // add v16.8H, v17.8H, v23.8H // ..............................*.................................... + // mul v30.8H, v26.8H, v0.H[0] // ......*............................................................ + // sub v13.8H, v17.8H, v23.8H // .............................*..................................... + // sqrdmulh v21.8H, v13.8H, v0.H[5] // ................................*.................................. + // mls v28.8H, v31.8H, v7.H[0] // ............................*...................................... + // mul v23.8H, v13.8H, v0.H[4] // ....................................*.............................. + // mls v23.8H, v21.8H, v7.H[0] // ......................................*............................ + // sub v17.8H, v14.8H, v28.8H // ..........................................*........................ + // mls v30.8H, v25.8H, v7.H[0] // ..................*................................................ + // sqrdmulh v31.8H, v16.8H, v0.H[3] // ..................................*................................ + // sub v3.8H, v17.8H, v23.8H // ............................................*...................... + // add v6.8H, v22.8H, v30.8H // .........................*......................................... + // sqrdmulh v15.8H, v3.8H, v1.H[5] // ................................................*.................. + // mul v8.8H, v3.8H, v1.H[4] // ..............................................*.................... + // sub v3.8H, v22.8H, v30.8H // .......................*........................................... + // add v30.8H, v14.8H, v28.8H // ........................................*.......................... + // add v2.8H, v17.8H, v23.8H // .............................................*..................... + // sqrdmulh v27.8H, v20.8H, v0.H[1] // ....*.............................................................. + // sqrdmulh v12.8H, v6.8H, v0.H[3] // ..............................*.................................... + // mul v29.8H, v20.8H, v0.H[0] // ................*.................................................. + // mls v29.8H, v27.8H, v7.H[0] // ....................*.............................................. + // mul v21.8H, v16.8H, v0.H[2] // ........................................*.......................... + // sqrdmulh v13.8H, v2.8H, v1.H[3] // ..................................................*................ + // sub v10.8H, v4.8H, v29.8H // ...........................*....................................... + // mls v21.8H, v31.8H, v7.H[0] // ..........................................*........................ + // add v19.8H, v4.8H, v29.8H // ..........................*........................................ + // mul v31.8H, v2.8H, v1.H[2] // ......................................................*............ + // mls v31.8H, v13.8H, v7.H[0] // ........................................................*.......... + // sub v5.8H, v30.8H, v21.8H // ................................................*.................. + // add v23.8H, v30.8H, v21.8H // ...............................................*................... + // mul v13.8H, v3.8H, v0.H[4] // ..........................*........................................ + // mul v9.8H, v6.8H, v0.H[2] // ............................................*...................... + // sqrdmulh v28.8H, v23.8H, v0.H[7] // ..........................................................*........ + // sqrdmulh v3.8H, v3.8H, v0.H[5] // ....................................................*.............. + // mls v9.8H, v12.8H, v7.H[0] // ............................................................*...... + // mul v21.8H, v23.8H, v0.H[6] // ................................................................*.. + // mls v13.8H, v3.8H, v7.H[0] // ..............................................................*.... + // mls v21.8H, v28.8H, v7.H[0] // ..................................................................* + // add v25.8H, v19.8H, v9.8H // .................................................................*. + + sub count, count, #1 +layer123_start: + // Instructions: 76 + // Expected cycles: 72 + // Expected IPC: 1.06 + // + // Cycle bound: 72.0 + // IPC bound: 1.06 + // + // Wall time: 57.62s + // User time: 57.62s + // + // -------------------------- cycle (expected) ---------------------------> + // 0 25 50 + // |------------------------|------------------------|--------------------- + ldr q18, [x0, #464] // e....................................................................... + mls v8.8H, v15.8H, v7.H[0] // *....................................................................... + ldr q20, [x0, #272] // .e...................................................................... + add v3.8H, v10.8H, v13.8H // .*...................................................................... + sqrdmulh v2.8H, v5.8H, v1.H[1] // ..*..................................................................... + sub v29.8H, v10.8H, v13.8H // ..*..................................................................... + ldr q26, [x0, #400] // ...e.................................................................... + ldr q4, [x0, #16] // ...e.................................................................... + sqrdmulh v13.8H, v18.8H, v0.H[1] // ....e................................................................... + sub v12.8H, v25.8H, v21.8H // ....*................................................................... + sub v11.8H, v29.8H, v8.8H // .....*.................................................................. + ldr q17, [x0, #208] // .....e.................................................................. + mul v23.8H, v18.8H, v0.H[0] // ......e................................................................. + add v24.8H, v29.8H, v8.8H // ......*................................................................. + sub v8.8H, v3.8H, v31.8H // .......*................................................................ + ldr q30, [x0, #336] // .......e................................................................ + add v29.8H, v25.8H, v21.8H // ........*............................................................... + sqrdmulh v25.8H, v26.8H, v0.H[1] // ........e............................................................... + str q11, [x0, #448] // .........*.............................................................. + str q24, [x0, #384] // .........*.............................................................. + add v24.8H, v3.8H, v31.8H // ..........*............................................................. + mls v23.8H, v13.8H, v7.H[0] // ..........e............................................................. + str q8, [x0, #320] // ...........*............................................................ + ldr q22, [x0, #144] // ...........e............................................................ + sqrdmulh v31.8H, v30.8H, v0.H[1] // ............e........................................................... + str q24, [x0, #256] // ............*........................................................... + str q29, [x0], #(16) // .............*.......................................................... + str q12, [x0, #48] // ..............*......................................................... + mul v28.8H, v30.8H, v0.H[0] // ..............e......................................................... + ldr q14, [x0, #64] // ...............e........................................................ + add v16.8H, v17.8H, v23.8H // ...............e........................................................ + mul v30.8H, v26.8H, v0.H[0] // ................e....................................................... + sub v13.8H, v17.8H, v23.8H // ................e....................................................... + sqrdmulh v21.8H, v13.8H, v0.H[5] // ..................e..................................................... + mls v28.8H, v31.8H, v7.H[0] // ....................e................................................... + mul v23.8H, v13.8H, v0.H[4] // ......................e................................................. + mls v23.8H, v21.8H, v7.H[0] // ........................e............................................... + sub v17.8H, v14.8H, v28.8H // .........................e.............................................. + mls v30.8H, v25.8H, v7.H[0] // ..........................e............................................. + sqrdmulh v31.8H, v16.8H, v0.H[3] // ............................e........................................... + sub v3.8H, v17.8H, v23.8H // .............................e.......................................... + mul v10.8H, v5.8H, v1.H[0] // ..............................*......................................... + add v6.8H, v22.8H, v30.8H // ...............................e........................................ + sqrdmulh v15.8H, v3.8H, v1.H[5] // ................................e....................................... + mul v8.8H, v3.8H, v1.H[4] // ..................................e..................................... + sub v3.8H, v22.8H, v30.8H // ..................................e..................................... + add v30.8H, v14.8H, v28.8H // ...................................e.................................... + mls v10.8H, v2.8H, v7.H[0] // ....................................*................................... + add v2.8H, v17.8H, v23.8H // ......................................e................................. + sqrdmulh v27.8H, v20.8H, v0.H[1] // ......................................e................................. + sub v23.8H, v19.8H, v9.8H // .......................................*................................ + sqrdmulh v12.8H, v6.8H, v0.H[3] // ........................................e............................... + sub v13.8H, v23.8H, v10.8H // .........................................*.............................. + mul v29.8H, v20.8H, v0.H[0] // ..........................................e............................. + str q13, [x0, #176] // ...........................................*............................ + add v13.8H, v23.8H, v10.8H // ...........................................*............................ + mls v29.8H, v27.8H, v7.H[0] // ............................................e........................... + str q13, [x0, #112] // .............................................*.......................... + mul v21.8H, v16.8H, v0.H[2] // ..............................................e......................... + sqrdmulh v13.8H, v2.8H, v1.H[3] // ................................................e....................... + sub v10.8H, v4.8H, v29.8H // .................................................e...................... + mls v21.8H, v31.8H, v7.H[0] // ..................................................e..................... + add v19.8H, v4.8H, v29.8H // ..................................................e..................... + mul v31.8H, v2.8H, v1.H[2] // ....................................................e................... + mls v31.8H, v13.8H, v7.H[0] // ......................................................e................. + sub v5.8H, v30.8H, v21.8H // .......................................................e................ + add v23.8H, v30.8H, v21.8H // ........................................................e............... + mul v13.8H, v3.8H, v0.H[4] // ........................................................e............... + mul v9.8H, v6.8H, v0.H[2] // ..........................................................e............. + sqrdmulh v28.8H, v23.8H, v0.H[7] // ............................................................e........... + sqrdmulh v3.8H, v3.8H, v0.H[5] // ..............................................................e......... + mls v9.8H, v12.8H, v7.H[0] // ................................................................e....... + mul v21.8H, v23.8H, v0.H[6] // ..................................................................e..... + mls v13.8H, v3.8H, v7.H[0] // ....................................................................e... + mls v21.8H, v28.8H, v7.H[0] // ......................................................................e. + add v25.8H, v19.8H, v9.8H // .......................................................................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] // ......................................e.................................'.....................................~....... + // mul v24.8h, v12.8h, v0.h[0] // ..........................................e.............................'.........................................~... + // mls v24.8h, v27.8h, v7.h[0] // ............................................e...........................'...........................................~. + // sub v12.8h, v8.8h, v24.8h // .................................................e......................'............................................. + // add v8.8h, v8.8h, v24.8h // ..................................................e.....................'............................................. + // sqrdmulh v27.8h, v13.8h, v0.h[1] // ............e...........................................................'...........~................................. + // mul v24.8h, v13.8h, v0.h[0] // ..............e.........................................................'.............~............................... + // mls v24.8h, v27.8h, v7.h[0] // ....................e...................................................'...................~......................... + // sub v13.8h, v9.8h, v24.8h // .........................e..............................................'........................~.................... + // add v9.8h, v9.8h, v24.8h // ...................................e....................................'..................................~.......... + // sqrdmulh v27.8h, v14.8h, v0.h[1] // ........e...............................................................'.......~..................................... + // mul v24.8h, v14.8h, v0.h[0] // ................e.......................................................'...............~............................. + // mls v24.8h, v27.8h, v7.h[0] // ..........................e.............................................'.........................~................... + // sub v14.8h, v10.8h, v24.8h // ..................................e.....................................'.................................~........... + // add v10.8h, v10.8h, v24.8h // ...............................e........................................'..............................~.............. + // sqrdmulh v27.8h, v15.8h, v0.h[1] // ....e...................................................................'...~......................................... + // mul v24.8h, v15.8h, v0.h[0] // ......e.................................................................'.....~....................................... + // mls v24.8h, v27.8h, v7.h[0] // ..........e.............................................................'.........~................................... + // sub v15.8h, v11.8h, v24.8h // ................e.......................................................'...............~............................. + // add v11.8h, v11.8h, v24.8h // ...............e........................................................'..............~.............................. + // sqrdmulh v27.8h, v10.8h, v0.h[3] // ........................................e...............................'.......................................~..... + // mul v24.8h, v10.8h, v0.h[2] // ..........................................................e.............'............................................. + // mls v24.8h, v27.8h, v7.h[0] // ................................................................e.......'............................................. + // sub v10.8h, v8.8h, v24.8h // .......................................~................................'......................................*...... + // add v8.8h, v8.8h, v24.8h // .......................................................................e'............................................. + // sqrdmulh v27.8h, v11.8h, v0.h[3] // ............................e...........................................'...........................~................. + // mul v24.8h, v11.8h, v0.h[2] // ..............................................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, v14.8h, v0.h[5] // ..............................................................e.........'............................................. + // mul v24.8h, v14.8h, v0.h[4] // ........................................................e...............'............................................. + // mls v24.8h, v27.8h, v7.h[0] // ....................................................................e...'............................................. + // sub v14.8h, v12.8h, v24.8h // ..~.....................................................................'.*........................................... + // add v12.8h, v12.8h, v24.8h // .~......................................................................'*............................................ + // sqrdmulh v27.8h, v15.8h, v0.h[5] // ..................e.....................................................'.................~........................... + // mul v24.8h, v15.8h, v0.h[4] // ......................e.................................................'.....................~....................... + // mls v24.8h, v27.8h, v7.h[0] // ........................e...............................................'.......................~..................... + // sub v15.8h, v13.8h, v24.8h // .............................e..........................................'............................~................ + // add v13.8h, v13.8h, v24.8h // ......................................e.................................'.....................................~....... + // sqrdmulh v27.8h, v9.8h, v0.h[7] // ............................................................e...........'............................................. + // mul v24.8h, v9.8h, v0.h[6] // ..................................................................e.....'............................................. + // mls v24.8h, v27.8h, v7.h[0] // ......................................................................e.'............................................. + // 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] // ................................................e.......................'............................................. + // mul v24.8h, v13.8h, v1.h[2] // ....................................................e...................'............................................. + // mls v24.8h, v27.8h, v7.h[0] // ......................................................e.................'............................................. + // sub v13.8h, v12.8h, v24.8h // .......~................................................................'......*...................................... + // add v12.8h, v12.8h, v24.8h // ..........~.............................................................'.........*................................... + // sqrdmulh v27.8h, v15.8h, v1.h[5] // ................................e.......................................'...............................~............. + // mul v24.8h, v15.8h, v1.h[4] // ..................................e.....................................'.................................~........... + // 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))] // .........~..............................................................'........*.................................... + + sub count, count, #1 + cbnz count, layer123_start + // Instructions: 23 + // Expected cycles: 14 + // Expected IPC: 1.64 + // + // Cycle bound: 14.0 + // IPC bound: 1.64 + // + // Wall time: 0.16s + // User time: 0.16s + // + // ----- cycle (expected) ------> + // 0 25 + // |------------------------|---- + sqrdmulh v6.8H, v5.8H, v1.H[1] // *............................. + sub v26.8H, v10.8H, v13.8H // *............................. + add v13.8H, v10.8H, v13.8H // .*............................ + sub v10.8H, v19.8H, v9.8H // ..*........................... + mls v8.8H, v15.8H, v7.H[0] // ..*........................... + sub v17.8H, v13.8H, v31.8H // ...*.......................... + add v3.8H, v13.8H, v31.8H // ....*......................... + mul v12.8H, v5.8H, v1.H[0] // ....*......................... + str q17, [x0, #320] // .....*........................ + sub v13.8H, v25.8H, v21.8H // .....*........................ + mls v12.8H, v6.8H, v7.H[0] // ......*....................... + add v18.8H, v25.8H, v21.8H // ......*....................... + sub v23.8H, v26.8H, v8.8H // .......*...................... + str q3, [x0, #256] // .......*...................... + str q18, [x0], #(16) // ........*..................... + str q23, [x0, #432] // .........*.................... + str q13, [x0, #48] // ..........*................... + add v13.8H, v26.8H, v8.8H // ..........*................... + add v21.8H, v10.8H, v12.8H // ...........*.................. + sub v10.8H, v10.8H, v12.8H // ...........*.................. + str q13, [x0, #368] // ............*................. + str q10, [x0, #176] // .............*................ + str q21, [x0, #112] // .............*................ + + // ------ cycle (expected) ------> + // 0 25 + // |------------------------|----- + // mls v8.8H, v15.8H, v7.H[0] // ..*............................ + // add v3.8H, v10.8H, v13.8H // .*............................. + // sqrdmulh v2.8H, v5.8H, v1.H[1] // *.............................. + // sub v29.8H, v10.8H, v13.8H // *.............................. + // sub v12.8H, v25.8H, v21.8H // .....*......................... + // sub v11.8H, v29.8H, v8.8H // .......*....................... + // add v24.8H, v29.8H, v8.8H // ..........*.................... + // sub v8.8H, v3.8H, v31.8H // ...*........................... + // add v29.8H, v25.8H, v21.8H // ......*........................ + // str q11, [x0, #448] // .........*..................... + // str q24, [x0, #384] // ............*.................. + // add v24.8H, v3.8H, v31.8H // ....*.......................... + // str q8, [x0, #320] // .....*......................... + // str q24, [x0, #256] // .......*....................... + // str q29, [x0], #(16) // ........*...................... + // str q12, [x0, #48] // ..........*.................... + // mul v10.8H, v5.8H, v1.H[0] // ....*.......................... + // mls v10.8H, v2.8H, v7.H[0] // ......*........................ + // sub v23.8H, v19.8H, v9.8H // ..*............................ + // sub v13.8H, v23.8H, v10.8H // ...........*................... + // str q13, [x0, #176] // .............*................. + // add v13.8H, v23.8H, v10.8H // ...........*................... + // str q13, [x0, #112] // .............*................. mov in, inp mov count, #8 .p2align 2 - // Instructions: 55 - // Expected cycles: 66 - // Expected IPC: 0.83 + // Instructions: 37 + // Expected cycles: 41 + // Expected IPC: 0.90 // - // Cycle bound: 66.0 - // IPC bound: 0.83 + // Cycle bound: 41.0 + // IPC bound: 0.90 // - // Wall time: 7.68s - // User time: 7.68s + // Wall time: 0.45s + // User time: 0.45s // - // ----------------------- cycle (expected) ------------------------> - // 0 25 50 - // |------------------------|------------------------|--------------- - ldr q11, [x3], #16 // *................................................................. - ldr q15, [x0, #48] // ..*............................................................... - ldr q30, [x0, #32] // ....*............................................................. - mul v25.8H, v15.8H, v11.H[0] // ......*........................................................... - sqrdmulh v15.8H, v15.8H, v11.H[1] // .......*.......................................................... - sqrdmulh v21.8H, v30.8H, v11.H[1] // ........*......................................................... - ldr q12, [x0, #16] // .........*........................................................ - mls v25.8H, v15.8H, v7.H[0] // ...........*...................................................... - mul v8.8H, v30.8H, v11.H[0] // ............*..................................................... - ldr q6, [x0, #0] // .............*.................................................... - sub v3.8H, v12.8H, v25.8H // ...............*.................................................. - add v15.8H, v12.8H, v25.8H // ................*................................................. - mls v8.8H, v21.8H, v7.H[0] // .................*................................................ - mul v13.8H, v3.8H, v11.H[4] // ..................*............................................... - sqrdmulh v3.8H, v3.8H, v11.H[5] // ...................*.............................................. - sqrdmulh v30.8H, v15.8H, v11.H[3] // ....................*............................................. - mul v15.8H, v15.8H, v11.H[2] // .....................*............................................ - ldr q24, [x4, #16] // ......................*........................................... - mls v13.8H, v3.8H, v7.H[0] // ........................*......................................... - sub v18.8H, v6.8H, v8.8H // .........................*........................................ - mls v15.8H, v30.8H, v7.H[0] // ..........................*....................................... - add v3.8H, v6.8H, v8.8H // ...........................*...................................... - add v25.8H, v18.8H, v13.8H // ............................*..................................... - sub v21.8H, v18.8H, v13.8H // .............................*.................................... - add v13.8H, v3.8H, v15.8H // ..............................*................................... - sub v15.8H, v3.8H, v15.8H // ...............................*.................................. - trn1 v11.4S, v25.4S, v21.4S // ................................*................................. - trn2 v6.4S, v25.4S, v21.4S // .................................*................................ - trn1 v3.4S, v13.4S, v15.4S // ..................................*............................... - ldr q9, [x4], #(6*16) // ...................................*.............................. - trn2 v30.2D, v3.2D, v11.2D // .....................................*............................ - trn2 v4.4S, v13.4S, v15.4S // ......................................*........................... - sqrdmulh v15.8H, v30.8H, v24.8H // .......................................*.......................... - mul v5.8H, v30.8H, v9.8H // ........................................*......................... - trn2 v30.2D, v4.2D, v6.2D // .........................................*........................ - ldr q17, [x4, #-48] // ..........................................*....................... - sqrdmulh v25.8H, v30.8H, v24.8H // ............................................*..................... - mul v8.8H, v30.8H, v9.8H // .............................................*.................... - ldr q13, [x4, #-64] // ..............................................*................... - trn1 v21.2D, v3.2D, v11.2D // ................................................*................. - mls v8.8H, v25.8H, v7.H[0] // .................................................*................ - trn1 v11.2D, v4.2D, v6.2D // ..................................................*............... - ldr q30, [x4, #-16] // ...................................................*.............. - add v25.8H, v11.8H, v8.8H // .....................................................*............ - sub v11.8H, v11.8H, v8.8H // ......................................................*........... - mls v5.8H, v15.8H, v7.H[0] // .......................................................*.......... - sqrdmulh v17.8H, v25.8H, v17.8H // ........................................................*......... - mul v13.8H, v25.8H, v13.8H // .........................................................*........ - sqrdmulh v6.8H, v11.8H, v30.8H // ..........................................................*....... - ldr q25, [x4, #-32] // ...........................................................*...... - mls v13.8H, v17.8H, v7.H[0] // .............................................................*.... - add v15.8H, v21.8H, v5.8H // ..............................................................*... - sub v3.8H, v21.8H, v5.8H // ...............................................................*.. - mul v25.8H, v11.8H, v25.8H // ................................................................*. - sub v11.8H, v15.8H, v13.8H // .................................................................* - - // ----------------------- cycle (expected) ------------------------> - // 0 25 50 - // |------------------------|------------------------|--------------- - // ldr q0, [x4, #16] // ......................*........................................... - // ldr q8, [x3], #16 // *................................................................. - // ldr q14, [x0, #16] // .........*........................................................ - // ldr q22, [x0, #32] // ....*............................................................. - // sqrdmulh v31.8H, v22.8H, v8.H[1] // ........*......................................................... - // ldr q19, [x0, #48] // ..*............................................................... - // sqrdmulh v16.8H, v19.8H, v8.H[1] // .......*.......................................................... - // mul v30.8H, v19.8H, v8.H[0] // ......*........................................................... - // mul v29.8H, v22.8H, v8.H[0] // ............*..................................................... - // mls v29.8H, v31.8H, v7.H[0] // .................*................................................ - // mls v30.8H, v16.8H, v7.H[0] // ...........*...................................................... - // sub v6.8H, v14.8H, v30.8H // ...............*.................................................. - // ldr q15, [x0, #0] // .............*.................................................... - // add v13.8H, v14.8H, v30.8H // ................*................................................. - // sqrdmulh v30.8H, v6.8H, v8.H[5] // ...................*.............................................. - // mul v6.8H, v6.8H, v8.H[4] // ..................*............................................... - // sqrdmulh v17.8H, v13.8H, v8.H[3] // ....................*............................................. - // mul v22.8H, v13.8H, v8.H[2] // .....................*............................................ - // sub v3.8H, v15.8H, v29.8H // .........................*........................................ - // add v15.8H, v15.8H, v29.8H // ...........................*...................................... - // mls v6.8H, v30.8H, v7.H[0] // ........................*......................................... - // mls v22.8H, v17.8H, v7.H[0] // ..........................*....................................... - // ldr q25, [x4], #(6*16) // ...................................*.............................. - // sub v18.8H, v3.8H, v6.8H // .............................*.................................... - // add v30.8H, v3.8H, v6.8H // ............................*..................................... - // sub v6.8H, v15.8H, v22.8H // ...............................*.................................. - // add v13.8H, v15.8H, v22.8H // ..............................*................................... - // trn1 v14.4S, v30.4S, v18.4S // ................................*................................. - // trn2 v4.4S, v30.4S, v18.4S // .................................*................................ - // trn1 v16.4S, v13.4S, v6.4S // ..................................*............................... - // trn2 v10.4S, v13.4S, v6.4S // ......................................*........................... - // ldr q30, [x4, #-48] // ..........................................*....................... - // trn2 v21.2D, v16.2D, v14.2D // .....................................*............................ - // trn2 v17.2D, v10.2D, v4.2D // .........................................*........................ - // mul v11.8H, v21.8H, v25.8H // ........................................*......................... - // mul v25.8H, v17.8H, v25.8H // .............................................*.................... - // sqrdmulh v3.8H, v17.8H, v0.8H // ............................................*..................... - // sqrdmulh v27.8H, v21.8H, v0.8H // .......................................*.......................... - // trn1 v15.2D, v16.2D, v14.2D // ................................................*................. - // trn1 v13.2D, v10.2D, v4.2D // ..................................................*............... - // mls v25.8H, v3.8H, v7.H[0] // .................................................*................ - // mls v11.8H, v27.8H, v7.H[0] // .......................................................*.......... - // ldr q2, [x4, #-64] // ..............................................*................... - // sub v29.8H, v13.8H, v25.8H // ......................................................*........... - // add v13.8H, v13.8H, v25.8H // .....................................................*............ - // ldr q25, [x4, #-32] // ...........................................................*...... - // sqrdmulh v30.8H, v13.8H, v30.8H // ........................................................*......... - // mul v13.8H, v13.8H, v2.8H // .........................................................*........ - // sub v3.8H, v15.8H, v11.8H // ...............................................................*.. - // ldr q5, [x4, #-16] // ...................................................*.............. - // mls v13.8H, v30.8H, v7.H[0] // .............................................................*.... - // add v15.8H, v15.8H, v11.8H // ..............................................................*... - // sqrdmulh v6.8H, v29.8H, v5.8H // ..........................................................*....... - // mul v25.8H, v29.8H, v25.8H // ................................................................*. - // sub v11.8H, v15.8H, v13.8H // .................................................................* + // ----------- cycle (expected) -----------> + // 0 25 + // |------------------------|--------------- + ldr q21, [x0, #48] // *........................................ + ldr q13, [x3], #16 // *........................................ + ldr q17, [x4], #(6*16) // .*....................................... + sqrdmulh v10.8H, v21.8H, v13.H[1] // ....*.................................... + ldr q20, [x0, #32] // ....*.................................... + ldr q23, [x0, #16] // .....*................................... + mul v8.8H, v21.8H, v13.H[0] // ......*.................................. + sqrdmulh v5.8H, v20.8H, v13.H[1] // ........*................................ + mls v8.8H, v10.8H, v7.H[0] // ..........*.............................. + mul v26.8H, v20.8H, v13.H[0] // ............*............................ + mls v26.8H, v5.8H, v7.H[0] // ..............*.......................... + sub v14.8H, v23.8H, v8.8H // ...............*......................... + add v31.8H, v23.8H, v8.8H // ................*........................ + sqrdmulh v4.8H, v14.8H, v13.H[5] // .................*....................... + sqrdmulh v25.8H, v31.8H, v13.H[3] // ...................*..................... + mul v23.8H, v14.8H, v13.H[4] // .....................*................... + ldr q18, [x0, #0] // .....................*................... + mul v21.8H, v31.8H, v13.H[2] // .......................*................. + mls v21.8H, v25.8H, v7.H[0] // .........................*............... + add v31.8H, v18.8H, v26.8H // .........................*............... + sub v29.8H, v18.8H, v26.8H // ..........................*.............. + ldr q13, [x4, #-80] // ..........................*.............. + mls v23.8H, v4.8H, v7.H[0] // ...........................*............. + ldr q25, [x4, #-16] // ............................*............ + sub v4.8H, v31.8H, v21.8H // ..............................*.......... + add v15.8H, v31.8H, v21.8H // ...............................*......... + ldr q31, [x4, #-48] // ...............................*......... + sub v18.8H, v29.8H, v23.8H // ................................*........ + add v8.8H, v29.8H, v23.8H // ................................*........ + trn2 v30.4S, v15.4S, v4.4S // .................................*....... + trn2 v1.4S, v8.4S, v18.4S // ..................................*...... + trn1 v27.4S, v15.4S, v4.4S // ...................................*..... + trn1 v0.4S, v8.4S, v18.4S // ....................................*.... + trn2 v15.2D, v30.2D, v1.2D // ....................................*.... + trn2 v24.2D, v27.2D, v0.2D // ......................................*.. + sqrdmulh v6.8H, v15.8H, v13.8H // ......................................*.. + sqrdmulh v12.8H, v24.8H, v13.8H // ........................................* + + // ----------- cycle (expected) -----------> + // 0 25 + // |------------------------|--------------- + // ldr q5, [x0, #48] // *........................................ + // ldr q10, [x3], #16 // *........................................ + // ldr q8, [x0, #0] // .....................*................... + // ldr q23, [x0, #32] // ....*.................................... + // ldr q9, [x0, #16] // .....*................................... + // sqrdmulh v16.8H, v5.8H, v10.H[1] // ....*.................................... + // sqrdmulh v26.8H, v23.8H, v10.H[1] // ........*................................ + // mul v1.8H, v5.8H, v10.H[0] // ......*.................................. + // mls v1.8H, v16.8H, v7.H[0] // ..........*.............................. + // mul v14.8H, v23.8H, v10.H[0] // ............*............................ + // add v18.8H, v9.8H, v1.8H // ................*........................ + // ldr q25, [x4, #80] // ............................*............ + // sqrdmulh v11.8H, v18.8H, v10.H[3] // ...................*..................... + // sub v22.8H, v9.8H, v1.8H // ...............*......................... + // mul v0.8H, v18.8H, v10.H[2] // .......................*................. + // mul v20.8H, v22.8H, v10.H[4] // .....................*................... + // mls v14.8H, v26.8H, v7.H[0] // ..............*.......................... + // ldr q29, [x4, #16] // ..........................*.............. + // add v26.8H, v8.8H, v14.8H // .........................*............... + // mls v0.8H, v11.8H, v7.H[0] // .........................*............... + // sqrdmulh v15.8H, v22.8H, v10.H[5] // .................*....................... + // add v23.8H, v26.8H, v0.8H // ...............................*......... + // sub v11.8H, v26.8H, v0.8H // ..............................*.......... + // sub v14.8H, v8.8H, v14.8H // ..........................*.............. + // ldr q17, [x4], #(6*16) // .*....................................... + // ldr q31, [x4, #-48] // ...............................*......... + // mls v20.8H, v15.8H, v7.H[0] // ...........................*............. + // trn1 v27.4S, v23.4S, v11.4S // ...................................*..... + // sub v12.8H, v14.8H, v20.8H // ................................*........ + // add v30.8H, v14.8H, v20.8H // ................................*........ + // trn1 v0.4S, v30.4S, v12.4S // ....................................*.... + // trn2 v24.2D, v27.2D, v0.2D // ......................................*.. + // trn2 v1.4S, v30.4S, v12.4S // ..................................*...... + // trn2 v30.4S, v23.4S, v11.4S // .................................*....... + // trn2 v15.2D, v30.2D, v1.2D // ....................................*.... + // sqrdmulh v12.8H, v24.8H, v29.8H // ........................................* + // sqrdmulh v6.8H, v15.8H, v29.8H // ......................................*.. sub count, count, #1 layer4567_start: - // Instructions: 72 - // Expected cycles: 87 - // Expected IPC: 0.83 - // - // Cycle bound: 87.0 - // IPC bound: 0.83 - // - // Wall time: 187.92s - // User time: 187.92s - // - // ---------------------------------- cycle (expected) ----------------------------------> - // 0 25 50 75 - // |------------------------|------------------------|------------------------|----------- - ldr q0, [x4, #16] // e...................................................................................... - ldr q8, [x3], #16 // ..e.................................................................................... - ldr q14, [x0, #80] // ....e.................................................................................. - mls v25.8H, v6.8H, v7.H[0] // ......*................................................................................ - ldr q22, [x0, #96] // .......e............................................................................... - add v10.8H, v15.8H, v13.8H // .........*............................................................................. - sub v13.8H, v3.8H, v25.8H // ..........*............................................................................ - sqrdmulh v31.8H, v22.8H, v8.H[1] // ...........e........................................................................... - ldr q19, [x0, #112] // ............e.......................................................................... - sqdmulh v23.8H, v13.8H, v7.H[1] // ..............*........................................................................ - add v12.8H, v3.8H, v25.8H // ...............*....................................................................... - sqrdmulh v16.8H, v19.8H, v8.H[1] // ................e...................................................................... - mul v30.8H, v19.8H, v8.H[0] // .................e..................................................................... - srshr v15.8H, v23.8H, #11 // ..................*.................................................................... - sqdmulh v3.8H, v11.8H, v7.H[1] // ...................*................................................................... - mul v29.8H, v22.8H, v8.H[0] // ....................e.................................................................. - mls v13.8H, v15.8H, v7.H[0] // .....................*................................................................. - sqdmulh v15.8H, v10.8H, v7.H[1] // ......................*................................................................ - srshr v3.8H, v3.8H, #11 // .......................*............................................................... - sqdmulh v18.8H, v12.8H, v7.H[1] // ........................*.............................................................. - mls v29.8H, v31.8H, v7.H[0] // .........................e............................................................. - srshr v15.8H, v15.8H, #11 // ..........................*............................................................ - mls v30.8H, v16.8H, v7.H[0] // ...........................e........................................................... - srshr v1.8H, v18.8H, #11 // ............................*.......................................................... - mls v10.8H, v15.8H, v7.H[0] // .............................*......................................................... - mls v11.8H, v3.8H, v7.H[0] // ..............................*........................................................ - mls v12.8H, v1.8H, v7.H[0] // ...............................*....................................................... - sub v6.8H, v14.8H, v30.8H // ................................e...................................................... - ldr q15, [x0, #64] // .................................e..................................................... - st4 {v10.4S, v11.4S, v12.4S, v13.4S}, [x0], #64 // ...................................*................................................... - add v13.8H, v14.8H, v30.8H // ........................................e.............................................. - sqrdmulh v30.8H, v6.8H, v8.H[5] // .........................................e............................................. - mul v6.8H, v6.8H, v8.H[4] // ..........................................e............................................ - sqrdmulh v17.8H, v13.8H, v8.H[3] // ...........................................e........................................... - mul v22.8H, v13.8H, v8.H[2] // ............................................e.......................................... - sub v3.8H, v15.8H, v29.8H // .............................................e......................................... - add v15.8H, v15.8H, v29.8H // ..............................................e........................................ - mls v6.8H, v30.8H, v7.H[0] // ...............................................e....................................... - mls v22.8H, v17.8H, v7.H[0] // ................................................e...................................... - ldr q25, [x4], #(6*16) // .................................................e..................................... - sub v18.8H, v3.8H, v6.8H // ...................................................e................................... - add v30.8H, v3.8H, v6.8H // ....................................................e.................................. - sub v6.8H, v15.8H, v22.8H // .....................................................e................................. - add v13.8H, v15.8H, v22.8H // ......................................................e................................ - trn1 v14.4S, v30.4S, v18.4S // .......................................................e............................... - trn2 v4.4S, v30.4S, v18.4S // ........................................................e.............................. - trn1 v16.4S, v13.4S, v6.4S // .........................................................e............................. - trn2 v10.4S, v13.4S, v6.4S // ..........................................................e............................ - ldr q30, [x4, #-48] // ...........................................................e........................... - trn2 v21.2D, v16.2D, v14.2D // .............................................................e......................... - trn2 v17.2D, v10.2D, v4.2D // ..............................................................e........................ - mul v11.8H, v21.8H, v25.8H // ...............................................................e....................... - mul v25.8H, v17.8H, v25.8H // ................................................................e...................... - sqrdmulh v3.8H, v17.8H, v0.8H // .................................................................e..................... - sqrdmulh v27.8H, v21.8H, v0.8H // ..................................................................e.................... - trn1 v15.2D, v16.2D, v14.2D // ...................................................................e................... - trn1 v13.2D, v10.2D, v4.2D // ....................................................................e.................. - mls v25.8H, v3.8H, v7.H[0] // .....................................................................e................. - mls v11.8H, v27.8H, v7.H[0] // ......................................................................e................ - ldr q2, [x4, #-64] // .......................................................................e............... - sub v29.8H, v13.8H, v25.8H // .........................................................................e............. - add v13.8H, v13.8H, v25.8H // ..........................................................................e............ - ldr q25, [x4, #-32] // ...........................................................................e........... - sqrdmulh v30.8H, v13.8H, v30.8H // .............................................................................e......... - mul v13.8H, v13.8H, v2.8H // ..............................................................................e........ - sub v3.8H, v15.8H, v11.8H // ...............................................................................e....... - ldr q5, [x4, #-16] // ................................................................................e...... - mls v13.8H, v30.8H, v7.H[0] // ..................................................................................e.... - add v15.8H, v15.8H, v11.8H // ...................................................................................e... - sqrdmulh v6.8H, v29.8H, v5.8H // ....................................................................................e.. - mul v25.8H, v29.8H, v25.8H // .....................................................................................e. - sub v11.8H, v15.8H, v13.8H // ......................................................................................e - - // ---------------------------------------------------- cycle (expected) ----------------------------------------------------> - // 0 25 50 75 100 - // |------------------------|------------------------|------------------------|------------------------|---------------------- - // ldr q8, [x0, #(16*0)] // .................................e.....................................................'................................~.. - // ldr q9, [x0, #(16*1)] // ....e..................................................................................'...~............................... - // ldr q10, [x0, #(16*2)] // .......e...............................................................................'......~............................ - // ldr q11, [x0, #(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 // .............................................e.........................................'................................... - // add v8.8h, v8.8h, v24.8h // ..............................................e........................................'................................... - // 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] // ...........................................e...........................................'................................... - // mul v24.8h, v9.8h, v0.h[2] // ............................................e..........................................'................................... - // mls v24.8h, v27.8h, v7.h[0] // ................................................e......................................'................................... - // sub v9.8h, v8.8h, v24.8h // .....................................................e.................................'................................... - // add v8.8h, v8.8h, v24.8h // ......................................................e................................'................................... - // 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] // ...............................................e.......................................'................................... - // sub v11.8h, v10.8h, v24.8h // ...................................................e...................................'................................... - // add v10.8h, v10.8h, v24.8h // ....................................................e..................................'................................... - // trn1 v25.4s, v8.4s, v9.4s // .........................................................e.............................'................................... - // trn2 v26.4s, v8.4s, v9.4s // ..........................................................e............................'................................... - // trn1 v27.4s, v10.4s, v11.4s // .......................................................e...............................'................................... - // trn2 v28.4s, v10.4s, v11.4s // ........................................................e..............................'................................... - // trn2 v10.2d, v25.2d, v27.2d // .............................................................e.........................'................................... - // trn2 v11.2d, v26.2d, v28.2d // ..............................................................e........................'................................... - // trn1 v8.2d, v25.2d, v27.2d // ...................................................................e...................'................................... - // trn1 v9.2d, v26.2d, v28.2d // ....................................................................e..................'................................... - // ldr q0, [x4], #(6*16) // .................................................e.....................................'................................... - // ldr q4, [x4, #(-6*16 + 1*16)] // e......................................................................................~................................... - // ldr q1, [x4, #(-6*16 + 2*16)] // .......................................................................e...............'................................... - // 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 // ..................................................................e....................'................................... - // mul v24.8h, v10.8h, v0.8h // ...............................................................e.......................'................................... - // mls v24.8h, v27.8h, v7.h[0] // ......................................................................e................'................................... - // sub v10.8h, v8.8h, v24.8h // ...............................................................................e.......'................................... - // add v8.8h, v8.8h, v24.8h // ...................................................................................e...'................................... - // sqrdmulh v27.8h, v11.8h, v4.8h // .................................................................e.....................'................................... - // mul v24.8h, v11.8h, v0.8h // ................................................................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, v5.8h // .............................................................................e.........'................................... - // mul v24.8h, v9.8h, v1.8h // ..............................................................................e........'................................... - // mls v24.8h, v27.8h, v7.h[0] // ..................................................................................e....'................................... - // sub v9.8h, v8.8h, v24.8h // ......................................................................................e'................................... - // add v8.8h, v8.8h, v24.8h // .........~.............................................................................'........*.......................... - // sqrdmulh v27.8h, v11.8h, v6.8h // ....................................................................................e..'................................... - // mul v24.8h, v11.8h, v2.8h // .....................................................................................e.'................................... - // 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}, [x0], #64 // ...................................~...................................................'..................................* + // Instructions: 72 + // Expected cycles: 65 + // Expected IPC: 1.11 + // + // Cycle bound: 64.0 + // IPC bound: 1.12 + // + // Wall time: 133.39s + // User time: 133.39s + // + // ----------------------- cycle (expected) -----------------------> + // 0 25 50 + // |------------------------|------------------------|-------------- + mul v28.8H, v24.8H, v17.8H // *................................................................ + ldr q5, [x0, #112] // e................................................................ + ldr q10, [x3], #16 // .e............................................................... + mul v22.8H, v15.8H, v17.8H // ..*.............................................................. + ldr q8, [x0, #64] // ..e.............................................................. + ldr q23, [x0, #96] // ...e............................................................. + mls v22.8H, v6.8H, v7.H[0] // ....*............................................................ + ldr q9, [x0, #80] // ....e............................................................ + trn1 v15.2D, v30.2D, v1.2D // .....*........................................................... + sqrdmulh v16.8H, v5.8H, v10.H[1] // ......e.......................................................... + sqrdmulh v26.8H, v23.8H, v10.H[1] // ........e........................................................ + mul v1.8H, v5.8H, v10.H[0] // ..........e...................................................... + add v4.8H, v15.8H, v22.8H // ..........*...................................................... + sub v6.8H, v15.8H, v22.8H // ...........*..................................................... + ldr q21, [x4, #-64] // ............*.................................................... + mls v1.8H, v16.8H, v7.H[0] // ............e.................................................... + mul v14.8H, v23.8H, v10.H[0] // ..............e.................................................. + trn1 v19.2D, v27.2D, v0.2D // ................*................................................ + mul v30.8H, v4.8H, v21.8H // ................*................................................ + add v18.8H, v9.8H, v1.8H // .................e............................................... + sqrdmulh v23.8H, v6.8H, v25.8H // ..................*.............................................. + ldr q25, [x4, #80] // ...................e............................................. + sqrdmulh v11.8H, v18.8H, v10.H[3] // ....................e............................................ + sub v22.8H, v9.8H, v1.8H // .....................e........................................... + mul v0.8H, v18.8H, v10.H[2] // ......................e.......................................... + ldr q2, [x4, #-32] // ......................*.......................................... + mul v20.8H, v22.8H, v10.H[4] // ........................e........................................ + mls v14.8H, v26.8H, v7.H[0] // ..........................e...................................... + ldr q29, [x4, #16] // ..........................e...................................... + mul v6.8H, v6.8H, v2.8H // ............................*.................................... + mls v28.8H, v12.8H, v7.H[0] // ..............................*.................................. + add v26.8H, v8.8H, v14.8H // ...............................e................................. + mls v6.8H, v23.8H, v7.H[0] // ................................*................................ + sqrdmulh v31.8H, v4.8H, v31.8H // ..................................*.............................. + sub v2.8H, v19.8H, v28.8H // ...................................*............................. + mls v0.8H, v11.8H, v7.H[0] // ....................................e............................ + add v4.8H, v2.8H, v6.8H // .....................................*........................... + sqrdmulh v15.8H, v22.8H, v10.H[5] // ......................................e.......................... + mls v30.8H, v31.8H, v7.H[0] // ........................................*........................ + sub v5.8H, v2.8H, v6.8H // ........................................*........................ + add v23.8H, v26.8H, v0.8H // .........................................e....................... + add v10.8H, v19.8H, v28.8H // ..........................................*...................... + sqdmulh v1.8H, v4.8H, v7.H[1] // ..........................................*...................... + sub v11.8H, v26.8H, v0.8H // ...........................................e..................... + sub v14.8H, v8.8H, v14.8H // ............................................e.................... + sqdmulh v18.8H, v5.8H, v7.H[1] // ............................................*.................... + add v2.8H, v10.8H, v30.8H // .............................................*................... + ldr q17, [x4], #(6*16) // .............................................e................... + ldr q31, [x4, #-48] // ..............................................e.................. + mls v20.8H, v15.8H, v7.H[0] // ..............................................e.................. + sub v3.8H, v10.8H, v30.8H // ...............................................*................. + srshr v16.8H, v1.8H, #11 // ................................................*................ + sqdmulh v8.8H, v2.8H, v7.H[1] // ................................................*................ + trn1 v27.4S, v23.4S, v11.4S // .................................................e............... + srshr v13.8H, v18.8H, #11 // ..................................................*.............. + sqdmulh v24.8H, v3.8H, v7.H[1] // ..................................................*.............. + sub v12.8H, v14.8H, v20.8H // ...................................................e............. + mls v4.8H, v16.8H, v7.H[0] // ....................................................*............ + add v30.8H, v14.8H, v20.8H // ....................................................e............ + srshr v8.8H, v8.8H, #11 // .....................................................*........... + mls v5.8H, v13.8H, v7.H[0] // ......................................................*.......... + trn1 v0.4S, v30.4S, v12.4S // ......................................................e.......... + srshr v19.8H, v24.8H, #11 // .......................................................*......... + trn2 v24.2D, v27.2D, v0.2D // ........................................................e........ + trn2 v1.4S, v30.4S, v12.4S // .........................................................e....... + mls v2.8H, v8.8H, v7.H[0] // .........................................................*....... + trn2 v30.4S, v23.4S, v11.4S // ...........................................................e..... + mls v3.8H, v19.8H, v7.H[0] // ...........................................................*..... + trn2 v15.2D, v30.2D, v1.2D // .............................................................e... + sqrdmulh v12.8H, v24.8H, v29.8H // .............................................................e... + sqrdmulh v6.8H, v15.8H, v29.8H // ...............................................................e. + st4 {v2.4S, v3.4S, v4.4S, v5.4S}, [x0], #64 // ................................................................* + + // ------------------------------------------------------- cycle (expected) --------------------------------------------------------> + // 0 25 50 75 100 125 + // |------------------------|------------------------|------------------------|------------------------|------------------------|---- + // ldr q8, [x0, #(16*0)] // ..e..............................................................'.~.............................................................. + // ldr q9, [x0, #(16*1)] // ....e............................................................'...~............................................................ + // ldr q10, [x0, #(16*2)] // ...e.............................................................'..~............................................................. + // ldr q11, [x0, #(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 // ............................................e....................'...........................................~.................... + // add v8.8h, v8.8h, v24.8h // ...............................e.................................'..............................~................................. + // 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] // ....................e............................................'...................~............................................ + // mul v24.8h, v9.8h, v0.h[2] // ......................e..........................................'.....................~.......................................... + // mls v24.8h, v27.8h, v7.h[0] // ....................................e............................'...................................~............................ + // sub v9.8h, v8.8h, v24.8h // ...........................................e.....................'..........................................~..................... + // add v8.8h, v8.8h, v24.8h // .........................................e.......................'........................................~....................... + // 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] // ..............................................e..................'.............................................~.................. + // sub v11.8h, v10.8h, v24.8h // ...................................................e.............'..................................................~............. + // add v10.8h, v10.8h, v24.8h // ....................................................e............'...................................................~............ + // trn1 v25.4s, v8.4s, v9.4s // .................................................e...............'................................................~............... + // trn2 v26.4s, v8.4s, v9.4s // ...........................................................e.....'..........................................................~..... + // trn1 v27.4s, v10.4s, v11.4s // ......................................................e..........'.....................................................~.......... + // trn2 v28.4s, v10.4s, v11.4s // .........................................................e.......'........................................................~....... + // trn2 v10.2d, v25.2d, v27.2d // ........................................................e........'.......................................................~........ + // trn2 v11.2d, v26.2d, v28.2d // .............................................................e...'............................................................~... + // trn1 v8.2d, v25.2d, v27.2d // ................~................................................'...............*................................................ + // trn1 v9.2d, v26.2d, v28.2d // .....~...........................................................'....*........................................................... + // ldr q0, [x4], #(6*16) // .............................................e...................'............................................~................... + // ldr q4, [x4, #(-6*16 + 1*16)] // ..........................e......................................'.........................~...................................... + // ldr q1, [x4, #(-6*16 + 2*16)] // ............~....................................................'...........*.................................................... + // ldr q5, [x4, #(-6*16 + 3*16)] // ..............................................e..................'.............................................~.................. + // ldr q2, [x4, #(-6*16 + 4*16)] // ......................~..........................................'.....................*.......................................... + // ldr q6, [x4, #(-6*16 + 5*16)] // ...................e.............................................'..................~............................................. + // sqrdmulh v27.8h, v10.8h, v4.8h // .............................................................e...'............................................................~... + // 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 // ...............................................................e.'..............................................................~. + // 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}, [x0], #64 // ................................................................~'...............................................................* sub count, count, #1 cbnz count, layer4567_start - // Instructions: 17 - // Expected cycles: 21 + // Instructions: 35 + // Expected cycles: 43 // Expected IPC: 0.81 // - // Cycle bound: 21.0 + // Cycle bound: 43.0 // IPC bound: 0.81 // - // Wall time: 0.04s - // User time: 0.04s + // Wall time: 0.57s + // User time: 0.57s // - // ----- cycle (expected) ------> + // ------------ cycle (expected) ------------> // 0 25 - // |------------------------|---- - mls v25.8H, v6.8H, v7.H[0] // *............................. - sqdmulh v4.8H, v11.8H, v7.H[1] // .*............................ - add v10.8H, v15.8H, v13.8H // ...*.......................... - add v12.8H, v3.8H, v25.8H // ....*......................... - srshr v8.8H, v4.8H, #11 // .....*........................ - sub v13.8H, v3.8H, v25.8H // ......*....................... - sqdmulh v21.8H, v12.8H, v7.H[1] // .......*...................... - sqdmulh v5.8H, v10.8H, v7.H[1] // ........*..................... - sqdmulh v9.8H, v13.8H, v7.H[1] // .........*.................... - mls v11.8H, v8.8H, v7.H[0] // ..........*................... - srshr v30.8H, v21.8H, #11 // ...........*.................. - srshr v17.8H, v5.8H, #11 // ............*................. - srshr v4.8H, v9.8H, #11 // .............*................ - mls v12.8H, v30.8H, v7.H[0] // ..............*............... - mls v10.8H, v17.8H, v7.H[0] // ...............*.............. - mls v13.8H, v4.8H, v7.H[0] // ................*............. - st4 {v10.4S, v11.4S, v12.4S, v13.4S}, [x0], #64 // ....................*......... - - // ------ cycle (expected) ------> - // 0 25 - // |------------------------|----- - // mls v25.8H, v6.8H, v7.H[0] // *.............................. - // add v10.8H, v15.8H, v13.8H // ...*........................... - // sub v13.8H, v3.8H, v25.8H // ......*........................ - // sqdmulh v23.8H, v13.8H, v7.H[1] // .........*..................... - // add v12.8H, v3.8H, v25.8H // ....*.......................... - // srshr v15.8H, v23.8H, #11 // .............*................. - // sqdmulh v3.8H, v11.8H, v7.H[1] // .*............................. - // mls v13.8H, v15.8H, v7.H[0] // ................*.............. - // sqdmulh v15.8H, v10.8H, v7.H[1] // ........*...................... - // srshr v3.8H, v3.8H, #11 // .....*......................... - // sqdmulh v18.8H, v12.8H, v7.H[1] // .......*....................... - // srshr v15.8H, v15.8H, #11 // ............*.................. - // srshr v1.8H, v18.8H, #11 // ...........*................... - // mls v10.8H, v15.8H, v7.H[0] // ...............*............... - // mls v11.8H, v3.8H, v7.H[0] // ..........*.................... - // mls v12.8H, v1.8H, v7.H[0] // ..............*................ - // st4 {v10.4S, v11.4S, v12.4S, v13.4S}, [x0], #64 // ....................*.......... + // |------------------------|----------------- + mul v19.8H, v15.8H, v17.8H // *.......................................... + ldr q15, [x4, #-32] // *.......................................... + trn1 v1.2D, v30.2D, v1.2D // .*......................................... + ldr q4, [x4, #-64] // .*......................................... + mls v19.8H, v6.8H, v7.H[0] // ..*........................................ + trn1 v14.2D, v27.2D, v0.2D // ..*........................................ + mul v22.8H, v24.8H, v17.8H // ....*...................................... + mls v22.8H, v12.8H, v7.H[0] // ......*.................................... + add v26.8H, v1.8H, v19.8H // .......*................................... + sub v27.8H, v1.8H, v19.8H // ........*.................................. + sqrdmulh v9.8H, v26.8H, v31.8H // .........*................................. + mul v2.8H, v26.8H, v4.8H // ...........*............................... + add v18.8H, v14.8H, v22.8H // ...........*............................... + sub v0.8H, v14.8H, v22.8H // ............*.............................. + sqrdmulh v8.8H, v27.8H, v25.8H // .............*............................. + mls v2.8H, v9.8H, v7.H[0] // ...............*........................... + mul v1.8H, v27.8H, v15.8H // .................*......................... + mls v1.8H, v8.8H, v7.H[0] // ...................*....................... + add v26.8H, v18.8H, v2.8H // ....................*...................... + sub v27.8H, v18.8H, v2.8H // .....................*..................... + sqdmulh v25.8H, v26.8H, v7.H[1] // ......................*.................... + sqdmulh v23.8H, v27.8H, v7.H[1] // ........................*.................. + sub v29.8H, v0.8H, v1.8H // ........................*.................. + sqdmulh v20.8H, v29.8H, v7.H[1] // ..........................*................ + add v28.8H, v0.8H, v1.8H // ..........................*................ + srshr v17.8H, v25.8H, #11 // ...........................*............... + sqdmulh v12.8H, v28.8H, v7.H[1] // ............................*.............. + srshr v24.8H, v23.8H, #11 // .............................*............. + srshr v14.8H, v20.8H, #11 // ...............................*........... + mls v26.8H, v17.8H, v7.H[0] // ...............................*........... + srshr v18.8H, v12.8H, #11 // .................................*......... + mls v27.8H, v24.8H, v7.H[0] // .................................*......... + mls v29.8H, v14.8H, v7.H[0] // ...................................*....... + mls v28.8H, v18.8H, v7.H[0] // .....................................*..... + st4 {v26.4S, v27.4S, v28.4S, v29.4S}, [x0], #64 // ..........................................* + + // ------------ cycle (expected) ------------> + // 0 25 + // |------------------------|----------------- + // mul v28.8H, v24.8H, v17.8H // ....*...................................... + // mul v22.8H, v15.8H, v17.8H // *.......................................... + // mls v22.8H, v6.8H, v7.H[0] // ..*........................................ + // trn1 v15.2D, v30.2D, v1.2D // .*......................................... + // add v4.8H, v15.8H, v22.8H // .......*................................... + // sub v6.8H, v15.8H, v22.8H // ........*.................................. + // ldr q21, [x4, #-64] // .*......................................... + // trn1 v19.2D, v27.2D, v0.2D // ..*........................................ + // mul v30.8H, v4.8H, v21.8H // ...........*............................... + // sqrdmulh v23.8H, v6.8H, v25.8H // .............*............................. + // ldr q2, [x4, #-32] // *.......................................... + // mul v6.8H, v6.8H, v2.8H // .................*......................... + // mls v28.8H, v12.8H, v7.H[0] // ......*.................................... + // mls v6.8H, v23.8H, v7.H[0] // ...................*....................... + // sqrdmulh v31.8H, v4.8H, v31.8H // .........*................................. + // sub v2.8H, v19.8H, v28.8H // ............*.............................. + // add v4.8H, v2.8H, v6.8H // ..........................*................ + // mls v30.8H, v31.8H, v7.H[0] // ...............*........................... + // sub v5.8H, v2.8H, v6.8H // ........................*.................. + // add v10.8H, v19.8H, v28.8H // ...........*............................... + // sqdmulh v1.8H, v4.8H, v7.H[1] // ............................*.............. + // sqdmulh v18.8H, v5.8H, v7.H[1] // ..........................*................ + // add v2.8H, v10.8H, v30.8H // ....................*...................... + // sub v3.8H, v10.8H, v30.8H // .....................*..................... + // srshr v16.8H, v1.8H, #11 // .................................*......... + // sqdmulh v8.8H, v2.8H, v7.H[1] // ......................*.................... + // srshr v13.8H, v18.8H, #11 // ...............................*........... + // sqdmulh v24.8H, v3.8H, v7.H[1] // ........................*.................. + // mls v4.8H, v16.8H, v7.H[0] // .....................................*..... + // srshr v8.8H, v8.8H, #11 // ...........................*............... + // mls v5.8H, v13.8H, v7.H[0] // ...................................*....... + // srshr v19.8H, v24.8H, #11 // .............................*............. + // mls v2.8H, v8.8H, v7.H[0] // ...............................*........... + // mls v3.8H, v19.8H, v7.H[0] // .................................*......... + // st4 {v2.4S, v3.4S, v4.4S, v5.4S}, [x0], #64 // ..........................................* pop_stack diff --git a/mlkem/asm/aarch64/poly_opt.S b/mlkem/asm/aarch64/poly_opt.S index 6e666e152..b94f59317 100644 --- a/mlkem/asm/aarch64/poly_opt.S +++ b/mlkem/asm/aarch64/poly_opt.S @@ -52,143 +52,143 @@ _poly_reduce_asm_opt: ld1 {consts.8h}, [xtmp] mov count, #8 - // Instructions: 4 - // Expected cycles: 7 - // Expected IPC: 0.57 - - // Cycle bound: 7.0 - // IPC bound: 0.57 - - // Wall time: 0.00s - // User time: 0.00s - - // ----- cycle (expected) ------> - // 0 25 - // |------------------------|---- - ldr q24, [x0], #64 // *............................. - ldr q22, [x0, #-48] // ..*........................... - ldr q25, [x0, #-32] // ....*......................... - ldr q7, [x0, #-16] // ......*....................... - - // ------ cycle (expected) ------> - // 0 25 - // |------------------------|----- - // ldr q24, [x0], #64 // *.............................. - // ldr q22, [x0, #-48] // ..*............................ - // ldr q25, [x0, #-32] // ....*.......................... - // ldr q7, [x0, #-16] // ......*........................ + // Instructions: 6 + // Expected cycles: 14 + // Expected IPC: 0.43 + + // Cycle bound: 14.0 + // IPC bound: 0.43 + + // Wall time: 0.01s + // User time: 0.01s + + // ----- cycle (expected) ------> + // 0 25 + // |------------------------|---- + ldr q29, [x0, #32] // *............................. + ldr q30, [x0, #16] // .*............................ + ldr q21, [x0, #48] // ..*........................... + sqdmulh v17.8H, v29.8H, v2.H[1] // ....*......................... + srshr v20.8H, v17.8H, #11 // .........*.................... + mls v29.8H, v20.8H, v2.H[0] // .............*................ + + // ------ cycle (expected) ------> + // 0 25 + // |------------------------|----- + // ldr q29, [x0, #32] // *.............................. + // sqdmulh v6.8H, v29.8H, v2.H[1] // ....*.......................... + // srshr v26.8H, v6.8H, #11 // .........*..................... + // ldr q30, [x0, #16] // .*............................. + // mls v29.8H, v26.8H, v2.H[0] // .............*................. + // ldr q21, [x0, #48] // ..*............................ sub count, count, #1 loop_start: // Instructions: 20 - // Expected cycles: 24 - // Expected IPC: 0.83 + // Expected cycles: 19 + // Expected IPC: 1.05 - // Cycle bound: 24.0 - // IPC bound: 0.83 + // Cycle bound: 19.0 + // IPC bound: 1.05 - // Wall time: 0.34s - // User time: 0.34s + // Wall time: 17.67s + // User time: 17.67s // ----- cycle (expected) ------> // 0 25 // |------------------------|---- - sqdmulh v17.8H, v24.8H, v2.H[1] // *............................. - sqdmulh v4.8H, v22.8H, v2.H[1] // .*............................ - sqdmulh v28.8H, v25.8H, v2.H[1] // ..*........................... - sqdmulh v20.8H, v7.8H, v2.H[1] // ...*.......................... - srshr v17.8H, v17.8H, #11 // ....*......................... - srshr v4.8H, v4.8H, #11 // .....*........................ - srshr v28.8H, v28.8H, #11 // ......*....................... - srshr v20.8H, v20.8H, #11 // .......*...................... - mls v24.8H, v17.8H, v2.H[0] // ........*..................... - mls v22.8H, v4.8H, v2.H[0] // .........*.................... - mls v25.8H, v28.8H, v2.H[0] // ..........*................... - mls v7.8H, v20.8H, v2.H[0] // ...........*.................. - str q24, [x0, #-64] // ............*................. - ldr q24, [x0], #64 // .............e................ - str q22, [x0, #-112] // ...............*.............. - ldr q22, [x0, #-48] // ................e............. - str q25, [x0, #-96] // ..................*........... - ldr q25, [x0, #-32] // ...................e.......... - str q7, [x0, #-80] // .....................*........ - ldr q7, [x0, #-16] // ......................e....... - - // ------- cycle (expected) -------> + sqdmulh v26.8H, v30.8H, v2.H[1] // *............................. + ldr q3, [x0], #64 // *............................. + str q29, [x0, #-32] // .*............................ + sqdmulh v4.8H, v21.8H, v2.H[1] // ..*........................... + ldr q29, [x0, #32] // ..e........................... + sqdmulh v5.8H, v3.8H, v2.H[1] // ....*......................... + srshr v17.8H, v26.8H, #11 // .....*........................ + sqdmulh v6.8H, v29.8H, v2.H[1] // ......e....................... + srshr v27.8H, v4.8H, #11 // .......*...................... + mls v30.8H, v17.8H, v2.H[0] // .........*.................... + srshr v0.8H, v5.8H, #11 // .........*.................... + mls v21.8H, v27.8H, v2.H[0] // ...........*.................. + srshr v26.8H, v6.8H, #11 // ...........e.................. + mls v3.8H, v0.8H, v2.H[0] // .............*................ + str q30, [x0, #-48] // ..............*............... + ldr q30, [x0, #16] // ...............e.............. + mls v29.8H, v26.8H, v2.H[0] // ...............e.............. + str q21, [x0, #-16] // ................*............. + ldr q21, [x0, #48] // .................e............ + str q3, [x0, #-64] // ..................*........... + + // -------- cycle (expected) ---------> // 0 25 - // |------------------------|------- - // ldr q0, [x0], #64 // e..........'............~........ - // sqdmulh v1.8h, v0.8h, v2.h[1] // ...........*..................... - // srshr v1.8h, v1.8h, #11 // ...........'...*................. - // mls v0.8h, v1.8h, v2.h[0] // ...........'.......*............. - // str q0, [x0, #-64] // ...........'...........*......... - // ldr q0, [x0, #-48] // ...e.......'...............~..... - // sqdmulh v1.8h, v0.8h, v2.h[1] // ...........'*.................... - // srshr v1.8h, v1.8h, #11 // ...........'....*................ - // mls v0.8h, v1.8h, v2.h[0] // ...........'........*............ - // str q0, [x0, #-48] // ..~........'..............*...... - // ldr q0, [x0, #-32] // ......e....'..................~.. - // sqdmulh v1.8h, v0.8h, v2.h[1] // ...........'.*................... - // srshr v1.8h, v1.8h, #11 // ...........'.....*............... - // mls v0.8h, v1.8h, v2.h[0] // ...........'.........*........... - // str q0, [x0, #-32] // .....~.....'.................*... - // ldr q0, [x0, #-16] // .........e.'..................... - // sqdmulh v1.8h, v0.8h, v2.h[1] // ...........'..*.................. - // srshr v1.8h, v1.8h, #11 // ...........'......*.............. - // mls v0.8h, v1.8h, v2.h[0] // ...........'..........*.......... - // str q0, [x0, #-16] // ........~..'....................* + // |------------------------|---------- + // ldr q0, [x0], #64 // .................*.................. + // sqdmulh v1.8h, v0.8h, v2.h[1] // ..~..............'...*.............. + // srshr v1.8h, v1.8h, #11 // .......~.........'........*......... + // mls v0.8h, v1.8h, v2.h[0] // ...........~.....'............*..... + // str q0, [x0, #-64] // ................~'.................* + // ldr q0, [x0, #-48] // .............e...'..............~... + // sqdmulh v1.8h, v0.8h, v2.h[1] // .................*.................. + // srshr v1.8h, v1.8h, #11 // ...~.............'....*............. + // mls v0.8h, v1.8h, v2.h[0] // .......~.........'........*......... + // str q0, [x0, #-48] // ............~....'.............*.... + // ldr q0, [x0, #-32] // e................'.~................ + // sqdmulh v1.8h, v0.8h, v2.h[1] // ....e............'.....~............ + // srshr v1.8h, v1.8h, #11 // .........e.......'..........~....... + // mls v0.8h, v1.8h, v2.h[0] // .............e...'..............~... + // str q0, [x0, #-32] // .................'*................. + // ldr q0, [x0, #-16] // ...............e.'................~. + // sqdmulh v1.8h, v0.8h, v2.h[1] // ~................'.*................ + // srshr v1.8h, v1.8h, #11 // .....~...........'......*........... + // mls v0.8h, v1.8h, v2.h[0] // .........~.......'..........*....... + // str q0, [x0, #-16] // ..............~..'...............*.. sub count, count, #1 cbnz count, loop_start - // Instructions: 16 - // Expected cycles: 18 - // Expected IPC: 0.89 + // Instructions: 14 + // Expected cycles: 19 + // Expected IPC: 0.74 - // Cycle bound: 18.0 - // IPC bound: 0.89 + // Cycle bound: 19.0 + // IPC bound: 0.74 - // Wall time: 0.03s - // User time: 0.03s + // Wall time: 0.04s + // User time: 0.04s // ----- cycle (expected) ------> // 0 25 // |------------------------|---- - sqdmulh v3.8H, v24.8H, v2.H[1] // *............................. - sqdmulh v23.8H, v22.8H, v2.H[1] // .*............................ - sqdmulh v6.8H, v25.8H, v2.H[1] // ..*........................... - sqdmulh v29.8H, v7.8H, v2.H[1] // ...*.......................... - srshr v18.8H, v3.8H, #11 // ....*......................... - srshr v0.8H, v23.8H, #11 // .....*........................ - srshr v23.8H, v6.8H, #11 // ......*....................... - mls v24.8H, v18.8H, v2.H[0] // .......*...................... - srshr v20.8H, v29.8H, #11 // ........*..................... - mls v25.8H, v23.8H, v2.H[0] // .........*.................... - mls v22.8H, v0.8H, v2.H[0] // ..........*................... - str q24, [x0, #-64] // ...........*.................. - mls v7.8H, v20.8H, v2.H[0] // ............*................. - str q25, [x0, #-32] // .............*................ - str q22, [x0, #-48] // ...............*.............. - str q7, [x0, #-16] // .................*............ + sqdmulh v3.8H, v21.8H, v2.H[1] // *............................. + ldr q25, [x0], #64 // *............................. + str q29, [x0, #-32] // .*............................ + sqdmulh v6.8H, v30.8H, v2.H[1] // ..*........................... + sqdmulh v31.8H, v25.8H, v2.H[1] // ....*......................... + srshr v3.8H, v3.8H, #11 // .....*........................ + srshr v6.8H, v6.8H, #11 // .......*...................... + mls v21.8H, v3.8H, v2.H[0] // .........*.................... + srshr v3.8H, v31.8H, #11 // .........*.................... + mls v30.8H, v6.8H, v2.H[0] // ...........*.................. + mls v25.8H, v3.8H, v2.H[0] // .............*................ + str q21, [x0, #-16] // ..............*............... + str q30, [x0, #-48] // ................*............. + str q25, [x0, #-64] // ..................*........... // ------ cycle (expected) ------> // 0 25 // |------------------------|----- - // sqdmulh v17.8H, v24.8H, v2.H[1] // *.............................. - // sqdmulh v4.8H, v22.8H, v2.H[1] // .*............................. - // sqdmulh v28.8H, v25.8H, v2.H[1] // ..*............................ - // sqdmulh v20.8H, v7.8H, v2.H[1] // ...*........................... - // srshr v17.8H, v17.8H, #11 // ....*.......................... - // srshr v4.8H, v4.8H, #11 // .....*......................... - // srshr v28.8H, v28.8H, #11 // ......*........................ - // srshr v20.8H, v20.8H, #11 // ........*...................... - // mls v24.8H, v17.8H, v2.H[0] // .......*....................... - // mls v22.8H, v4.8H, v2.H[0] // ..........*.................... - // mls v25.8H, v28.8H, v2.H[0] // .........*..................... - // mls v7.8H, v20.8H, v2.H[0] // ............*.................. - // str q24, [x0, #-64] // ...........*................... - // str q22, [x0, #-48] // ...............*............... - // str q25, [x0, #-32] // .............*................. - // str q7, [x0, #-16] // .................*............. + // sqdmulh v26.8H, v30.8H, v2.H[1] // ..*............................ + // ldr q3, [x0], #64 // *.............................. + // str q29, [x0, #-32] // .*............................. + // sqdmulh v4.8H, v21.8H, v2.H[1] // *.............................. + // sqdmulh v5.8H, v3.8H, v2.H[1] // ....*.......................... + // srshr v17.8H, v26.8H, #11 // .......*....................... + // srshr v27.8H, v4.8H, #11 // .....*......................... + // mls v30.8H, v17.8H, v2.H[0] // ...........*................... + // srshr v0.8H, v5.8H, #11 // .........*..................... + // mls v21.8H, v27.8H, v2.H[0] // .........*..................... + // mls v3.8H, v0.8H, v2.H[0] // .............*................. + // str q30, [x0, #-48] // ................*.............. + // str q21, [x0, #-16] // ..............*................ + // str q3, [x0, #-64] // ..................*............ ret @@ -237,99 +237,99 @@ _poly_mulcache_compute_asm_opt: ld1 {consts.8h}, [xtmp] mov count, #(16) - // Instructions: 7 - // Expected cycles: 12 - // Expected IPC: 0.58 + // Instructions: 7 + // Expected cycles: 9 + // Expected IPC: 0.78 - // Cycle bound: 12.0 - // IPC bound: 0.58 + // Cycle bound: 9.0 + // IPC bound: 0.78 - // Wall time: 0.01s - // User time: 0.01s + // Wall time: 0.03s + // User time: 0.03s - // ----- cycle (expected) ------> - // 0 25 - // |------------------------|---- - ldr q21, [x1], #32 // *............................. - ldr q0, [x1, #-16] // ..*........................... - ldr q2, [x3], #16 // ....*......................... - uzp2 v21.8H, v21.8H, v0.8H // ......*....................... - ldr q29, [x2], #16 // .......*...................... - sqrdmulh v28.8H, v21.8H, v2.8H // .........*.................... - mul v1.8H, v21.8H, v29.8H // ...........*.................. + // ----- cycle (expected) ------> + // 0 25 + // |------------------------|---- + ldr q3, [x1], #32 // *............................. + ldr q21, [x1, #-16] // *............................. + ldr q30, [x3], #16 // .*............................ + uzp2 v21.8H, v3.8H, v21.8H // ....*......................... + ldr q3, [x2], #16 // ....*......................... + sqrdmulh v20.8H, v21.8H, v30.8H // ......*....................... + mul v25.8H, v21.8H, v3.8H // ........*..................... // ------ cycle (expected) ------> // 0 25 // |------------------------|----- - // ldr q20, [x1], #32 // *.............................. - // ldr q25, [x1, #-16] // ..*............................ - // ldr q21, [x3], #16 // ....*.......................... - // uzp2 v22.8H, v20.8H, v25.8H // ......*........................ - // ldr q30, [x2], #16 // .......*....................... - // sqrdmulh v28.8H, v22.8H, v21.8H // .........*..................... - // mul v1.8H, v22.8H, v30.8H // ...........*................... + // ldr q21, [x1], #32 // *.............................. + // ldr q3, [x1, #-16] // *.............................. + // ldr q30, [x3], #16 // .*............................. + // ldr q31, [x2], #16 // ....*.......................... + // uzp2 v21.8H, v21.8H, v3.8H // ....*.......................... + // sqrdmulh v20.8H, v21.8H, v30.8H // ......*........................ + // mul v25.8H, v21.8H, v31.8H // ........*...................... sub count, count, #1 mulcache_compute_loop_start: // Instructions: 9 - // Expected cycles: 13 - // Expected IPC: 0.69 + // Expected cycles: 9 + // Expected IPC: 1.00 - // Cycle bound: 13.0 - // IPC bound: 0.69 + // Cycle bound: 9.0 + // IPC bound: 1.00 - // Wall time: 0.08s - // User time: 0.08s + // Wall time: 0.09s + // User time: 0.09s // ----- cycle (expected) ------> // 0 25 // |------------------------|---- - ldr q20, [x1], #32 // e............................. - ldr q25, [x1, #-16] // ..e........................... - ldr q21, [x3], #16 // ....e......................... - uzp2 v22.8H, v20.8H, v25.8H // ......e....................... - mls v1.8H, v28.8H, v6.H[0] // .......*...................... - ldr q30, [x2], #16 // ........e..................... - sqrdmulh v28.8H, v22.8H, v21.8H // ..........e................... - str q1, [x0], #16 // ...........*.................. - mul v1.8H, v22.8H, v30.8H // ............e................. + ldr q21, [x1], #32 // e............................. + ldr q3, [x1, #-16] // e............................. + ldr q30, [x3], #16 // .e............................ + ldr q31, [x2], #16 // .e............................ + mls v25.8H, v20.8H, v6.H[0] // ..*........................... + uzp2 v21.8H, v21.8H, v3.8H // ....e......................... + sqrdmulh v20.8H, v21.8H, v30.8H // ......e....................... + str q25, [x0], #16 // .......*...................... + mul v25.8H, v21.8H, v31.8H // ........e..................... // ------ cycle (expected) ------> // 0 25 // |------------------------|----- - // ldr q4, [x1], #32 // e............~............~.... - // ldr q5, [x1, #-16] // ..e..........'.~..........'.~.. - // ldr q2, [x2], #16 // ........e....'.......~....'.... - // ldr q3, [x3], #16 // ....e........'...~........'.... - // uzp2 v1.8h, v4.8h, v5.8h // ......e......'.....~......'.... - // sqrdmulh v4.8h, v1.8h, v3.8h // ..........e..'.........~..'.... - // mul v7.8h, v1.8h, v2.8h // ............e'...........~'.... - // mls v7.8h, v4.8h, v6.h[0] // .......~.....'......*.....'.... - // str q7, [x0], #16 // ...........~.'..........*.'.... + // ldr q4, [x1], #32 // e........~........~........~... + // ldr q5, [x1, #-16] // e........~........~........~... + // ldr q2, [x2], #16 // .e.......'~.......'~.......'~.. + // ldr q3, [x3], #16 // .e.......'~.......'~.......'~.. + // uzp2 v1.8h, v4.8h, v5.8h // ....e....'...~....'...~....'... + // sqrdmulh v4.8h, v1.8h, v3.8h // ......e..'.....~..'.....~..'... + // mul v7.8h, v1.8h, v2.8h // ........e'.......~'.......~'... + // mls v7.8h, v4.8h, v6.h[0] // ..~......'.*......'.~......'.~. + // str q7, [x0], #16 // .......~.'......*.'......~.'... sub count, count, #1 cbnz count, mulcache_compute_loop_start - // Instructions: 2 - // Expected cycles: 5 - // Expected IPC: 0.40 + // Instructions: 2 + // Expected cycles: 6 + // Expected IPC: 0.33 - // Cycle bound: 5.0 - // IPC bound: 0.40 + // Cycle bound: 6.0 + // IPC bound: 0.33 - // Wall time: 0.00s - // User time: 0.00s + // Wall time: 0.00s + // User time: 0.00s - // ----- cycle (expected) ------> - // 0 25 - // |------------------------|---- - mls v1.8H, v28.8H, v6.H[0] // *............................. - str q1, [x0], #16 // ....*......................... - - // ------ cycle (expected) ------> + // ----- cycle (expected) ------> // 0 25 - // |------------------------|----- - // mls v1.8H, v28.8H, v6.H[0] // *.............................. - // str q1, [x0], #16 // ....*.......................... + // |------------------------|---- + mls v25.8H, v20.8H, v6.H[0] // *............................. + str q25, [x0], #16 // .....*........................ + + // ------ cycle (expected) ------> + // 0 25 + // |------------------------|----- + // mls v25.8H, v20.8H, v6.H[0] // *.............................. + // str q25, [x0], #16 // .....*......................... ret @@ -390,7 +390,7 @@ _poly_tobytes_asm_opt: dup modulus.8h, wmodulus mov count, #16 -poly_tobytes_asm_clean_asm_loop_start: +poly_tobytes_asm_opt_asm_loop_start: ld2 {data0.8h, data1.8h}, [src], #32 // t0 = scalar_signed_to_unsigned_q_16(a->coeffs[2 * i]); @@ -413,7 +413,7 @@ poly_tobytes_asm_clean_asm_loop_start: st3 {out0.8b, out1.8b, out2.8b}, [dst], #24 subs count, count, #1 - cbnz count, poly_tobytes_asm_clean_asm_loop_start + cbnz count, poly_tobytes_asm_opt_asm_loop_start ret .unreq data0 @@ -466,39 +466,31 @@ _poly_tomont_asm_opt: dup factor_t.8h, wtmp2 mov count, #8 - // Instructions: 8 - // Expected cycles: 14 - // Expected IPC: 0.57 - // - // Cycle bound: 14.0 - // IPC bound: 0.57 - // - // Wall time: 0.01s - // User time: 0.01s - // - // ----- cycle (expected) ------> - // 0 25 - // |------------------------|---- - ldr q19, [x0, #16] // *............................. - ldr q25, [x0, #48] // ..*........................... - sqrdmulh v5.8H, v19.8H, v4.8H // ....*......................... - mul v19.8H, v19.8H, v3.8H // .....*........................ - mul v18.8H, v25.8H, v3.8H // ......*....................... - ldr q20, [x0, #32] // .......*...................... - mls v19.8H, v5.8H, v2.H[0] // .........*.................... - str q19, [x0, #16] // .............*................ - - // ------ cycle (expected) ------> - // 0 25 - // |------------------------|----- - // ldr q0, [x0, #16] // *.............................. - // sqrdmulh v6.8H, v0.8H, v4.8H // ....*.......................... - // mul v19.8H, v0.8H, v3.8H // .....*......................... - // mls v19.8H, v6.8H, v2.H[0] // .........*..................... - // str q19, [x0, #16] // .............*................. - // ldr q25, [x0, #48] // ..*............................ - // ldr q20, [x0, #32] // .......*....................... - // mul v18.8H, v25.8H, v3.8H // ......*........................ + // Instructions: 4 + // Expected cycles: 7 + // Expected IPC: 0.57 + // + // Cycle bound: 7.0 + // IPC bound: 0.57 + // + // Wall time: 0.01s + // User time: 0.01s + // + // ----- cycle (expected) ------> + // 0 25 + // |------------------------|---- + ldr q16, [x0, #32] // *............................. + ldr q0, [x0], #64 // *............................. + sqrdmulh v21.8H, v0.8H, v4.8H // ....*......................... + sqrdmulh v18.8H, v16.8H, v4.8H // ......*....................... + + // ------ cycle (expected) ------> + // 0 25 + // |------------------------|----- + // ldr q16, [x0, #32] // *.............................. + // ldr q0, [x0], #64 // *.............................. + // sqrdmulh v21.8H, v0.8H, v4.8H // ....*.......................... + // sqrdmulh v18.8H, v16.8H, v4.8H // ......*........................ sub count, count, #1 poly_tomont_asm_loop: @@ -509,100 +501,108 @@ poly_tomont_asm_loop: // Cycle bound: 24.0 // IPC bound: 0.83 // - // Wall time: 0.58s - // User time: 0.58s + // Wall time: 0.44s + // User time: 0.44s // // ----- cycle (expected) ------> // 0 25 // |------------------------|---- - ldr q17, [x0], #64 // *............................. - ldr q0, [x0, #16] // ..e........................... - sqrdmulh v5.8H, v17.8H, v4.8H // ....*......................... - mul v17.8H, v17.8H, v3.8H // .....*........................ - sqrdmulh v6.8H, v0.8H, v4.8H // ......e....................... - mul v19.8H, v0.8H, v3.8H // .......e...................... - sqrdmulh v7.8H, v20.8H, v4.8H // ........*..................... - mls v17.8H, v5.8H, v2.H[0] // .........*.................... - sqrdmulh v27.8H, v25.8H, v4.8H // ..........*................... - mls v19.8H, v6.8H, v2.H[0] // ...........e.................. - mul v29.8H, v20.8H, v3.8H // ............*................. - str q17, [x0, #-64] // .............*................ - mls v18.8H, v27.8H, v2.H[0] // ..............*............... - str q19, [x0, #16] // ...............e.............. - ldr q25, [x0, #48] // ................e............. - str q18, [x0, #-16] // ..................*........... - mls v29.8H, v7.8H, v2.H[0] // ...................*.......... - ldr q20, [x0, #32] // ....................e......... - mul v18.8H, v25.8H, v3.8H // ......................e....... - str q29, [x0, #-32] // .......................*...... - - // ------------- cycle (expected) --------------> + ldr q22, [x0, #-48] // *............................. + mul v1.8H, v0.8H, v3.8H // *............................. + mul v16.8H, v16.8H, v3.8H // ..*........................... + ldr q20, [x0, #-16] // ....*......................... + sqrdmulh v27.8H, v22.8H, v4.8H // ....*......................... + mul v0.8H, v22.8H, v3.8H // ......*....................... + mls v16.8H, v18.8H, v2.H[0] // ........*..................... + mls v0.8H, v27.8H, v2.H[0] // ..........*................... + sqrdmulh v7.8H, v20.8H, v4.8H // ............*................. + str q16, [x0, #-32] // .............*................ + mls v1.8H, v21.8H, v2.H[0] // ..............*............... + ldr q16, [x0, #32] // ..............e............... + str q0, [x0, #-48] // ...............*.............. + ldr q0, [x0], #64 // ...............e.............. + mul v17.8H, v20.8H, v3.8H // ................*............. + mls v17.8H, v7.8H, v2.H[0] // ..................*........... + str q1, [x0, #-128] // ...................*.......... + sqrdmulh v21.8H, v0.8H, v4.8H // ....................e......... + sqrdmulh v18.8H, v16.8H, v4.8H // ......................e....... + str q17, [x0, #-80] // .......................*...... + + // ------- cycle (expected) --------> // 0 25 - // |------------------------|-------------------- - // ldr q0, [x0], #64 // ......................*....................... - // sqrdmulh v5.8h, v0.8h, v4.8h // ..~...................'...*................... - // mul v1.8h, v0.8h, v3.8h // ...~..................'....*.................. - // mls v1.8h, v5.8h, v2.h[0] // .......~..............'........*.............. - // str q1, [x0, #-64] // ...........~..........'............*.......... - // ldr q0, [x0, #-48] // e.....................'.~..................... - // sqrdmulh v5.8h, v0.8h, v4.8h // ....e.................'.....~................. - // mul v1.8h, v0.8h, v3.8h // .....e................'......~................ - // mls v1.8h, v5.8h, v2.h[0] // .........e............'..........~............ - // str q1, [x0, #-48] // .............e........'..............~........ - // ldr q0, [x0, #-32] // ..................e...'...................~... - // sqrdmulh v5.8h, v0.8h, v4.8h // ......~...............'.......*............... - // mul v1.8h, v0.8h, v3.8h // ..........~...........'...........*........... - // mls v1.8h, v5.8h, v2.h[0] // .................~....'..................*.... - // str q1, [x0, #-32] // .....................~'......................* - // ldr q0, [x0, #-16] // ..............e.......'...............~....... - // sqrdmulh v5.8h, v0.8h, v4.8h // ........~.............'.........*............. - // mul v1.8h, v0.8h, v3.8h // ....................e.'.....................~. - // mls v1.8h, v5.8h, v2.h[0] // ............~.........'.............*......... - // str q1, [x0, #-16] // ................~.....'.................*..... + // |------------------------|-------- + // ldr q0, [x0], #64 // .e........'..............~........ + // sqrdmulh v5.8h, v0.8h, v4.8h // ......e...'...................~... + // mul v1.8h, v0.8h, v3.8h // ..........*....................... + // mls v1.8h, v5.8h, v2.h[0] // ~.........'.............*......... + // str q1, [x0, #-64] // .....~....'..................*.... + // ldr q0, [x0, #-48] // ..........*....................... + // sqrdmulh v5.8h, v0.8h, v4.8h // ..........'...*................... + // mul v1.8h, v0.8h, v3.8h // ..........'.....*................. + // mls v1.8h, v5.8h, v2.h[0] // ..........'.........*............. + // str q1, [x0, #-48] // .~........'..............*........ + // ldr q0, [x0, #-32] // e.........'.............~......... + // sqrdmulh v5.8h, v0.8h, v4.8h // ........e.'.....................~. + // mul v1.8h, v0.8h, v3.8h // ..........'.*..................... + // mls v1.8h, v5.8h, v2.h[0] // ..........'.......*............... + // str q1, [x0, #-32] // ..........'............*.......... + // ldr q0, [x0, #-16] // ..........'...*................... + // sqrdmulh v5.8h, v0.8h, v4.8h // ..........'...........*........... + // mul v1.8h, v0.8h, v3.8h // ..~.......'...............*....... + // mls v1.8h, v5.8h, v2.h[0] // ....~.....'.................*..... + // str q1, [x0, #-16] // .........~'......................* sub count, count, #1 cbnz count, poly_tomont_asm_loop - // Instructions: 12 - // Expected cycles: 16 - // Expected IPC: 0.75 + // Instructions: 16 + // Expected cycles: 24 + // Expected IPC: 0.67 // - // Cycle bound: 16.0 - // IPC bound: 0.75 + // Cycle bound: 24.0 + // IPC bound: 0.67 // - // Wall time: 0.03s - // User time: 0.03s + // Wall time: 0.06s + // User time: 0.06s // // ----- cycle (expected) ------> // 0 25 // |------------------------|---- - sqrdmulh v19.8H, v25.8H, v4.8H // *............................. - ldr q5, [x0], #64 // .*............................ - sqrdmulh v26.8H, v20.8H, v4.8H // ...*.......................... - mls v18.8H, v19.8H, v2.H[0] // ....*......................... - mul v19.8H, v20.8H, v3.8H // .....*........................ - sqrdmulh v23.8H, v5.8H, v4.8H // ......*....................... - mul v27.8H, v5.8H, v3.8H // .......*...................... - str q18, [x0, #-16] // ........*..................... - mls v19.8H, v26.8H, v2.H[0] // .........*.................... - mls v27.8H, v23.8H, v2.H[0] // ...........*.................. - str q19, [x0, #-32] // .............*................ - str q27, [x0, #-64] // ...............*.............. + mul v6.8H, v0.8H, v3.8H // *............................. + ldr q30, [x0, #-48] // *............................. + ldr q31, [x0, #-16] // .*............................ + mul v25.8H, v16.8H, v3.8H // ..*........................... + mls v25.8H, v18.8H, v2.H[0] // ....*......................... + mls v6.8H, v21.8H, v2.H[0] // ......*....................... + sqrdmulh v21.8H, v30.8H, v4.8H // ........*..................... + str q25, [x0, #-32] // .........*.................... + mul v30.8H, v30.8H, v3.8H // ..........*................... + str q6, [x0, #-64] // ...........*.................. + sqrdmulh v6.8H, v31.8H, v4.8H // ............*................. + mul v31.8H, v31.8H, v3.8H // ..............*............... + mls v30.8H, v21.8H, v2.H[0] // ................*............. + mls v31.8H, v6.8H, v2.H[0] // ..................*........... + str q30, [x0, #-48] // .....................*........ + str q31, [x0, #-16] // .......................*...... // ------ cycle (expected) ------> // 0 25 // |------------------------|----- - // ldr q17, [x0], #64 // .*............................. - // sqrdmulh v5.8H, v17.8H, v4.8H // ......*........................ - // mul v17.8H, v17.8H, v3.8H // .......*....................... - // sqrdmulh v7.8H, v20.8H, v4.8H // ...*........................... - // mls v17.8H, v5.8H, v2.H[0] // ...........*................... - // sqrdmulh v27.8H, v25.8H, v4.8H // *.............................. - // mul v29.8H, v20.8H, v3.8H // .....*......................... - // str q17, [x0, #-64] // ...............*............... - // mls v18.8H, v27.8H, v2.H[0] // ....*.......................... - // str q18, [x0, #-16] // ........*...................... - // mls v29.8H, v7.8H, v2.H[0] // .........*..................... - // str q29, [x0, #-32] // .............*................. + // ldr q22, [x0, #-48] // *.............................. + // mul v1.8H, v0.8H, v3.8H // *.............................. + // mul v16.8H, v16.8H, v3.8H // ..*............................ + // ldr q20, [x0, #-16] // .*............................. + // sqrdmulh v27.8H, v22.8H, v4.8H // ........*...................... + // mul v0.8H, v22.8H, v3.8H // ..........*.................... + // mls v16.8H, v18.8H, v2.H[0] // ....*.......................... + // mls v0.8H, v27.8H, v2.H[0] // ................*.............. + // sqrdmulh v7.8H, v20.8H, v4.8H // ............*.................. + // str q16, [x0, #-32] // .........*..................... + // mls v1.8H, v21.8H, v2.H[0] // ......*........................ + // str q0, [x0, #-48] // .....................*......... + // mul v17.8H, v20.8H, v3.8H // ..............*................ + // mls v17.8H, v7.8H, v2.H[0] // ..................*............ + // str q1, [x0, #-64] // ...........*................... + // str q17, [x0, #-16] // .......................*....... ret diff --git a/mlkem/asm/aarch64/polyvec_opt.S b/mlkem/asm/aarch64/polyvec_opt.S index 2d5e92139..c57b650e3 100644 --- a/mlkem/asm/aarch64/polyvec_opt.S +++ b/mlkem/asm/aarch64/polyvec_opt.S @@ -1,10 +1,10 @@ // SPDX-License-Identifier: Apache-2.0 -// + // AArch64 re-implementation of the asymmetric base multiplication from: -// + // Neon NTT: Faster Dilithium, Kyber, and Saber on Cortex-A72 and Apple M1 -// https://eprint.iacr.org/2021/986 -// https://github.com/neon-ntt/neon-ntt +// https: // eprint.iacr.org/2021/986 +// https: // github.com/neon-ntt/neon-ntt #include "config.h" #if defined(MLKEM_USE_AARCH64_ASM) @@ -184,387 +184,387 @@ _polyvec_basemul_acc_montgomery_cached_asm_k2_opt: add b1_cache_ptr, b0_cache_ptr, #(1 * 512/2) mov count, #(KYBER_N / 16) - // Instructions: 45 - // Expected cycles: 62 - // Expected IPC: 0.73 - - // Cycle bound: 62.0 - // IPC bound: 0.73 - - // Wall time: 3.65s - // User time: 3.65s - - // --------------------- cycle (expected) ----------------------> - // 0 25 50 - // |------------------------|------------------------|----------- - ldr q14, [x1, #16] // *............................................................. - ldr q18, [x1], #32 // ..*........................................................... - ldr q10, [x2, #16] // ....*......................................................... - ldr q13, [x2], #32 // ......*....................................................... - uzp2 v27.8H, v18.8H, v14.8H // ........*..................................................... - uzp1 v15.8H, v18.8H, v14.8H // .........*.................................................... - uzp2 v12.8H, v13.8H, v10.8H // ..........*................................................... - uzp1 v29.8H, v13.8H, v10.8H // ...........*.................................................. - smull2 v3.4S, v15.8H, v12.8H // ............*................................................. - smull v21.4S, v15.4H, v12.4H // .............*................................................ - ld1 {v14.8H}, [x3], #16 // ..............*............................................... - ldr q24, [x4], #32 // ................*............................................. - ldr q7, [x4, #-16] // ..................*........................................... - ldr q8, [x4], #32 // ....................*......................................... - uzp2 v11.8H, v24.8H, v7.8H // ......................*....................................... - uzp1 v5.8H, v24.8H, v7.8H // .......................*...................................... - ldr q23, [x4, #-16] // ........................*..................................... - smlal v21.4S, v27.4H, v29.4H // ..........................*................................... - ldr q7, [x2], #32 // ...........................*.................................. - ldr q13, [x5], #32 // .............................*................................ - ldr q6, [x5, #-16] // ...............................*.............................. - ldr q12, [x5], #32 // .................................*............................ - smlal2 v3.4S, v27.8H, v29.8H // ...................................*.......................... - uzp2 v25.8H, v13.8H, v6.8H // ....................................*......................... - uzp1 v30.8H, v13.8H, v6.8H // .....................................*........................ - smlal v21.4S, v5.4H, v25.4H // ......................................*....................... - smlal2 v3.4S, v5.8H, v25.8H // .......................................*...................... - ldr q10, [x2, #-16] // ........................................*..................... - smlal v21.4S, v11.4H, v30.4H // ..........................................*................... - smlal2 v3.4S, v11.8H, v30.8H // ...........................................*.................. - smull2 v31.4S, v15.8H, v29.8H // ............................................*................. - ldr q26, [x5, #-16] // .............................................*................ - uzp1 v13.8H, v21.8H, v3.8H // ...............................................*.............. - smlal2 v31.4S, v27.8H, v14.8H // ................................................*............. - mul v20.8H, v13.8H, v2.H[2] // .................................................*............ - ld1 {v24.8H}, [x6], #16 // ..................................................*........... - smlal2 v31.4S, v5.8H, v30.8H // ....................................................*......... - smlal v21.4S, v20.4H, v0.4H // .....................................................*........ - smlal2 v3.4S, v20.8H, v0.8H // ......................................................*....... - uzp2 v1.8H, v7.8H, v10.8H // .......................................................*...... - smlal2 v31.4S, v11.8H, v24.8H // ........................................................*..... - uzp2 v28.8H, v12.8H, v26.8H // .........................................................*.... - uzp2 v3.8H, v21.8H, v3.8H // ..........................................................*... - ldr q13, [x1, #16] // ...........................................................*.. - ldr q21, [x1], #32 // .............................................................* - - // --------------------- cycle (expected) ----------------------> - // 0 25 50 - // |------------------------|------------------------|----------- - // ldr q7, [x2], #32 // ......*....................................................... - // ldr q23, [x4, #16] // ..................*........................................... - // ldr q21, [x1], #32 // ..*........................................................... - // ldr q26, [x5, #16] // ...............................*.............................. - // ldr q13, [x1, #-16] // *............................................................. - // ldr q8, [x4], #32 // ................*............................................. - // ldr q12, [x5], #32 // .............................*................................ - // ldr q10, [x2, #-16] // ....*......................................................... - // uzp2 v1.8H, v7.8H, v10.8H // ..........*................................................... - // uzp2 v28.8H, v12.8H, v26.8H // ....................................*......................... - // uzp1 v15.8H, v21.8H, v13.8H // .........*.................................................... - // uzp1 v29.8H, v7.8H, v10.8H // ...........*.................................................. - // smull2 v9.4S, v15.8H, v1.8H // ............*................................................. - // uzp2 v27.8H, v21.8H, v13.8H // ........*..................................................... - // smull v18.4S, v15.4H, v1.4H // .............*................................................ - // smlal2 v9.4S, v27.8H, v29.8H // ...................................*.......................... - // uzp1 v5.8H, v8.8H, v23.8H // .......................*...................................... - // smlal v18.4S, v27.4H, v29.4H // ..........................*................................... - // smlal2 v9.4S, v5.8H, v28.8H // .......................................*...................... - // uzp2 v11.8H, v8.8H, v23.8H // ......................*....................................... - // smlal v18.4S, v5.4H, v28.4H // ......................................*....................... - // uzp1 v30.8H, v12.8H, v26.8H // .....................................*........................ - // smlal2 v9.4S, v11.8H, v30.8H // ...........................................*.................. - // smlal v18.4S, v11.4H, v30.4H // ..........................................*................... - // ldr q7, [x2], #32 // ...........................*.................................. - // uzp1 v23.8H, v18.8H, v9.8H // ...............................................*.............. - // mul v17.8H, v23.8H, v2.H[2] // .................................................*............ - // ldr q23, [x4, #16] // ........................*..................................... - // ldr q21, [x1], #32 // .............................................................* - // smlal v18.4S, v17.4H, v0.4H // .....................................................*........ - // smlal2 v9.4S, v17.8H, v0.8H // ......................................................*....... - // ldr q26, [x5, #16] // .............................................*................ - // ldr q13, [x1, #-16] // ...........................................................*.. - // ldr q8, [x4], #32 // ....................*......................................... - // ld1 {v14.8H}, [x3], #16 // ..............*............................................... - // ldr q12, [x5], #32 // .................................*............................ - // smull2 v31.4S, v15.8H, v29.8H // ............................................*................. - // smlal2 v31.4S, v27.8H, v14.8H // ................................................*............. - // ldr q10, [x2, #-16] // ........................................*..................... - // smlal2 v31.4S, v5.8H, v30.8H // ....................................................*......... - // ld1 {v24.8H}, [x6], #16 // ..................................................*........... - // uzp2 v1.8H, v7.8H, v10.8H // .......................................................*...... - // uzp2 v3.8H, v18.8H, v9.8H // ..........................................................*... - // smlal2 v31.4S, v11.8H, v24.8H // ........................................................*..... - // uzp2 v28.8H, v12.8H, v26.8H // .........................................................*.... + // Instructions: 68 + // Expected cycles: 39 + // Expected IPC: 1.74 + + // Cycle bound: 39.0 + // IPC bound: 1.74 + + // Wall time: 1.49s + // User time: 1.49s + + // ---------- cycle (expected) ----------> + // 0 25 + // |------------------------|------------- + ldr q13, [x2, #16] // *...................................... + ldr q10, [x1], #32 // *...................................... + ldr q3, [x2], #32 // .*..................................... + ldr q21, [x1, #-16] // .*..................................... + ldr q6, [x4, #16] // ..*.................................... + ldr q12, [x5], #32 // ..*.................................... + ldr q30, [x4], #32 // ...*................................... + ld1 {v31.8H}, [x3], #16 // ...*................................... + ldr q5, [x5, #-16] // ....*.................................. + ld1 {v9.8H}, [x6], #16 // ....*.................................. + uzp2 v15.8H, v3.8H, v13.8H // .....*................................. + uzp1 v25.8H, v10.8H, v21.8H // .....*................................. + uzp1 v13.8H, v3.8H, v13.8H // ......*................................ + uzp2 v10.8H, v10.8H, v21.8H // ......*................................ + smull v29.4S, v25.4H, v15.4H // .......*............................... + uzp1 v21.8H, v30.8H, v6.8H // .......*............................... + smull2 v3.4S, v25.8H, v13.8H // ........*.............................. + ldr q20, [x2], #32 // ........*.............................. + uzp2 v1.8H, v30.8H, v6.8H // .........*............................. + smull v7.4S, v25.4H, v13.4H // .........*............................. + smlal v7.4S, v10.4H, v31.4H // ..........*............................ + uzp1 v27.8H, v12.8H, v5.8H // ..........*............................ + uzp2 v5.8H, v12.8H, v5.8H // ...........*........................... + smlal2 v3.4S, v10.8H, v31.8H // ...........*........................... + smlal2 v3.4S, v21.8H, v27.8H // ............*.......................... + ldr q31, [x2, #-16] // ............*.......................... + smlal2 v3.4S, v1.8H, v9.8H // .............*......................... + ldr q28, [x1], #32 // .............*......................... + smlal v7.4S, v21.4H, v27.4H // ..............*........................ + ldr q19, [x1, #-16] // ..............*........................ + smlal v7.4S, v1.4H, v9.4H // ...............*....................... + ldr q12, [x5], #32 // ...............*....................... + smull2 v30.4S, v25.8H, v15.8H // ................*...................... + ldr q25, [x4, #16] // ................*...................... + smlal2 v30.4S, v10.8H, v13.8H // .................*..................... + ld1 {v22.8H}, [x3], #16 // .................*..................... + smlal2 v30.4S, v21.8H, v5.8H // ..................*.................... + ldr q4, [x4], #32 // ..................*.................... + smlal2 v30.4S, v1.8H, v27.8H // ...................*................... + uzp1 v6.8H, v7.8H, v3.8H // ...................*................... + smlal v29.4S, v10.4H, v13.4H // ....................*.................. + uzp2 v15.8H, v20.8H, v31.8H // ....................*.................. + mul v13.8H, v6.8H, v2.H[2] // .....................*................. + ldr q24, [x5, #-16] // .....................*................. + uzp1 v6.8H, v28.8H, v19.8H // ......................*................ + ld1 {v11.8H}, [x6], #16 // ......................*................ + smlal v29.4S, v21.4H, v5.4H // .......................*............... + uzp1 v17.8H, v20.8H, v31.8H // .......................*............... + smlal v29.4S, v1.4H, v27.4H // ........................*.............. + uzp2 v23.8H, v28.8H, v19.8H // ........................*.............. + smull2 v20.4S, v6.8H, v17.8H // .........................*............. + uzp1 v28.8H, v12.8H, v24.8H // .........................*............. + smlal v7.4S, v13.4H, v0.4H // ..........................*............ + uzp1 v9.8H, v4.8H, v25.8H // ..........................*............ + smlal2 v3.4S, v13.8H, v0.8H // ...........................*........... + uzp2 v27.8H, v4.8H, v25.8H // ...........................*........... + smull v10.4S, v6.4H, v17.4H // ............................*.......... + uzp1 v13.8H, v29.8H, v30.8H // ............................*.......... + smlal v10.4S, v23.4H, v22.4H // .............................*......... + smlal2 v20.4S, v23.8H, v22.8H // ..............................*........ + uzp2 v5.8H, v7.8H, v3.8H // ...............................*....... + mul v13.8H, v13.8H, v2.H[2] // ...............................*....... + sqdmulh v21.8H, v5.8H, v2.H[1] // .................................*..... + smlal2 v20.4S, v9.8H, v28.8H // ...................................*... + smlal v29.4S, v13.4H, v0.4H // ....................................*.. + smlal2 v30.4S, v13.8H, v0.8H // .....................................*. + srshr v18.8H, v21.8H, #11 // ......................................* + smlal2 v20.4S, v27.8H, v11.8H // ......................................* + + // ---------- cycle (expected) ----------> + // 0 25 + // |------------------------|------------- + // ldr q13, [x2, #16] // *...................................... + // ldr q11, [x1], #32 // *...................................... + // ldr q4, [x1, #-16] // .*..................................... + // ldr q21, [x2], #32 // .*..................................... + // ldr q12, [x5], #32 // ..*.................................... + // ldr q31, [x4, #16] // ..*.................................... + // ldr q22, [x4], #32 // ...*................................... + // ld1 {v14.8H}, [x3], #16 // ...*................................... + // uzp2 v15.8H, v21.8H, v13.8H // .....*................................. + // ldr q24, [x5, #-16] // ....*.................................. + // uzp1 v6.8H, v11.8H, v4.8H // .....*................................. + // uzp1 v17.8H, v21.8H, v13.8H // ......*................................ + // smull2 v20.4S, v6.8H, v17.8H // ........*.............................. + // smull v10.4S, v6.4H, v17.4H // .........*............................. + // uzp2 v23.8H, v11.8H, v4.8H // ......*................................ + // uzp1 v28.8H, v12.8H, v24.8H // ..........*............................ + // smlal v10.4S, v23.4H, v14.4H // ..........*............................ + // uzp1 v9.8H, v22.8H, v31.8H // .......*............................... + // smlal2 v20.4S, v23.8H, v14.8H // ...........*........................... + // smlal2 v20.4S, v9.8H, v28.8H // ............*.......................... + // ld1 {v11.8H}, [x6], #16 // ....*.................................. + // uzp2 v27.8H, v22.8H, v31.8H // .........*............................. + // smlal2 v20.4S, v27.8H, v11.8H // .............*......................... + // smlal v10.4S, v9.4H, v28.4H // ..............*........................ + // ldr q13, [x2, #16] // ............*.......................... + // smlal v10.4S, v27.4H, v11.4H // ...............*....................... + // uzp2 v8.8H, v12.8H, v24.8H // ...........*........................... + // ldr q11, [x1], #32 // .............*......................... + // ldr q4, [x1, #-16] // ..............*........................ + // ldr q21, [x2], #32 // ........*.............................. + // uzp1 v14.8H, v10.8H, v20.8H // ...................*................... + // smull v29.4S, v6.4H, v15.4H // .......*............................... + // ldr q12, [x5], #32 // ...............*....................... + // ldr q31, [x4, #16] // ................*...................... + // mul v1.8H, v14.8H, v2.H[2] // .....................*................. + // ldr q22, [x4], #32 // ..................*.................... + // ld1 {v14.8H}, [x3], #16 // .................*..................... + // smull2 v30.4S, v6.8H, v15.8H // ................*...................... + // smlal2 v30.4S, v23.8H, v17.8H // .................*..................... + // uzp2 v15.8H, v21.8H, v13.8H // ....................*.................. + // smlal2 v30.4S, v9.8H, v8.8H // ..................*.................... + // smlal v10.4S, v1.4H, v0.4H // ..........................*............ + // smlal2 v30.4S, v27.8H, v28.8H // ...................*................... + // ldr q24, [x5, #-16] // .....................*................. + // smlal2 v20.4S, v1.8H, v0.8H // ...........................*........... + // uzp1 v6.8H, v11.8H, v4.8H // ......................*................ + // smlal v29.4S, v23.4H, v17.4H // ....................*.................. + // uzp1 v17.8H, v21.8H, v13.8H // .......................*............... + // smlal v29.4S, v9.4H, v8.4H // .......................*............... + // smlal v29.4S, v27.4H, v28.4H // ........................*.............. + // uzp2 v5.8H, v10.8H, v20.8H // ...............................*....... + // smull2 v20.4S, v6.8H, v17.8H // .........................*............. + // smull v10.4S, v6.4H, v17.4H // ............................*.......... + // uzp2 v23.8H, v11.8H, v4.8H // ........................*.............. + // sqdmulh v13.8H, v5.8H, v2.H[1] // .................................*..... + // uzp1 v28.8H, v12.8H, v24.8H // .........................*............. + // uzp1 v21.8H, v29.8H, v30.8H // ............................*.......... + // smlal v10.4S, v23.4H, v14.4H // .............................*......... + // uzp1 v9.8H, v22.8H, v31.8H // ..........................*............ + // mul v21.8H, v21.8H, v2.H[2] // ...............................*....... + // srshr v18.8H, v13.8H, #11 // ......................................* + // smlal2 v20.4S, v23.8H, v14.8H // ..............................*........ + // smlal2 v20.4S, v9.8H, v28.8H // ...................................*... + // ld1 {v11.8H}, [x6], #16 // ......................*................ + // smlal v29.4S, v21.4H, v0.4H // ....................................*.. + // uzp2 v27.8H, v22.8H, v31.8H // ...........................*........... + // smlal2 v30.4S, v21.8H, v0.8H // .....................................*. + // smlal2 v20.4S, v27.8H, v11.8H // ......................................* sub count, count, #2 k2_loop_start: // Instructions: 54 - // Expected cycles: 64 - // Expected IPC: 0.84 - - // Cycle bound: 64.0 - // IPC bound: 0.84 - - // Wall time: 6.78s - // User time: 6.78s - - // ---------------------- cycle (expected) -----------------------> - // 0 25 50 - // |------------------------|------------------------|------------- - smull v22.4S, v15.4H, v29.4H // l............................................................... - uzp1 v15.8H, v21.8H, v13.8H // .*.............................................................. - uzp1 v29.8H, v7.8H, v10.8H // ..*............................................................. - smull2 v9.4S, v15.8H, v1.8H // ...*............................................................ - smlal v22.4S, v27.4H, v14.4H // ....l........................................................... - uzp2 v27.8H, v21.8H, v13.8H // .....*.......................................................... - smull v18.4S, v15.4H, v1.4H // ......*......................................................... - smlal2 v9.4S, v27.8H, v29.8H // .......*........................................................ - smlal v22.4S, v5.4H, v30.4H // ........l....................................................... - uzp1 v5.8H, v8.8H, v23.8H // .........*...................................................... - smlal v18.4S, v27.4H, v29.4H // ..........*..................................................... - smlal2 v9.4S, v5.8H, v28.8H // ...........*.................................................... - smlal v22.4S, v11.4H, v24.4H // ............l................................................... - uzp2 v11.8H, v8.8H, v23.8H // .............*.................................................. - smlal v18.4S, v5.4H, v28.4H // ..............*................................................. - uzp1 v30.8H, v12.8H, v26.8H // ...............*................................................ - uzp1 v19.8H, v22.8H, v31.8H // ................l............................................... - smlal2 v9.4S, v11.8H, v30.8H // .................*.............................................. - smlal v18.4S, v11.4H, v30.4H // ..................*............................................. - sqdmulh v20.8H, v3.8H, v2.H[1] // ...................l............................................ - ldr q7, [x2], #32 // ....................e........................................... - uzp1 v23.8H, v18.8H, v9.8H // ......................*......................................... - mul v24.8H, v19.8H, v2.H[2] // .......................l........................................ - mul v17.8H, v23.8H, v2.H[2] // ........................*....................................... - ldr q23, [x4, #16] // .........................e...................................... - ldr q21, [x1], #32 // ...........................e.................................... - smlal v18.4S, v17.4H, v0.4H // .............................*.................................. - smlal2 v9.4S, v17.8H, v0.8H // ..............................*................................. - smlal2 v31.4S, v24.8H, v0.8H // ...............................l................................ - smlal v22.4S, v24.4H, v0.4H // ................................l............................... - srshr v10.8H, v20.8H, #11 // .................................l.............................. - ldr q26, [x5, #16] // ..................................e............................. - uzp2 v4.8H, v22.8H, v31.8H // ....................................l........................... - mls v3.8H, v10.8H, v2.H[0] // .....................................l.......................... - sqdmulh v31.8H, v4.8H, v2.H[1] // ......................................l......................... - ldr q13, [x1, #-16] // .......................................e........................ - ldr q8, [x4], #32 // .........................................e...................... - srshr v20.8H, v31.8H, #11 // ...........................................l.................... - ld1 {v14.8H}, [x3], #16 // ............................................*................... - mls v4.8H, v20.8H, v2.H[0] // ..............................................l................. - ldr q12, [x5], #32 // ...............................................e................ - smull2 v31.4S, v15.8H, v29.8H // .................................................*.............. - zip2 v10.8H, v4.8H, v3.8H // ..................................................l............. - zip1 v25.8H, v4.8H, v3.8H // ...................................................l............ - str q10, [x0, #16] // ....................................................l........... - smlal2 v31.4S, v27.8H, v14.8H // .....................................................*.......... - ldr q10, [x2, #-16] // ......................................................e......... - str q25, [x0], #32 // ........................................................l....... - smlal2 v31.4S, v5.8H, v30.8H // .........................................................*...... - ld1 {v24.8H}, [x6], #16 // ..........................................................*..... - uzp2 v1.8H, v7.8H, v10.8H // ............................................................e... - uzp2 v3.8H, v18.8H, v9.8H // .............................................................*.. - smlal2 v31.4S, v11.8H, v24.8H // ..............................................................*. - uzp2 v28.8H, v12.8H, v26.8H // ...............................................................e - - // ------------------------------------------------------------------------- cycle (expected) -------------------------------------------------------------------------> - // 0 25 50 75 100 125 150 - // |------------------------|------------------------|------------------------|------------------------|------------------------|------------------------|-------------- - // ldr q12, [x1], #32 // .......e....................................'..........................~....................................'..........................~............................. - // ldr q13, [x1, #-16] // ...................e........................'......................................~........................'......................................~................. - // uzp1 v3.8h, v12.8h, v13.8h // ............................................'*..............................................................'~....................................................... - // uzp2 v4.8h, v12.8h, v13.8h // ............................................'....*..........................................................'....~................................................... - // ldr q12, [x2], #32 // e...........................................'...................~...........................................'...................~.................................... - // ldr q13, [x2, #-16] // ..................................e.........'.....................................................~.........'.....................................................~.. - // uzp1 v5.8h, v12.8h, v13.8h // ............................................'.*.............................................................'.~...................................................... - // uzp2 v6.8h, v12.8h, v13.8h // ........................................e...'...........................................................~...'........................................................ - // ld1 {v7.8h}, [x3], #16 // ........................~...................'...........................................*...................'...........................................~............ - // smull v8.4s, v3.4h, v5.4h // ............................................~...............................................................l........................................................ - // smull2 v10.4s, v3.8h, v5.8h // .............................~..............'................................................*..............'................................................~....... - // smlal v8.4s, v4.4h, v7.4h // ............................................'...~...........................................................'...l.................................................... - // smlal2 v10.4s, v4.8h, v7.8h // .................................~..........'....................................................*..........'....................................................~... - // smull v9.4s, v3.4h, v6.4h // ............................................'.....*.........................................................'.....~.................................................. - // smull2 v11.4s, v3.8h, v6.8h // ............................................'..*............................................................'..~..................................................... - // smlal v9.4s, v4.4h, v5.4h // ............................................'.........*.....................................................'.........~.............................................. - // smlal2 v11.4s, v4.8h, v5.8h // ............................................'......*........................................................'......~................................................. - // ldr q12, [x4], #32 // .....................e......................'........................................~......................'........................................~............... - // ldr q13, [x4, #-16] // .....e......................................'........................~......................................'........................~............................... - // uzp1 v3.8h, v12.8h, v13.8h // ............................................'........*......................................................'........~............................................... - // uzp2 v4.8h, v12.8h, v13.8h // ............................................'............*..................................................'............~........................................... - // ldr q12, [x5], #32 // ...........................e................'..............................................~................'..............................................~......... - // ldr q13, [x5, #-16] // ..............e.............................'.................................~.............................'.................................~...................... - // uzp1 v5.8h, v12.8h, v13.8h // ............................................'..............*................................................'..............~......................................... - // uzp2 v6.8h, v12.8h, v13.8h // ...........................................e'..............................................................~'........................................................ - // ld1 {v7.8h}, [x6], #16 // ......................................~.....'.........................................................*.....'........................................................ - // smlal v8.4s, v3.4h, v5.4h // ............................................'.......~.......................................................'.......l................................................ - // smlal2 v10.4s, v3.8h, v5.8h // .....................................~......'........................................................*......'........................................................ - // smlal v8.4s, v4.4h, v7.4h // ............................................'...........~...................................................'...........l............................................ - // smlal2 v10.4s, v4.8h, v7.8h // ..........................................~.'.............................................................*.'........................................................ - // smlal v9.4s, v3.4h, v6.4h // ............................................'.............*.................................................'.............~.......................................... - // smlal2 v11.4s, v3.8h, v6.8h // ............................................'..........*....................................................'..........~............................................. - // smlal v9.4s, v4.4h, v5.4h // ............................................'.................*.............................................'.................~...................................... - // smlal2 v11.4s, v4.8h, v5.8h // ............................................'................*..............................................'................~....................................... - // uzp1 v28.8h, v8.8h, v10.8h // ............................................'...............~...............................................'...............l........................................ - // mul v28.8h, v28.8h, v2.h[2] // ...~........................................'......................~........................................'......................l................................. - // smlal v8.4s, v28.4h, v0.4h // ............~...............................'...............................~...............................'...............................l........................ - // smlal2 v10.4s, v28.8h, v0.8h // ...........~................................'..............................~................................'..............................l......................... - // uzp2 v26.8h, v8.8h, v10.8h // ................~...........................'...................................~...........................'...................................l.................... - // uzp1 v28.8h, v9.8h, v11.8h // ..~.........................................'.....................*.........................................'.....................~.................................. - // mul v28.8h, v28.8h, v2.h[2] // ....~.......................................'.......................*.......................................'.......................~................................ - // smlal v9.4s, v28.4h, v0.4h // .........~..................................'............................*..................................'............................~........................... - // smlal2 v11.4s, v28.8h, v0.8h // ..........~.................................'.............................*.................................'.............................~.......................... - // uzp2 v27.8h, v9.8h, v11.8h // .........................................~..'............................................................*..'........................................................ - // sqdmulh v28.8h, v26.8h, v2.h[1] // ..................~.........................'.....................................~.........................'.....................................l.................. - // srshr v28.8h, v28.8h, #11 // .......................~....................'..........................................~....................'..........................................l............. - // mls v26.8h, v28.8h, v2.h[0] // ..........................~.................'.............................................~.................'.............................................l.......... - // sqdmulh v28.8h, v27.8h, v2.h[1] // ............................................'..................~............................................'..................l..................................... - // srshr v28.8h, v28.8h, #11 // .............~..............................'................................~..............................'................................l....................... - // mls v27.8h, v28.8h, v2.h[0] // .................~..........................'....................................~..........................'....................................l................... - // zip1 v12.8h, v26.8h, v27.8h // ...............................~............'..................................................~............'..................................................l..... - // zip2 v13.8h, v26.8h, v27.8h // ..............................~.............'.................................................~.............'.................................................l...... - // str q12, [x0], #32 // ....................................~.......'.......................................................~.......'.......................................................l - // str q13, [x0, #-16] // ................................~...........'...................................................~...........'...................................................l.... + // Expected cycles: 33 + // Expected IPC: 1.64 + + // Cycle bound: 32.0 + // IPC bound: 1.69 + + // Wall time: 82.09s + // User time: 82.09s + + // ------- cycle (expected) -------> + // 0 25 + // |------------------------|------- + smlal v10.4S, v9.4H, v28.4H // *................................ + ldr q13, [x2, #16] // .e............................... + smlal v10.4S, v27.4H, v11.4H // .*............................... + mls v5.8H, v18.8H, v2.H[0] // ..l.............................. + uzp2 v3.8H, v29.8H, v30.8H // ..l.............................. + uzp2 v8.8H, v12.8H, v24.8H // ...*............................. + ldr q11, [x1], #32 // ...e............................. + sqdmulh v16.8H, v3.8H, v2.H[1] // ....l............................ + ldr q4, [x1, #-16] // ....e............................ + ldr q21, [x2], #32 // .....e........................... + uzp1 v14.8H, v10.8H, v20.8H // .....*........................... + smull v29.4S, v6.4H, v15.4H // ......*.......................... + ldr q12, [x5], #32 // ......e.......................... + ldr q31, [x4, #16] // .......e......................... + mul v1.8H, v14.8H, v2.H[2] // .......*......................... + ldr q22, [x4], #32 // ........e........................ + ld1 {v14.8H}, [x3], #16 // ........e........................ + smull2 v30.4S, v6.8H, v15.8H // .........*....................... + srshr v7.8H, v16.8H, #11 // .........l....................... + smlal2 v30.4S, v23.8H, v17.8H // ..........*...................... + uzp2 v15.8H, v21.8H, v13.8H // ..........e...................... + smlal2 v30.4S, v9.8H, v8.8H // ...........*..................... + smlal v10.4S, v1.4H, v0.4H // ............*.................... + mls v3.8H, v7.8H, v2.H[0] // .............l................... + smlal2 v30.4S, v27.8H, v28.8H // ...............*................. + ldr q24, [x5, #-16] // ...............e................. + smlal2 v20.4S, v1.8H, v0.8H // ................*................ + uzp1 v6.8H, v11.8H, v4.8H // ................e................ + smlal v29.4S, v23.4H, v17.4H // .................*............... + uzp1 v17.8H, v21.8H, v13.8H // .................e............... + smlal v29.4S, v9.4H, v8.4H // ..................*.............. + zip1 v18.8H, v5.8H, v3.8H // ..................l.............. + smlal v29.4S, v27.4H, v28.4H // ...................*............. + zip2 v25.8H, v5.8H, v3.8H // ...................l............. + uzp2 v5.8H, v10.8H, v20.8H // ....................*............ + smull2 v20.4S, v6.8H, v17.8H // ....................e............ + smull v10.4S, v6.4H, v17.4H // .....................e........... + uzp2 v23.8H, v11.8H, v4.8H // .....................e........... + sqdmulh v13.8H, v5.8H, v2.H[1] // ......................*.......... + uzp1 v28.8H, v12.8H, v24.8H // ......................e.......... + uzp1 v21.8H, v29.8H, v30.8H // .......................*......... + str q25, [x0, #16] // .......................l......... + smlal v10.4S, v23.4H, v14.4H // ........................e........ + uzp1 v9.8H, v22.8H, v31.8H // ........................e........ + str q18, [x0], #32 // .........................l....... + mul v21.8H, v21.8H, v2.H[2] // .........................*....... + srshr v18.8H, v13.8H, #11 // ...........................*..... + smlal2 v20.4S, v23.8H, v14.8H // ...........................e..... + smlal2 v20.4S, v9.8H, v28.8H // ............................e.... + ld1 {v11.8H}, [x6], #16 // ............................e.... + smlal v29.4S, v21.4H, v0.4H // ..............................*.. + uzp2 v27.8H, v22.8H, v31.8H // ..............................e.. + smlal2 v30.4S, v21.8H, v0.8H // ...............................*. + smlal2 v20.4S, v27.8H, v11.8H // ................................e + + // ------------------------------------ cycle (expected) ------------------------------------> + // 0 25 50 75 + // |------------------------|------------------------|------------------------|--------------- + // ldr q12, [x1], #32 // ..e.............................'..~.............................'..~...................... + // ldr q13, [x1, #-16] // ...e............................'...~............................'...~..................... + // uzp1 v3.8h, v12.8h, v13.8h // ...............e................'...............~................'...............~......... + // uzp2 v4.8h, v12.8h, v13.8h // ....................e...........'....................~...........'....................~.... + // ldr q12, [x2], #32 // ....e...........................'....~...........................'....~.................... + // ldr q13, [x2, #-16] // e...............................'~...............................'~........................ + // uzp1 v5.8h, v12.8h, v13.8h // ................e...............'................~...............'................~........ + // uzp2 v6.8h, v12.8h, v13.8h // .........e......................'.........~......................'.........~............... + // ld1 {v7.8h}, [x3], #16 // .......e........................'.......~........................'.......~................. + // smull v8.4s, v3.4h, v5.4h // ....................e...........'....................~...........'....................~.... + // smull2 v10.4s, v3.8h, v5.8h // ...................e............'...................~............'...................~..... + // smlal v8.4s, v4.4h, v7.4h // .......................e........'.......................~........'.......................~. + // smlal2 v10.4s, v4.8h, v7.8h // ..........................e.....'..........................~.....'......................... + // smull v9.4s, v3.4h, v6.4h // .....~..........................'.....*..........................'.....~................... + // smull2 v11.4s, v3.8h, v6.8h // ........~.......................'........*.......................'........~................ + // smlal v9.4s, v4.4h, v5.4h // ................~...............'................*...............'................~........ + // smlal2 v11.4s, v4.8h, v5.8h // .........~......................'.........*......................'.........~............... + // ldr q12, [x4], #32 // .......e........................'.......~........................'.......~................. + // ldr q13, [x4, #-16] // ......e.........................'......~.........................'......~.................. + // uzp1 v3.8h, v12.8h, v13.8h // .......................e........'.......................~........'.......................~. + // uzp2 v4.8h, v12.8h, v13.8h // .............................e..'.............................~..'......................... + // ldr q12, [x5], #32 // .....e..........................'.....~..........................'.....~................... + // ldr q13, [x5, #-16] // ..............e.................'..............~.................'..............~.......... + // uzp1 v5.8h, v12.8h, v13.8h // .....................e..........'.....................~..........'.....................~... + // uzp2 v6.8h, v12.8h, v13.8h // ..~.............................'..*.............................'..~...................... + // ld1 {v7.8h}, [x6], #16 // ...........................e....'...........................~....'......................... + // smlal v8.4s, v3.4h, v5.4h // ................................*................................~......................... + // smlal2 v10.4s, v3.8h, v5.8h // ...........................e....'...........................~....'......................... + // smlal v8.4s, v4.4h, v7.4h // ~...............................'*...............................'~........................ + // smlal2 v10.4s, v4.8h, v7.8h // ...............................e'...............................~'......................... + // smlal v9.4s, v3.4h, v6.4h // .................~..............'.................*..............'.................~....... + // smlal2 v11.4s, v3.8h, v6.8h // ..........~.....................'..........*.....................'..........~.............. + // smlal v9.4s, v4.4h, v5.4h // ..................~.............'..................*.............'..................~...... + // smlal2 v11.4s, v4.8h, v5.8h // ..............~.................'..............*.................'..............~.......... + // uzp1 v28.8h, v8.8h, v10.8h // ....~...........................'....*...........................'....~.................... + // mul v28.8h, v28.8h, v2.h[2] // ......~.........................'......*.........................'......~.................. + // smlal v8.4s, v28.4h, v0.4h // ...........~....................'...........*....................'...........~............. + // smlal2 v10.4s, v28.8h, v0.8h // ...............~................'...............*................'...............~......... + // uzp2 v26.8h, v8.8h, v10.8h // ...................~............'...................*............'...................~..... + // uzp1 v28.8h, v9.8h, v11.8h // ......................~.........'......................*.........'......................~.. + // mul v28.8h, v28.8h, v2.h[2] // ........................~.......'........................*.......'......................... + // smlal v9.4s, v28.4h, v0.4h // .............................~..'.............................*..'......................... + // smlal2 v11.4s, v28.8h, v0.8h // ..............................~.'..............................*.'......................... + // uzp2 v27.8h, v9.8h, v11.8h // .~..............................'.~..............................'.l....................... + // sqdmulh v28.8h, v26.8h, v2.h[1] // .....................~..........'.....................*..........'.....................~... + // srshr v28.8h, v28.8h, #11 // ..........................~.....'..........................*.....'......................... + // mls v26.8h, v28.8h, v2.h[0] // .~..............................'.~..............................'.l....................... + // sqdmulh v28.8h, v27.8h, v2.h[1] // ...~............................'...~............................'...l..................... + // srshr v28.8h, v28.8h, #11 // ........~.......................'........~.......................'........l................ + // mls v27.8h, v28.8h, v2.h[0] // ............~...................'............~...................'............l............ + // zip1 v12.8h, v26.8h, v27.8h // .................~..............'.................~..............'.................l....... + // zip2 v13.8h, v26.8h, v27.8h // ..................~.............'..................~.............'..................l...... + // str q12, [x0], #32 // ........................~.......'........................~.......'........................l + // str q13, [x0, #-16] // ......................~.........'......................~.........'......................l.. sub count, count, #1 cbnz count, k2_loop_start - // Instructions: 63 - // Expected cycles: 67 - // Expected IPC: 0.94 - - // Cycle bound: 67.0 - // IPC bound: 0.94 - - // Wall time: 10.15s - // User time: 10.15s - - // ------------------------ cycle (expected) ------------------------> - // 0 25 50 - // |------------------------|------------------------|---------------- - uzp1 v4.8H, v21.8H, v13.8H // *.................................................................. - uzp1 v18.8H, v7.8H, v10.8H // .*................................................................. - sqdmulh v10.8H, v3.8H, v2.H[1] // ..*................................................................ - smull2 v25.4S, v4.8H, v18.8H // ...*............................................................... - ld1 {v9.8H}, [x3], #16 // ....*.............................................................. - uzp2 v22.8H, v21.8H, v13.8H // ......*............................................................ - uzp1 v20.8H, v12.8H, v26.8H // .......*........................................................... - smlal2 v25.4S, v22.8H, v9.8H // ........*.......................................................... - uzp1 v19.8H, v8.8H, v23.8H // .........*......................................................... - ld1 {v13.8H}, [x6], #16 // ..........*........................................................ - smlal2 v25.4S, v19.8H, v20.8H // ............*...................................................... - srshr v21.8H, v10.8H, #11 // .............*..................................................... - uzp2 v10.8H, v8.8H, v23.8H // ..............*.................................................... - smull v29.4S, v15.4H, v29.4H // ...............*................................................... - smlal2 v25.4S, v10.8H, v13.8H // ................*.................................................. - smull v7.4S, v4.4H, v18.4H // .................*................................................. - smull v15.4S, v4.4H, v1.4H // ..................*................................................ - smull2 v1.4S, v4.8H, v1.8H // ...................*............................................... - smlal v29.4S, v27.4H, v14.4H // ....................*.............................................. - smlal v7.4S, v22.4H, v9.4H // .....................*............................................. - smlal v15.4S, v22.4H, v18.4H // ......................*............................................ - smlal2 v1.4S, v22.8H, v18.8H // .......................*........................................... - smlal v29.4S, v5.4H, v30.4H // ........................*.......................................... - smlal v7.4S, v19.4H, v20.4H // .........................*......................................... - smlal v15.4S, v19.4H, v28.4H // ..........................*........................................ - smlal2 v1.4S, v19.8H, v28.8H // ...........................*....................................... - smlal v29.4S, v11.4H, v24.4H // ............................*...................................... - smlal v7.4S, v10.4H, v13.4H // .............................*..................................... - smlal v15.4S, v10.4H, v20.4H // ..............................*.................................... - smlal2 v1.4S, v10.8H, v20.8H // ...............................*................................... - uzp1 v6.8H, v29.8H, v31.8H // ................................*.................................. - uzp1 v10.8H, v7.8H, v25.8H // .................................*................................. - mul v6.8H, v6.8H, v2.H[2] // ..................................*................................ - uzp1 v13.8H, v15.8H, v1.8H // ...................................*............................... - mul v10.8H, v10.8H, v2.H[2] // ....................................*.............................. - mul v5.8H, v13.8H, v2.H[2] // .....................................*............................. - smlal v29.4S, v6.4H, v0.4H // ......................................*............................ - smlal2 v31.4S, v6.8H, v0.8H // .......................................*........................... - smlal v7.4S, v10.4H, v0.4H // ........................................*.......................... - smlal2 v25.4S, v10.8H, v0.8H // .........................................*......................... - smlal v15.4S, v5.4H, v0.4H // ..........................................*........................ - smlal2 v1.4S, v5.8H, v0.8H // ...........................................*....................... - uzp2 v30.8H, v29.8H, v31.8H // ............................................*...................... - uzp2 v26.8H, v7.8H, v25.8H // .............................................*..................... - sqdmulh v13.8H, v30.8H, v2.H[1] // ..............................................*.................... - uzp2 v6.8H, v15.8H, v1.8H // ...............................................*................... - sqdmulh v10.8H, v26.8H, v2.H[1] // ................................................*.................. - sqdmulh v12.8H, v6.8H, v2.H[1] // .................................................*................. - srshr v20.8H, v13.8H, #11 // ..................................................*................ - mls v3.8H, v21.8H, v2.H[0] // ...................................................*............... - srshr v13.8H, v10.8H, #11 // ....................................................*.............. - mls v30.8H, v20.8H, v2.H[0] // .....................................................*............. - srshr v10.8H, v12.8H, #11 // ......................................................*............ - mls v26.8H, v13.8H, v2.H[0] // ........................................................*.......... - mls v6.8H, v10.8H, v2.H[0] // .........................................................*......... - zip1 v13.8H, v30.8H, v3.8H // ..........................................................*........ - zip2 v30.8H, v30.8H, v3.8H // ...........................................................*....... - str q13, [x0], #32 // ............................................................*...... - zip1 v13.8H, v26.8H, v6.8H // .............................................................*..... - str q30, [x0, #-16] // ..............................................................*.... - zip2 v10.8H, v26.8H, v6.8H // ...............................................................*... - str q13, [x0], #32 // ................................................................*.. - str q10, [x0, #-16] // ..................................................................* - - // ------------------------ cycle (expected) ------------------------> - // 0 25 50 - // |------------------------|------------------------|---------------- - // smull v22.4S, v15.4H, v29.4H // ...............*................................................... - // uzp1 v15.8H, v21.8H, v13.8H // *.................................................................. - // uzp1 v29.8H, v7.8H, v10.8H // .*................................................................. - // smull2 v9.4S, v15.8H, v1.8H // ...................*............................................... - // smlal v22.4S, v27.4H, v14.4H // ....................*.............................................. - // uzp2 v27.8H, v21.8H, v13.8H // ......*............................................................ - // smull v18.4S, v15.4H, v1.4H // ..................*................................................ - // smlal2 v9.4S, v27.8H, v29.8H // .......................*........................................... - // smlal v22.4S, v5.4H, v30.4H // ........................*.......................................... - // uzp1 v5.8H, v8.8H, v23.8H // .........*......................................................... - // smlal v18.4S, v27.4H, v29.4H // ......................*............................................ - // smlal2 v9.4S, v5.8H, v28.8H // ...........................*....................................... - // smlal v22.4S, v11.4H, v24.4H // ............................*...................................... - // uzp2 v11.8H, v8.8H, v23.8H // ..............*.................................................... - // smlal v18.4S, v5.4H, v28.4H // ..........................*........................................ - // uzp1 v30.8H, v12.8H, v26.8H // .......*........................................................... - // uzp1 v19.8H, v22.8H, v31.8H // ................................*.................................. - // smlal2 v9.4S, v11.8H, v30.8H // ...............................*................................... - // smlal v18.4S, v11.4H, v30.4H // ..............................*.................................... - // sqdmulh v20.8H, v3.8H, v2.H[1] // ..*................................................................ - // uzp1 v23.8H, v18.8H, v9.8H // ...................................*............................... - // mul v24.8H, v19.8H, v2.H[2] // ..................................*................................ - // mul v17.8H, v23.8H, v2.H[2] // .....................................*............................. - // smlal v18.4S, v17.4H, v0.4H // ..........................................*........................ - // smlal2 v9.4S, v17.8H, v0.8H // ...........................................*....................... - // smlal2 v31.4S, v24.8H, v0.8H // .......................................*........................... - // smlal v22.4S, v24.4H, v0.4H // ......................................*............................ - // srshr v10.8H, v20.8H, #11 // .............*..................................................... - // uzp2 v4.8H, v22.8H, v31.8H // ............................................*...................... - // mls v3.8H, v10.8H, v2.H[0] // ...................................................*............... - // sqdmulh v31.8H, v4.8H, v2.H[1] // ..............................................*.................... - // srshr v20.8H, v31.8H, #11 // ..................................................*................ - // ld1 {v14.8H}, [x3], #16 // ....*.............................................................. - // mls v4.8H, v20.8H, v2.H[0] // .....................................................*............. - // smull2 v31.4S, v15.8H, v29.8H // ...*............................................................... - // zip2 v10.8H, v4.8H, v3.8H // ...........................................................*....... - // zip1 v25.8H, v4.8H, v3.8H // ..........................................................*........ - // str q10, [x0, #16] // ..............................................................*.... - // smlal2 v31.4S, v27.8H, v14.8H // ........*.......................................................... - // str q25, [x0], #32 // ............................................................*...... - // smlal2 v31.4S, v5.8H, v30.8H // ............*...................................................... - // ld1 {v24.8H}, [x6], #16 // ..........*........................................................ - // uzp2 v3.8H, v18.8H, v9.8H // ...............................................*................... - // smlal2 v31.4S, v11.8H, v24.8H // ................*.................................................. - // smull v22.4S, v15.4H, v29.4H // .................*................................................. - // smlal v22.4S, v27.4H, v14.4H // .....................*............................................. - // smlal v22.4S, v5.4H, v30.4H // .........................*......................................... - // smlal v22.4S, v11.4H, v24.4H // .............................*..................................... - // uzp1 v19.8H, v22.8H, v31.8H // .................................*................................. - // sqdmulh v20.8H, v3.8H, v2.H[1] // .................................................*................. - // mul v24.8H, v19.8H, v2.H[2] // ....................................*.............................. - // smlal2 v31.4S, v24.8H, v0.8H // .........................................*......................... - // smlal v22.4S, v24.4H, v0.4H // ........................................*.......................... - // srshr v10.8H, v20.8H, #11 // ......................................................*............ - // uzp2 v4.8H, v22.8H, v31.8H // .............................................*..................... - // mls v3.8H, v10.8H, v2.H[0] // .........................................................*......... - // sqdmulh v31.8H, v4.8H, v2.H[1] // ................................................*.................. - // srshr v20.8H, v31.8H, #11 // ....................................................*.............. - // mls v4.8H, v20.8H, v2.H[0] // ........................................................*.......... - // zip2 v10.8H, v4.8H, v3.8H // ...............................................................*... - // zip1 v25.8H, v4.8H, v3.8H // .............................................................*..... - // str q10, [x0, #16] // ..................................................................* - // str q25, [x0], #32 // ................................................................*.. + // Instructions: 40 + // Expected cycles: 44 + // Expected IPC: 0.91 + + // Cycle bound: 44.0 + // IPC bound: 0.91 + + // Wall time: 0.56s + // User time: 0.56s + + // ------------ cycle (expected) -------------> + // 0 25 + // |------------------------|------------------ + uzp2 v8.8H, v12.8H, v24.8H // *........................................... + smlal v10.4S, v9.4H, v28.4H // *........................................... + smlal v10.4S, v27.4H, v11.4H // .*.......................................... + uzp2 v12.8H, v29.8H, v30.8H // .*.......................................... + smull v19.4S, v6.4H, v15.4H // ..*......................................... + smull2 v13.4S, v6.8H, v15.8H // ...*........................................ + smlal2 v13.4S, v23.8H, v17.8H // ....*....................................... + smlal2 v13.4S, v9.8H, v8.8H // .....*...................................... + smlal2 v13.4S, v27.8H, v28.8H // ......*..................................... + uzp1 v21.8H, v10.8H, v20.8H // ......*..................................... + smlal v19.4S, v23.4H, v17.4H // .......*.................................... + smlal v19.4S, v9.4H, v8.4H // ........*................................... + smlal v19.4S, v27.4H, v28.4H // .........*.................................. + sqdmulh v1.8H, v12.8H, v2.H[1] // ..........*................................. + mul v4.8H, v21.8H, v2.H[2] // ............*............................... + uzp1 v21.8H, v19.8H, v13.8H // .............*.............................. + mul v23.8H, v21.8H, v2.H[2] // ...............*............................ + srshr v21.8H, v1.8H, #11 // ...............*............................ + smlal v10.4S, v4.4H, v0.4H // .................*.......................... + smlal2 v20.4S, v4.8H, v0.8H // ...................*........................ + smlal v19.4S, v23.4H, v0.4H // ....................*....................... + smlal2 v13.4S, v23.8H, v0.8H // .....................*...................... + mls v12.8H, v21.8H, v2.H[0] // ......................*..................... + uzp2 v8.8H, v10.8H, v20.8H // .......................*.................... + sqdmulh v11.8H, v8.8H, v2.H[1] // .........................*.................. + uzp2 v26.8H, v19.8H, v13.8H // .........................*.................. + sqdmulh v27.8H, v26.8H, v2.H[1] // ...........................*................ + mls v5.8H, v18.8H, v2.H[0] // .............................*.............. + srshr v3.8H, v11.8H, #11 // ..............................*............. + srshr v25.8H, v27.8H, #11 // ................................*........... + mls v8.8H, v3.8H, v2.H[0] // ..................................*......... + zip1 v28.8H, v5.8H, v12.8H // ..................................*......... + mls v26.8H, v25.8H, v2.H[0] // ....................................*....... + str q28, [x0], #32 // ....................................*....... + zip2 v13.8H, v5.8H, v12.8H // ......................................*..... + str q13, [x0, #-16] // ........................................*... + zip1 v20.8H, v8.8H, v26.8H // .........................................*.. + zip2 v7.8H, v8.8H, v26.8H // .........................................*.. + str q20, [x0], #32 // ...........................................* + str q7, [x0, #-16] // ...........................................* + + // ------------ cycle (expected) -------------> + // 0 25 + // |------------------------|------------------ + // smlal v10.4S, v9.4H, v28.4H // *........................................... + // smlal v10.4S, v27.4H, v11.4H // .*.......................................... + // mls v5.8H, v18.8H, v2.H[0] // .............................*.............. + // uzp2 v3.8H, v29.8H, v30.8H // .*.......................................... + // uzp2 v8.8H, v12.8H, v24.8H // *........................................... + // sqdmulh v16.8H, v3.8H, v2.H[1] // ..........*................................. + // uzp1 v14.8H, v10.8H, v20.8H // ......*..................................... + // smull v29.4S, v6.4H, v15.4H // ..*......................................... + // mul v1.8H, v14.8H, v2.H[2] // ............*............................... + // smull2 v30.4S, v6.8H, v15.8H // ...*........................................ + // srshr v7.8H, v16.8H, #11 // ...............*............................ + // smlal2 v30.4S, v23.8H, v17.8H // ....*....................................... + // smlal2 v30.4S, v9.8H, v8.8H // .....*...................................... + // smlal v10.4S, v1.4H, v0.4H // .................*.......................... + // mls v3.8H, v7.8H, v2.H[0] // ......................*..................... + // smlal2 v30.4S, v27.8H, v28.8H // ......*..................................... + // smlal2 v20.4S, v1.8H, v0.8H // ...................*........................ + // smlal v29.4S, v23.4H, v17.4H // .......*.................................... + // smlal v29.4S, v9.4H, v8.4H // ........*................................... + // zip1 v18.8H, v5.8H, v3.8H // ..................................*......... + // smlal v29.4S, v27.4H, v28.4H // .........*.................................. + // zip2 v25.8H, v5.8H, v3.8H // ......................................*..... + // uzp2 v5.8H, v10.8H, v20.8H // .......................*.................... + // sqdmulh v13.8H, v5.8H, v2.H[1] // .........................*.................. + // uzp1 v21.8H, v29.8H, v30.8H // .............*.............................. + // str q25, [x0, #16] // ........................................*... + // str q18, [x0], #32 // ....................................*....... + // mul v21.8H, v21.8H, v2.H[2] // ...............*............................ + // srshr v18.8H, v13.8H, #11 // ..............................*............. + // smlal v29.4S, v21.4H, v0.4H // ....................*....................... + // smlal2 v30.4S, v21.8H, v0.8H // .....................*...................... + // mls v5.8H, v18.8H, v2.H[0] // ..................................*......... + // uzp2 v3.8H, v29.8H, v30.8H // .........................*.................. + // sqdmulh v16.8H, v3.8H, v2.H[1] // ...........................*................ + // srshr v7.8H, v16.8H, #11 // ................................*........... + // mls v3.8H, v7.8H, v2.H[0] // ....................................*....... + // zip1 v18.8H, v5.8H, v3.8H // .........................................*.. + // zip2 v25.8H, v5.8H, v3.8H // .........................................*.. + // str q25, [x0, #16] // ...........................................* + // str q18, [x0], #32 // ...........................................* pop_stack @@ -594,489 +594,489 @@ _polyvec_basemul_acc_montgomery_cached_asm_k3_opt: add b2_cache_ptr, b0_cache_ptr, #(2 * 512/2) mov count, #(KYBER_N / 16) - // Instructions: 69 - // Expected cycles: 87 - // Expected IPC: 0.79 - - // Cycle bound: 87.0 - // IPC bound: 0.79 - - // Wall time: 10.91s - // User time: 10.91s - - // ---------------------------------- cycle (expected) ----------------------------------> - // 0 25 50 75 - // |------------------------|------------------------|------------------------|----------- - ldr q15, [x7], #32 // *...................................................................................... - ldr q12, [x5], #32 // ..*.................................................................................... - ldr q3, [x5, #-16] // ....*.................................................................................. - ldr q5, [x4], #32 // ......*................................................................................ - ldr q30, [x4, #-16] // ........*.............................................................................. - ldr q10, [x2], #32 // ..........*............................................................................ - uzp1 v24.8H, v5.8H, v30.8H // ............*.......................................................................... - ldr q13, [x1, #16] // .............*......................................................................... - ldr q21, [x2, #-16] // ...............*....................................................................... - ldr q25, [x1], #32 // .................*..................................................................... - uzp1 v27.8H, v10.8H, v21.8H // ...................*................................................................... - uzp2 v6.8H, v10.8H, v21.8H // ....................*.................................................................. - uzp1 v7.8H, v25.8H, v13.8H // .....................*................................................................. - uzp1 v10.8H, v12.8H, v3.8H // ......................*................................................................ - smull v21.4S, v7.4H, v6.4H // .......................*............................................................... - uzp2 v19.8H, v25.8H, v13.8H // ........................*.............................................................. - ldr q13, [x7, #-16] // .........................*............................................................. - smlal v21.4S, v19.4H, v27.4H // ...........................*........................................................... - uzp2 v25.8H, v12.8H, v3.8H // ............................*.......................................................... - ldr q9, [x8], #32 // .............................*......................................................... - smlal v21.4S, v24.4H, v25.4H // ...............................*....................................................... - uzp2 v1.8H, v5.8H, v30.8H // ................................*...................................................... - ldr q23, [x8, #-16] // .................................*..................................................... - smlal v21.4S, v1.4H, v10.4H // ...................................*................................................... - uzp1 v30.8H, v15.8H, v13.8H // ....................................*.................................................. - uzp2 v5.8H, v9.8H, v23.8H // .....................................*................................................. - smull2 v6.4S, v7.8H, v6.8H // ......................................*................................................ - smlal v21.4S, v30.4H, v5.4H // .......................................*............................................... - ldr q31, [x2, #16] // ........................................*.............................................. - smlal2 v6.4S, v19.8H, v27.8H // ..........................................*............................................ - smull2 v11.4S, v7.8H, v27.8H // ...........................................*........................................... - ld1 {v4.8H}, [x3], #16 // ............................................*.......................................... - smull v3.4S, v7.4H, v27.4H // ..............................................*........................................ - uzp1 v9.8H, v9.8H, v23.8H // ...............................................*....................................... - smlal2 v11.4S, v19.8H, v4.8H // ................................................*...................................... - smlal2 v6.4S, v24.8H, v25.8H // .................................................*..................................... - smlal v3.4S, v19.4H, v4.4H // ..................................................*.................................... - ld1 {v20.8H}, [x6], #16 // ...................................................*................................... - smlal2 v11.4S, v24.8H, v10.8H // .....................................................*................................. - smlal v3.4S, v24.4H, v10.4H // ......................................................*................................ - ld1 {v7.8H}, [x9], #16 // .......................................................*............................... - smlal2 v11.4S, v1.8H, v20.8H // .........................................................*............................. - smlal v3.4S, v1.4H, v20.4H // ..........................................................*............................ - smlal2 v6.4S, v1.8H, v10.8H // ...........................................................*........................... - uzp2 v17.8H, v15.8H, v13.8H // ............................................................*.......................... - smlal2 v11.4S, v30.8H, v9.8H // .............................................................*......................... - smlal v3.4S, v30.4H, v9.4H // ..............................................................*........................ - smlal2 v6.4S, v30.8H, v5.8H // ...............................................................*....................... - smlal v21.4S, v17.4H, v9.4H // ................................................................*...................... - smlal2 v11.4S, v17.8H, v7.8H // .................................................................*..................... - smlal v3.4S, v17.4H, v7.4H // ..................................................................*.................... - smlal2 v6.4S, v17.8H, v9.8H // ...................................................................*................... - ldr q4, [x4, #16] // ....................................................................*.................. - uzp1 v30.8H, v3.8H, v11.8H // ......................................................................*................ - uzp1 v23.8H, v21.8H, v6.8H // .......................................................................*............... - mul v30.8H, v30.8H, v2.H[2] // ........................................................................*.............. - mul v10.8H, v23.8H, v2.H[2] // .........................................................................*............. - ldr q12, [x2], #32 // ..........................................................................*............ - smlal v3.4S, v30.4H, v0.4H // ............................................................................*.......... - smlal2 v11.4S, v30.8H, v0.8H // .............................................................................*......... - smlal v21.4S, v10.4H, v0.4H // ..............................................................................*........ - smlal2 v6.4S, v10.8H, v0.8H // ...............................................................................*....... - uzp2 v27.8H, v12.8H, v31.8H // ................................................................................*...... - uzp1 v13.8H, v12.8H, v31.8H // .................................................................................*..... - uzp2 v17.8H, v3.8H, v11.8H // ..................................................................................*.... - uzp2 v10.8H, v21.8H, v6.8H // ...................................................................................*... - sqdmulh v11.8H, v17.8H, v2.H[1] // ....................................................................................*.. - sqdmulh v21.8H, v10.8H, v2.H[1] // .....................................................................................*. - ldr q12, [x8, #16] // ......................................................................................* - - // ---------------------------------- cycle (expected) ----------------------------------> - // 0 25 50 75 - // |------------------------|------------------------|------------------------|----------- - // ldr q29, [x2, #16] // ...............*....................................................................... - // ldr q19, [x2], #32 // ..........*............................................................................ - // uzp1 v13.8H, v19.8H, v29.8H // ...................*................................................................... - // uzp2 v27.8H, v19.8H, v29.8H // ....................*.................................................................. - // ldr q4, [x4, #16] // ........*.............................................................................. - // ldr q12, [x8, #16] // .................................*..................................................... - // ldr q8, [x1], #32 // .................*..................................................................... - // ldr q18, [x1, #-16] // .............*......................................................................... - // ld1 {v31.8H}, [x3], #16 // ............................................*.......................................... - // uzp1 v30.8H, v8.8H, v18.8H // .....................*................................................................. - // uzp2 v7.8H, v8.8H, v18.8H // ........................*.............................................................. - // smull2 v24.4S, v30.8H, v13.8H // ...........................................*........................................... - // ldr q23, [x4], #32 // ......*................................................................................ - // uzp1 v25.8H, v23.8H, v4.8H // ............*.......................................................................... - // smlal2 v24.4S, v7.8H, v31.8H // ................................................*...................................... - // ldr q8, [x5], #32 // ..*.................................................................................... - // ldr q10, [x5, #-16] // ....*.................................................................................. - // ld1 {v17.8H}, [x6], #16 // ...................................................*................................... - // uzp1 v1.8H, v8.8H, v10.8H // ......................*................................................................ - // smull v28.4S, v30.4H, v27.4H // .......................*............................................................... - // smlal2 v24.4S, v25.8H, v1.8H // .....................................................*................................. - // smull2 v20.4S, v30.8H, v27.8H // ......................................*................................................ - // uzp2 v15.8H, v23.8H, v4.8H // ................................*...................................................... - // smlal2 v24.4S, v15.8H, v17.8H // .........................................................*............................. - // ld1 {v9.8H}, [x9], #16 // .......................................................*............................... - // smlal v28.4S, v7.4H, v13.4H // ...........................*........................................................... - // smlal2 v20.4S, v7.8H, v13.8H // ..........................................*............................................ - // smull v21.4S, v30.4H, v13.4H // ..............................................*........................................ - // uzp2 v5.8H, v8.8H, v10.8H // ............................*.......................................................... - // smlal2 v20.4S, v25.8H, v5.8H // .................................................*..................................... - // smlal v21.4S, v7.4H, v31.4H // ..................................................*.................................... - // ldr q6, [x8], #32 // .............................*......................................................... - // smlal2 v20.4S, v15.8H, v1.8H // ...........................................................*........................... - // smlal v21.4S, v25.4H, v1.4H // ......................................................*................................ - // smlal v28.4S, v25.4H, v5.4H // ...............................*....................................................... - // uzp1 v10.8H, v6.8H, v12.8H // ...............................................*....................................... - // uzp2 v27.8H, v6.8H, v12.8H // .....................................*................................................. - // smlal v21.4S, v15.4H, v17.4H // ..........................................................*............................ - // smlal v28.4S, v15.4H, v1.4H // ...................................*................................................... - // ldr q11, [x7], #32 // *...................................................................................... - // ldr q14, [x7, #-16] // .........................*............................................................. - // ldr q29, [x2, #16] // ........................................*.............................................. - // uzp1 v31.8H, v11.8H, v14.8H // ....................................*.................................................. - // uzp2 v30.8H, v11.8H, v14.8H // ............................................................*.......................... - // smlal v21.4S, v31.4H, v10.4H // ..............................................................*........................ - // smlal v28.4S, v31.4H, v27.4H // .......................................*............................................... - // smlal2 v24.4S, v31.8H, v10.8H // .............................................................*......................... - // smlal2 v20.4S, v31.8H, v27.8H // ...............................................................*....................... - // smlal v21.4S, v30.4H, v9.4H // ..................................................................*.................... - // smlal v28.4S, v30.4H, v10.4H // ................................................................*...................... - // smlal2 v24.4S, v30.8H, v9.8H // .................................................................*..................... - // smlal2 v20.4S, v30.8H, v10.8H // ...................................................................*................... - // ldr q19, [x2], #32 // ..........................................................................*............ - // uzp1 v3.8H, v21.8H, v24.8H // ......................................................................*................ - // uzp1 v1.8H, v28.8H, v20.8H // .......................................................................*............... - // mul v3.8H, v3.8H, v2.H[2] // ........................................................................*.............. - // mul v18.8H, v1.8H, v2.H[2] // .........................................................................*............. - // uzp1 v13.8H, v19.8H, v29.8H // .................................................................................*..... - // uzp2 v27.8H, v19.8H, v29.8H // ................................................................................*...... - // smlal2 v24.4S, v3.8H, v0.8H // .............................................................................*......... - // smlal v28.4S, v18.4H, v0.4H // ..............................................................................*........ - // smlal2 v20.4S, v18.8H, v0.8H // ...............................................................................*....... - // smlal v21.4S, v3.4H, v0.4H // ............................................................................*.......... - // ldr q4, [x4, #16] // ....................................................................*.................. - // uzp2 v10.8H, v28.8H, v20.8H // ...................................................................................*... - // uzp2 v17.8H, v21.8H, v24.8H // ..................................................................................*.... - // sqdmulh v21.8H, v10.8H, v2.H[1] // .....................................................................................*. - // sqdmulh v11.8H, v17.8H, v2.H[1] // ....................................................................................*.. - // ldr q12, [x8, #16] // ......................................................................................* + // Instructions: 61 + // Expected cycles: 32 + // Expected IPC: 1.91 + + // Cycle bound: 32.0 + // IPC bound: 1.91 + + // Wall time: 12.09s + // User time: 12.09s + + // ------ cycle (expected) -------> + // 0 25 + // |------------------------|------ + ldr q12, [x8], #32 // *............................... + ldr q21, [x2], #32 // *............................... + ldr q24, [x2, #-16] // .*.............................. + ldr q7, [x1, #16] // .*.............................. + ldr q29, [x1], #32 // ..*............................. + ldr q3, [x5], #32 // ..*............................. + ldr q4, [x8, #-16] // ...*............................ + ldr q17, [x5, #-16] // ...*............................ + ldr q9, [x4, #16] // ....*........................... + ldr q20, [x7], #32 // ....*........................... + ldr q22, [x4], #32 // .....*.......................... + uzp1 v31.8H, v21.8H, v24.8H // .....*.......................... + ld1 {v8.8H}, [x3], #16 // ......*......................... + uzp1 v26.8H, v29.8H, v7.8H // ......*......................... + ldr q19, [x7, #-16] // .......*........................ + uzp1 v11.8H, v3.8H, v17.8H // .......*........................ + uzp2 v13.8H, v29.8H, v7.8H // ........*....................... + smull2 v14.4S, v26.8H, v31.8H // ........*....................... + smull v10.4S, v26.4H, v31.4H // .........*...................... + uzp1 v28.8H, v22.8H, v9.8H // .........*...................... + smlal2 v14.4S, v13.8H, v8.8H // ..........*..................... + ld1 {v18.8H}, [x6], #16 // ..........*..................... + uzp2 v15.8H, v22.8H, v9.8H // ...........*.................... + smlal2 v14.4S, v28.8H, v11.8H // ...........*.................... + smlal v10.4S, v13.4H, v8.4H // ............*................... + uzp1 v1.8H, v20.8H, v19.8H // ............*................... + smlal v10.4S, v28.4H, v11.4H // .............*.................. + ld1 {v16.8H}, [x9], #16 // .............*.................. + smlal2 v14.4S, v15.8H, v18.8H // ..............*................. + uzp1 v5.8H, v12.8H, v4.8H // ..............*................. + smlal v10.4S, v15.4H, v18.4H // ...............*................ + uzp2 v23.8H, v12.8H, v4.8H // ...............*................ + uzp2 v27.8H, v20.8H, v19.8H // ................*............... + smlal2 v14.4S, v1.8H, v5.8H // ................*............... + smlal v10.4S, v1.4H, v5.4H // .................*.............. + ldr q29, [x8], #32 // .................*.............. + smlal2 v14.4S, v27.8H, v16.8H // ..................*............. + ldr q7, [x4], #32 // ..................*............. + uzp2 v24.8H, v21.8H, v24.8H // ...................*............ + smlal v10.4S, v27.4H, v16.4H // ...................*............ + uzp2 v19.8H, v3.8H, v17.8H // ....................*........... + ldr q16, [x8, #-16] // ....................*........... + smull v12.4S, v26.4H, v24.4H // .....................*.......... + ld1 {v21.8H}, [x9], #16 // .....................*.......... + smull2 v4.4S, v26.8H, v24.8H // ......................*......... + ldr q6, [x7, #16] // ......................*......... + smlal v12.4S, v13.4H, v31.4H // .......................*........ + uzp1 v24.8H, v10.8H, v14.8H // .......................*........ + smlal v12.4S, v28.4H, v19.4H // ........................*....... + ldr q30, [x4, #-16] // ........................*....... + mul v8.8H, v24.8H, v2.H[2] // .........................*...... + ldr q26, [x1], #32 // .........................*...... + ldr q22, [x5], #32 // ..........................*..... + ldr q9, [x2], #32 // ...........................*.... + smlal v12.4S, v15.4H, v11.4H // ...........................*.... + smlal v12.4S, v1.4H, v23.4H // ............................*... + ldr q18, [x1, #-16] // ............................*... + smlal v12.4S, v27.4H, v5.4H // .............................*.. + smlal v10.4S, v8.4H, v0.4H // ..............................*. + smlal2 v14.4S, v8.8H, v0.8H // ...............................* + ld1 {v8.8H}, [x3], #16 // ...............................* + + // ------ cycle (expected) -------> + // 0 25 + // |------------------------|------ + // ldr q26, [x1], #32 // ..*............................. + // ldr q29, [x8], #32 // *............................... + // ldr q7, [x4], #32 // .....*.......................... + // ldr q30, [x4, #-16] // ....*........................... + // ldr q16, [x8, #-16] // ...*............................ + // ld1 {v8.8H}, [x3], #16 // ......*......................... + // ldr q18, [x1, #-16] // .*.............................. + // ld1 {v21.8H}, [x9], #16 // .............*.................. + // ldr q6, [x7, #16] // .......*........................ + // ldr q22, [x5], #32 // ..*............................. + // ldr q9, [x2], #32 // *............................... + // ldr q3, [x7], #32 // ....*........................... + // ldr q24, [x2, #-16] // .*.............................. + // uzp2 v13.8H, v26.8H, v18.8H // ........*....................... + // uzp1 v19.8H, v26.8H, v18.8H // ......*......................... + // uzp1 v31.8H, v9.8H, v24.8H // .....*.......................... + // ld1 {v20.8H}, [x6], #16 // ..........*..................... + // uzp1 v28.8H, v7.8H, v30.8H // .........*...................... + // smull v10.4S, v19.4H, v31.4H // .........*...................... + // ldr q25, [x5, #-16] // ...*............................ + // smlal v10.4S, v13.4H, v8.4H // ............*................... + // smull2 v14.4S, v19.8H, v31.8H // ........*....................... + // uzp2 v15.8H, v7.8H, v30.8H // ...........*.................... + // uzp2 v23.8H, v29.8H, v16.8H // ...............*................ + // ldr q26, [x1], #32 // .........................*...... + // uzp1 v11.8H, v22.8H, v25.8H // .......*........................ + // uzp2 v9.8H, v9.8H, v24.8H // ...................*............ + // smlal2 v14.4S, v13.8H, v8.8H // ..........*..................... + // uzp1 v5.8H, v29.8H, v16.8H // ..............*................. + // smlal2 v14.4S, v28.8H, v11.8H // ...........*.................... + // uzp1 v1.8H, v3.8H, v6.8H // ............*................... + // smlal2 v14.4S, v15.8H, v20.8H // ..............*................. + // uzp2 v27.8H, v3.8H, v6.8H // ................*............... + // smlal2 v14.4S, v1.8H, v5.8H // ................*............... + // smlal2 v14.4S, v27.8H, v21.8H // ..................*............. + // smull v12.4S, v19.4H, v9.4H // .....................*.......... + // ldr q29, [x8], #32 // .................*.............. + // ldr q7, [x4], #32 // ..................*............. + // smlal v10.4S, v28.4H, v11.4H // .............*.................. + // ldr q30, [x4, #-16] // ........................*....... + // smlal v10.4S, v15.4H, v20.4H // ...............*................ + // ldr q16, [x8, #-16] // ....................*........... + // smlal v10.4S, v1.4H, v5.4H // .................*.............. + // ld1 {v8.8H}, [x3], #16 // ...............................* + // smlal v10.4S, v27.4H, v21.4H // ...................*............ + // smull2 v4.4S, v19.8H, v9.8H // ......................*......... + // uzp2 v19.8H, v22.8H, v25.8H // ....................*........... + // smlal v12.4S, v13.4H, v31.4H // .......................*........ + // ldr q18, [x1, #-16] // ............................*... + // smlal v12.4S, v28.4H, v19.4H // ........................*....... + // ld1 {v21.8H}, [x9], #16 // .....................*.......... + // uzp1 v22.8H, v10.8H, v14.8H // .......................*........ + // ldr q6, [x7, #16] // ......................*......... + // mul v20.8H, v22.8H, v2.H[2] // .........................*...... + // ldr q22, [x5], #32 // ..........................*..... + // smlal v12.4S, v15.4H, v11.4H // ...........................*.... + // ldr q9, [x2], #32 // ...........................*.... + // smlal v12.4S, v1.4H, v23.4H // ............................*... + // smlal v12.4S, v27.4H, v5.4H // .............................*.. + // smlal v10.4S, v20.4H, v0.4H // ..............................*. + // smlal2 v14.4S, v20.8H, v0.8H // ...............................* sub count, count, #2 k3_loop_start: // Instructions: 71 - // Expected cycles: 86 - // Expected IPC: 0.83 - - // Cycle bound: 86.0 - // IPC bound: 0.83 - - // Wall time: 34.12s - // User time: 34.12s - - // --------------------------------- cycle (expected) ----------------------------------> - // 0 25 50 75 - // |------------------------|------------------------|------------------------|---------- - ldr q8, [x1], #32 // *..................................................................................... - ldr q18, [x1, #-16] // ..*................................................................................... - ld1 {v31.8H}, [x3], #16 // ....*................................................................................. - uzp1 v30.8H, v8.8H, v18.8H // ......*............................................................................... - uzp2 v7.8H, v8.8H, v18.8H // .......*.............................................................................. - smull2 v24.4S, v30.8H, v13.8H // ........*............................................................................. - ldr q23, [x4], #32 // .........*............................................................................ - srshr v8.8H, v11.8H, #11 // ...........l.......................................................................... - srshr v6.8H, v21.8H, #11 // ............l......................................................................... - uzp1 v25.8H, v23.8H, v4.8H // .............*........................................................................ - mls v17.8H, v8.8H, v2.H[0] // ..............l....................................................................... - mls v10.8H, v6.8H, v2.H[0] // ...............l...................................................................... - smlal2 v24.4S, v7.8H, v31.8H // ................*..................................................................... - ldr q8, [x5], #32 // .................*.................................................................... - zip1 v3.8H, v17.8H, v10.8H // ...................l.................................................................. - zip2 v21.8H, v17.8H, v10.8H // ....................l................................................................. - ldr q10, [x5, #-16] // .....................*................................................................ - ld1 {v17.8H}, [x6], #16 // .......................*.............................................................. - uzp1 v1.8H, v8.8H, v10.8H // .........................*............................................................ - smull v28.4S, v30.4H, v27.4H // ..........................*........................................................... - smlal2 v24.4S, v25.8H, v1.8H // ...........................*.......................................................... - smull2 v20.4S, v30.8H, v27.8H // ............................*......................................................... - uzp2 v15.8H, v23.8H, v4.8H // .............................*........................................................ - str q21, [x0, #16] // ..............................l....................................................... - smlal2 v24.4S, v15.8H, v17.8H // ...............................*...................................................... - ld1 {v9.8H}, [x9], #16 // ................................*..................................................... - smlal v28.4S, v7.4H, v13.4H // ..................................*................................................... - smlal2 v20.4S, v7.8H, v13.8H // ...................................*.................................................. - smull v21.4S, v30.4H, v13.4H // ....................................*................................................. - uzp2 v5.8H, v8.8H, v10.8H // .....................................*................................................ - str q3, [x0], #32 // ......................................l............................................... - smlal2 v20.4S, v25.8H, v5.8H // .......................................*.............................................. - smlal v21.4S, v7.4H, v31.4H // ........................................*............................................. - ldr q6, [x8], #32 // .........................................*............................................ - smlal2 v20.4S, v15.8H, v1.8H // ...........................................*.......................................... - smlal v21.4S, v25.4H, v1.4H // ............................................*......................................... - smlal v28.4S, v25.4H, v5.4H // .............................................*........................................ - uzp1 v10.8H, v6.8H, v12.8H // ..............................................*....................................... - uzp2 v27.8H, v6.8H, v12.8H // ...............................................*...................................... - smlal v21.4S, v15.4H, v17.4H // ................................................*..................................... - smlal v28.4S, v15.4H, v1.4H // .................................................*.................................... - ldr q11, [x7], #32 // ..................................................*................................... - ldr q14, [x7, #-16] // ....................................................*................................. - ldr q29, [x2, #16] // ......................................................e............................... - uzp1 v31.8H, v11.8H, v14.8H // ........................................................*............................. - uzp2 v30.8H, v11.8H, v14.8H // .........................................................*............................ - smlal v21.4S, v31.4H, v10.4H // ..........................................................*........................... - smlal v28.4S, v31.4H, v27.4H // ...........................................................*.......................... - smlal2 v24.4S, v31.8H, v10.8H // ............................................................*......................... - smlal2 v20.4S, v31.8H, v27.8H // .............................................................*........................ - smlal v21.4S, v30.4H, v9.4H // ..............................................................*....................... - smlal v28.4S, v30.4H, v10.4H // ...............................................................*...................... - smlal2 v24.4S, v30.8H, v9.8H // ................................................................*..................... - smlal2 v20.4S, v30.8H, v10.8H // .................................................................*.................... - ldr q19, [x2], #32 // ..................................................................e................... - uzp1 v3.8H, v21.8H, v24.8H // ....................................................................*................. - uzp1 v1.8H, v28.8H, v20.8H // .....................................................................*................ - mul v3.8H, v3.8H, v2.H[2] // ......................................................................*............... - mul v18.8H, v1.8H, v2.H[2] // .......................................................................*.............. - uzp1 v13.8H, v19.8H, v29.8H // ........................................................................e............. - uzp2 v27.8H, v19.8H, v29.8H // .........................................................................e............ - smlal2 v24.4S, v3.8H, v0.8H // ..........................................................................*........... - smlal v28.4S, v18.4H, v0.4H // ...........................................................................*.......... - smlal2 v20.4S, v18.8H, v0.8H // ............................................................................*......... - smlal v21.4S, v3.4H, v0.4H // .............................................................................*........ - ldr q4, [x4, #16] // ..............................................................................e....... - uzp2 v10.8H, v28.8H, v20.8H // ................................................................................*..... - uzp2 v17.8H, v21.8H, v24.8H // .................................................................................*.... - sqdmulh v21.8H, v10.8H, v2.H[1] // ..................................................................................*... - sqdmulh v11.8H, v17.8H, v2.H[1] // ...................................................................................*.. - ldr q12, [x8, #16] // ....................................................................................e. - - // --------------------------------------------------------------------- cycle (expected) ---------------------------------------------------------------------> - // 0 25 50 75 100 125 150 - // |------------------------|------------------------|------------------------|------------------------|------------------------|------------------------|------ - // ldr q12, [x1], #32 // ................................*.....................................................................................~...................................... - // ldr q13, [x1, #-16] // ................................'.*...................................................................................'.~.................................... - // uzp1 v3.8h, v12.8h, v13.8h // ................................'.....*...............................................................................'.....~................................ - // uzp2 v4.8h, v12.8h, v13.8h // ................................'......*..............................................................................'......~............................... - // ldr q12, [x2], #32 // ............e...................'.................................................................~...................'...................................... - // ldr q13, [x2, #-16] // e...............................'.....................................................~...............................'...................................... - // uzp1 v5.8h, v12.8h, v13.8h // ..................e.............'.......................................................................~.............'...................................... - // uzp2 v6.8h, v12.8h, v13.8h // ...................e............'........................................................................~............'...................................... - // ld1 {v7.8h}, [x3], #16 // ................................'...*.................................................................................'...~.................................. - // smull v8.4s, v3.4h, v5.4h // ................................'...................................*.................................................'...................................~.. - // smull2 v10.4s, v3.8h, v5.8h // ................................'.......*.............................................................................'.......~.............................. - // smlal v8.4s, v4.4h, v7.4h // ................................'.......................................*.............................................'...................................... - // smlal2 v10.4s, v4.8h, v7.8h // ................................'...............*.....................................................................'...............~...................... - // smull v9.4s, v3.4h, v6.4h // ................................'.........................*...........................................................'.........................~............ - // smull2 v11.4s, v3.8h, v6.8h // ................................'...........................*.........................................................'...........................~.......... - // smlal v9.4s, v4.4h, v5.4h // ................................'.................................*...................................................'.................................~.... - // smlal2 v11.4s, v4.8h, v5.8h // ................................'..................................*..................................................'..................................~... - // ldr q12, [x4], #32 // ................................'........*............................................................................'........~............................. - // ldr q13, [x4, #-16] // ........................e.......'.............................................................................~.......'...................................... - // uzp1 v3.8h, v12.8h, v13.8h // ................................'............*........................................................................'............~......................... - // uzp2 v4.8h, v12.8h, v13.8h // ................................'............................*........................................................'............................~......... - // ldr q12, [x5], #32 // ................................'................*....................................................................'................~..................... - // ldr q13, [x5, #-16] // ................................'....................*................................................................'....................~................. - // uzp1 v5.8h, v12.8h, v13.8h // ................................'........................*............................................................'........................~............. - // uzp2 v6.8h, v12.8h, v13.8h // ................................'....................................*................................................'....................................~. - // ld1 {v7.8h}, [x6], #16 // ................................'......................*..............................................................'......................~............... - // smlal v8.4s, v3.4h, v5.4h // ................................'...........................................*.........................................'...................................... - // smlal2 v10.4s, v3.8h, v5.8h // ................................'..........................*..........................................................'..........................~........... - // smlal v8.4s, v4.4h, v7.4h // ................................'...............................................*.....................................'...................................... - // smlal2 v10.4s, v4.8h, v7.8h // ................................'..............................*......................................................'..............................~....... - // smlal v9.4s, v3.4h, v6.4h // ................................'............................................*........................................'...................................... - // smlal2 v11.4s, v3.8h, v6.8h // ................................'......................................*..............................................'...................................... - // smlal v9.4s, v4.4h, v5.4h // ................................'................................................*....................................'...................................... - // smlal2 v11.4s, v4.8h, v5.8h // ................................'..........................................*..........................................'...................................... - // ldr q12, [x7], #32 // ................................'.................................................*...................................'...................................... - // ldr q13, [x7, #-16] // ................................'...................................................*.................................'...................................... - // uzp1 v3.8h, v12.8h, v13.8h // ..~.............................'.......................................................*.............................'...................................... - // uzp2 v4.8h, v12.8h, v13.8h // ...~............................'........................................................*............................'...................................... - // ldr q12, [x8], #32 // ................................'........................................*............................................'...................................... - // ldr q13, [x8, #-16] // ..............................e.'...................................................................................~.'...................................... - // uzp1 v5.8h, v12.8h, v13.8h // ................................'.............................................*.......................................'...................................... - // uzp2 v6.8h, v12.8h, v13.8h // ................................'..............................................*......................................'...................................... - // ld1 {v7.8h}, [x9], #16 // ................................'...............................*.....................................................'...............................~...... - // smlal v8.4s, v3.4h, v5.4h // ....~...........................'.........................................................*...........................'...................................... - // smlal2 v10.4s, v3.8h, v5.8h // ......~.........................'...........................................................*.........................'...................................... - // smlal v8.4s, v4.4h, v7.4h // ........~.......................'.............................................................*.......................'...................................... - // smlal2 v10.4s, v4.8h, v7.8h // ..........~.....................'...............................................................*.....................'...................................... - // smlal v9.4s, v3.4h, v6.4h // .....~..........................'..........................................................*..........................'...................................... - // smlal2 v11.4s, v3.8h, v6.8h // .......~........................'............................................................*........................'...................................... - // smlal v9.4s, v4.4h, v5.4h // .........~......................'..............................................................*......................'...................................... - // smlal2 v11.4s, v4.8h, v5.8h // ...........~....................'................................................................*....................'...................................... - // uzp1 v28.8h, v8.8h, v10.8h // ..............~.................'...................................................................*.................'...................................... - // mul v28.8h, v28.8h, v2.h[2] // ................~...............'.....................................................................*...............'...................................... - // smlal v8.4s, v28.4h, v0.4h // .......................~........'............................................................................*........'...................................... - // smlal2 v10.4s, v28.8h, v0.8h // ....................~...........'.........................................................................*...........'...................................... - // uzp2 v26.8h, v8.8h, v10.8h // ...........................~....'................................................................................*....'...................................... - // uzp1 v28.8h, v9.8h, v11.8h // ...............~................'....................................................................*................'...................................... - // mul v28.8h, v28.8h, v2.h[2] // .................~..............'......................................................................*..............'...................................... - // smlal v9.4s, v28.4h, v0.4h // .....................~..........'..........................................................................*..........'...................................... - // smlal2 v11.4s, v28.8h, v0.8h // ......................~.........'...........................................................................*.........'...................................... - // uzp2 v27.8h, v9.8h, v11.8h // ..........................~.....'...............................................................................*.....'...................................... - // sqdmulh v28.8h, v26.8h, v2.h[1] // .............................~..'..................................................................................*..'...................................... - // srshr v28.8h, v28.8h, #11 // ................................'..........~..........................................................................'..........l........................... - // mls v26.8h, v28.8h, v2.h[0] // ................................'.............~.......................................................................'.............l........................ - // sqdmulh v28.8h, v27.8h, v2.h[1] // ............................~...'.................................................................................*...'...................................... - // srshr v28.8h, v28.8h, #11 // ................................'...........~.........................................................................'...........l.......................... - // mls v27.8h, v28.8h, v2.h[0] // ................................'..............~......................................................................'..............l....................... - // zip1 v12.8h, v26.8h, v27.8h // ................................'..................~..................................................................'..................l................... - // zip2 v13.8h, v26.8h, v27.8h // ................................'...................~.................................................................'...................l.................. - // str q12, [x0], #32 // ................................'.....................................~...............................................'.....................................l - // str q13, [x0, #-16] // ................................'.............................~.......................................................'.............................l........ + // Expected cycles: 40 + // Expected IPC: 1.77 + + // Cycle bound: 40.0 + // IPC bound: 1.77 + + // Wall time: 143.94s + // User time: 143.94s + + // ---------- cycle (expected) -----------> + // 0 25 + // |------------------------|-------------- + smlal2 v4.4S, v13.8H, v31.8H // l....................................... + ldr q3, [x7], #32 // *....................................... + smlal2 v4.4S, v28.8H, v19.8H // .l...................................... + ldr q24, [x2, #-16] // .*...................................... + smlal2 v4.4S, v15.8H, v11.8H // ..l..................................... + uzp2 v13.8H, v26.8H, v18.8H // ..*..................................... + uzp2 v17.8H, v10.8H, v14.8H // ...l.................................... + smlal2 v4.4S, v1.8H, v23.8H // ...l.................................... + uzp1 v19.8H, v26.8H, v18.8H // ....*................................... + smlal2 v4.4S, v27.8H, v5.8H // ....l................................... + uzp1 v31.8H, v9.8H, v24.8H // .....*.................................. + sqdmulh v27.8H, v17.8H, v2.H[1] // .....l.................................. + ld1 {v20.8H}, [x6], #16 // ......*................................. + uzp1 v28.8H, v7.8H, v30.8H // ......*................................. + smull v10.4S, v19.4H, v31.4H // .......*................................ + ldr q25, [x5, #-16] // .......*................................ + smlal v10.4S, v13.4H, v8.4H // ........*............................... + uzp1 v23.8H, v12.8H, v4.8H // ........l............................... + smull2 v14.4S, v19.8H, v31.8H // .........*.............................. + uzp2 v15.8H, v7.8H, v30.8H // .........*.............................. + mul v7.8H, v23.8H, v2.H[2] // ..........l............................. + uzp2 v23.8H, v29.8H, v16.8H // ..........*............................. + ldr q26, [x1], #32 // ...........e............................ + uzp1 v11.8H, v22.8H, v25.8H // ...........*............................ + uzp2 v9.8H, v9.8H, v24.8H // ............*........................... + smlal2 v14.4S, v13.8H, v8.8H // ............*........................... + uzp1 v5.8H, v29.8H, v16.8H // .............*.......................... + smlal2 v14.4S, v28.8H, v11.8H // .............*.......................... + uzp1 v1.8H, v3.8H, v6.8H // ..............*......................... + smlal2 v14.4S, v15.8H, v20.8H // ..............*......................... + smlal v12.4S, v7.4H, v0.4H // ...............l........................ + srshr v16.8H, v27.8H, #11 // ...............l........................ + uzp2 v27.8H, v3.8H, v6.8H // ................*....................... + smlal2 v4.4S, v7.8H, v0.8H // ................l....................... + smlal2 v14.4S, v1.8H, v5.8H // .................*...................... + smlal2 v14.4S, v27.8H, v21.8H // ..................*..................... + mls v17.8H, v16.8H, v2.H[0] // ...................l.................... + uzp2 v24.8H, v12.8H, v4.8H // ....................l................... + smull v12.4S, v19.4H, v9.4H // .....................*.................. + ldr q29, [x8], #32 // ......................e................. + sqdmulh v6.8H, v24.8H, v2.H[1] // ......................l................. + ldr q7, [x4], #32 // .......................e................ + smlal v10.4S, v28.4H, v11.4H // ........................*............... + ldr q30, [x4, #-16] // ........................e............... + smlal v10.4S, v15.4H, v20.4H // .........................*.............. + ldr q16, [x8, #-16] // .........................e.............. + smlal v10.4S, v1.4H, v5.4H // ..........................*............. + ld1 {v8.8H}, [x3], #16 // ..........................e............. + srshr v6.8H, v6.8H, #11 // ...........................l............ + smlal v10.4S, v27.4H, v21.4H // ...........................*............ + smull2 v4.4S, v19.8H, v9.8H // ............................*........... + uzp2 v19.8H, v22.8H, v25.8H // ............................*........... + smlal v12.4S, v13.4H, v31.4H // .............................*.......... + ldr q18, [x1, #-16] // .............................e.......... + smlal v12.4S, v28.4H, v19.4H // ..............................*......... + ld1 {v21.8H}, [x9], #16 // ..............................e......... + mls v24.8H, v6.8H, v2.H[0] // ...............................l........ + uzp1 v22.8H, v10.8H, v14.8H // ...............................*........ + ldr q6, [x7, #16] // ................................e....... + mul v20.8H, v22.8H, v2.H[2] // .................................*...... + ldr q22, [x5], #32 // ..................................e..... + smlal v12.4S, v15.4H, v11.4H // ...................................*.... + ldr q9, [x2], #32 // ...................................e.... + smlal v12.4S, v1.4H, v23.4H // ....................................*... + zip2 v25.8H, v17.8H, v24.8H // ....................................l... + zip1 v3.8H, v17.8H, v24.8H // .....................................l.. + smlal v12.4S, v27.4H, v5.4H // .....................................*.. + smlal v10.4S, v20.4H, v0.4H // ......................................*. + str q25, [x0, #16] // ......................................l. + str q3, [x0], #32 // .......................................l + smlal2 v14.4S, v20.8H, v0.8H // .......................................* + + // --------------------------------------------- cycle (expected) ---------------------------------------------> + // 0 25 50 75 100 + // |------------------------|------------------------|------------------------|------------------------|-------- + // ldr q12, [x1], #32 // e............................'..........~............................'..........~............................ + // ldr q13, [x1, #-16] // ..................e..........'............................~..........'............................~.......... + // uzp1 v3.8h, v12.8h, v13.8h // .............................'...*...................................'...~................................... + // uzp2 v4.8h, v12.8h, v13.8h // .............................'.*.....................................'.~..................................... + // ldr q12, [x2], #32 // ........................e....'..................................~....'..................................~.... + // ldr q13, [x2, #-16] // .............................'*......................................'~...................................... + // uzp1 v5.8h, v12.8h, v13.8h // .............................'....*..................................'....~.................................. + // uzp2 v6.8h, v12.8h, v13.8h // .~...........................'...........*...........................'...........~........................... + // ld1 {v7.8h}, [x3], #16 // ...............e.............'.........................~.............'.........................~............. + // smull v8.4s, v3.4h, v5.4h // .............................'......*................................'......~................................ + // smull2 v10.4s, v3.8h, v5.8h // .............................'........*..............................'........~.............................. + // smlal v8.4s, v4.4h, v7.4h // .............................'.......*...............................'.......~............................... + // smlal2 v10.4s, v4.8h, v7.8h // .~...........................'...........*...........................'...........~........................... + // smull v9.4s, v3.4h, v6.4h // ..........~..................'....................*..................'....................~.................. + // smull2 v11.4s, v3.8h, v6.8h // .................~...........'...........................*...........'...........................~........... + // smlal v9.4s, v4.4h, v5.4h // ..................~..........'............................*..........'............................~.......... + // smlal2 v11.4s, v4.8h, v5.8h // .............................~.......................................l....................................... + // ldr q12, [x4], #32 // ............e................'......................~................'......................~................ + // ldr q13, [x4, #-16] // .............e...............'.......................~...............'.......................~............... + // uzp1 v3.8h, v12.8h, v13.8h // .............................'.....*.................................'.....~................................. + // uzp2 v4.8h, v12.8h, v13.8h // .............................'........*..............................'........~.............................. + // ldr q12, [x5], #32 // .......................e.....'.................................~.....'.................................~..... + // ldr q13, [x5, #-16] // .............................'......*................................'......~................................ + // uzp1 v5.8h, v12.8h, v13.8h // ~............................'..........*............................'..........~............................ + // uzp2 v6.8h, v12.8h, v13.8h // .................~...........'...........................*...........'...........................~........... + // ld1 {v7.8h}, [x6], #16 // .............................'.....*.................................'.....~................................. + // smlal v8.4s, v3.4h, v5.4h // .............~...............'.......................*...............'.......................~............... + // smlal2 v10.4s, v3.8h, v5.8h // ..~..........................'............*..........................'............~.......................... + // smlal v8.4s, v4.4h, v7.4h // ..............~..............'........................*..............'........................~.............. + // smlal2 v10.4s, v4.8h, v7.8h // ...~.........................'.............*.........................'.............~......................... + // smlal v9.4s, v3.4h, v6.4h // ...................~.........'.............................*.........'.............................~......... + // smlal2 v11.4s, v3.8h, v6.8h // .............................'~......................................'l...................................... + // smlal v9.4s, v4.4h, v5.4h // ........................~....'..................................*....'..................................~.... + // smlal2 v11.4s, v4.8h, v5.8h // .............................'.~.....................................'.l..................................... + // ldr q12, [x7], #32 // .............................*.......................................~....................................... + // ldr q13, [x7, #-16] // .....................e.......'...............................~.......'...............................~....... + // uzp1 v3.8h, v12.8h, v13.8h // ...~.........................'.............*.........................'.............~......................... + // uzp2 v4.8h, v12.8h, v13.8h // .....~.......................'...............*.......................'...............~....................... + // ldr q12, [x8], #32 // ...........e.................'.....................~.................'.....................~................. + // ldr q13, [x8, #-16] // ..............e..............'........................~..............'........................~.............. + // uzp1 v5.8h, v12.8h, v13.8h // ..~..........................'............*..........................'............~.......................... + // uzp2 v6.8h, v12.8h, v13.8h // .............................'.........*.............................'.........~............................. + // ld1 {v7.8h}, [x9], #16 // ...................e.........'.............................~.........'.............................~......... + // smlal v8.4s, v3.4h, v5.4h // ...............~.............'.........................*.............'.........................~............. + // smlal2 v10.4s, v3.8h, v5.8h // ......~......................'................*......................'................~...................... + // smlal v8.4s, v4.4h, v7.4h // ................~............'..........................*............'..........................~............ + // smlal2 v10.4s, v4.8h, v7.8h // .......~.....................'.................*.....................'.................~..................... + // smlal v9.4s, v3.4h, v6.4h // .........................~...'...................................*...'...................................~... + // smlal2 v11.4s, v3.8h, v6.8h // .............................'..~....................................'..l.................................... + // smlal v9.4s, v4.4h, v5.4h // ..........................~..'....................................*..'....................................~.. + // smlal2 v11.4s, v4.8h, v5.8h // .............................'...~...................................'...l................................... + // uzp1 v28.8h, v8.8h, v10.8h // ....................~........'..............................*........'..............................~........ + // mul v28.8h, v28.8h, v2.h[2] // ......................~......'................................*......'................................~...... + // smlal v8.4s, v28.4h, v0.4h // ...........................~.'.....................................*.'.....................................~. + // smlal2 v10.4s, v28.8h, v0.8h // ............................~'......................................*'....................................... + // uzp2 v26.8h, v8.8h, v10.8h // .............................'..~....................................'..l.................................... + // uzp1 v28.8h, v9.8h, v11.8h // .............................'.......~...............................'.......l............................... + // mul v28.8h, v28.8h, v2.h[2] // .............................'.........~.............................'.........l............................. + // smlal v9.4s, v28.4h, v0.4h // ....~........................'..............~........................'..............l........................ + // smlal2 v11.4s, v28.8h, v0.8h // .....~.......................'...............~.......................'...............l....................... + // uzp2 v27.8h, v9.8h, v11.8h // .........~...................'...................~...................'...................l................... + // sqdmulh v28.8h, v26.8h, v2.h[1] // .............................'....~..................................'....l.................................. + // srshr v28.8h, v28.8h, #11 // ....~........................'..............~........................'..............l........................ + // mls v26.8h, v28.8h, v2.h[0] // ........~....................'..................~....................'..................l.................... + // sqdmulh v28.8h, v27.8h, v2.h[1] // ...........~.................'.....................~.................'.....................l................. + // srshr v28.8h, v28.8h, #11 // ................~............'..........................~............'..........................l............ + // mls v27.8h, v28.8h, v2.h[0] // ....................~........'..............................~........'..............................l........ + // zip1 v12.8h, v26.8h, v27.8h // ..........................~..'....................................~..'....................................l.. + // zip2 v13.8h, v26.8h, v27.8h // .........................~...'...................................~...'...................................l... + // str q12, [x0], #32 // ............................~'......................................~'......................................l + // str q13, [x0, #-16] // ...........................~.'.....................................~.'.....................................l. sub count, count, #1 cbnz count, k3_loop_start - // Instructions: 73 - // Expected cycles: 89 - // Expected IPC: 0.82 - - // Cycle bound: 89.0 - // IPC bound: 0.82 - - // Wall time: 10.54s - // User time: 10.54s - - // ----------------------------------- cycle (expected) -----------------------------------> - // 0 25 50 75 - // |------------------------|------------------------|------------------------|------------- - ldr q3, [x8], #32 // *........................................................................................ - ldr q30, [x4], #32 // ..*...................................................................................... - uzp1 v25.8H, v3.8H, v12.8H // ....*.................................................................................... - uzp2 v3.8H, v3.8H, v12.8H // .....*................................................................................... - uzp1 v7.8H, v30.8H, v4.8H // ......*.................................................................................. - ldr q19, [x5], #32 // .......*................................................................................. - ldr q29, [x5, #-16] // .........*............................................................................... - ld1 {v9.8H}, [x3], #16 // ...........*............................................................................. - uzp1 v28.8H, v19.8H, v29.8H // .............*........................................................................... - ldr q6, [x7, #16] // ..............*.......................................................................... - ldr q31, [x7], #32 // ................*........................................................................ - ldr q12, [x1, #16] // ..................*...................................................................... - uzp1 v15.8H, v31.8H, v6.8H // ....................*.................................................................... - uzp2 v31.8H, v31.8H, v6.8H // .....................*................................................................... - ldr q5, [x1], #32 // ......................*.................................................................. - uzp2 v6.8H, v19.8H, v29.8H // ........................*................................................................ - uzp2 v22.8H, v30.8H, v4.8H // .........................*............................................................... - uzp1 v20.8H, v5.8H, v12.8H // ..........................*.............................................................. - uzp2 v5.8H, v5.8H, v12.8H // ...........................*............................................................. - smull v4.4S, v20.4H, v27.4H // ............................*............................................................ - smull2 v12.4S, v20.8H, v13.8H // .............................*........................................................... - smull v23.4S, v20.4H, v13.4H // ..............................*.......................................................... - smull2 v27.4S, v20.8H, v27.8H // ...............................*......................................................... - smlal v4.4S, v5.4H, v13.4H // ................................*........................................................ - smlal2 v12.4S, v5.8H, v9.8H // .................................*....................................................... - smlal v23.4S, v5.4H, v9.4H // ..................................*...................................................... - smlal2 v27.4S, v5.8H, v13.8H // ...................................*..................................................... - smlal v4.4S, v7.4H, v6.4H // ....................................*.................................................... - smlal2 v12.4S, v7.8H, v28.8H // .....................................*................................................... - ld1 {v24.8H}, [x6], #16 // ......................................*.................................................. - smlal v4.4S, v22.4H, v28.4H // ........................................*................................................ - smlal v23.4S, v7.4H, v28.4H // .........................................*............................................... - smlal2 v27.4S, v7.8H, v6.8H // ..........................................*.............................................. - ld1 {v5.8H}, [x9], #16 // ...........................................*............................................. - smlal2 v12.4S, v22.8H, v24.8H // .............................................*........................................... - smlal2 v27.4S, v22.8H, v28.8H // ..............................................*.......................................... - smlal v23.4S, v22.4H, v24.4H // ...............................................*......................................... - smlal v4.4S, v15.4H, v3.4H // ................................................*........................................ - smlal2 v12.4S, v15.8H, v25.8H // .................................................*....................................... - smlal2 v27.4S, v15.8H, v3.8H // ..................................................*...................................... - smlal v23.4S, v15.4H, v25.4H // ...................................................*..................................... - smlal v4.4S, v31.4H, v25.4H // ....................................................*.................................... - smlal2 v12.4S, v31.8H, v5.8H // .....................................................*................................... - smlal2 v27.4S, v31.8H, v25.8H // ......................................................*.................................. - smlal v23.4S, v31.4H, v5.4H // .......................................................*................................. - srshr v31.8H, v11.8H, #11 // ........................................................*................................ - srshr v21.8H, v21.8H, #11 // .........................................................*............................... - uzp1 v3.8H, v4.8H, v27.8H // ..........................................................*.............................. - uzp1 v9.8H, v23.8H, v12.8H // ...........................................................*............................. - mul v8.8H, v3.8H, v2.H[2] // ............................................................*............................ - mul v30.8H, v9.8H, v2.H[2] // .............................................................*........................... - mls v17.8H, v31.8H, v2.H[0] // ..............................................................*.......................... - mls v10.8H, v21.8H, v2.H[0] // ...............................................................*......................... - smlal v4.4S, v8.4H, v0.4H // ................................................................*........................ - smlal v23.4S, v30.4H, v0.4H // .................................................................*....................... - smlal2 v27.4S, v8.8H, v0.8H // ..................................................................*...................... - smlal2 v12.4S, v30.8H, v0.8H // ...................................................................*..................... - zip1 v21.8H, v17.8H, v10.8H // ....................................................................*.................... - zip2 v10.8H, v17.8H, v10.8H // .....................................................................*................... - uzp2 v3.8H, v4.8H, v27.8H // ......................................................................*.................. - uzp2 v31.8H, v23.8H, v12.8H // .......................................................................*................. - sqdmulh v6.8H, v3.8H, v2.H[1] // ........................................................................*................ - sqdmulh v30.8H, v31.8H, v2.H[1] // .........................................................................*............... - str q21, [x0], #32 // ..........................................................................*.............. - srshr v13.8H, v6.8H, #11 // ............................................................................*............ - srshr v1.8H, v30.8H, #11 // .............................................................................*........... - str q10, [x0, #-16] // ..............................................................................*.......... - mls v3.8H, v13.8H, v2.H[0] // ...............................................................................*......... - mls v31.8H, v1.8H, v2.H[0] // ................................................................................*........ - zip1 v21.8H, v31.8H, v3.8H // ....................................................................................*.... - zip2 v13.8H, v31.8H, v3.8H // .....................................................................................*... - str q21, [x0], #32 // ......................................................................................*.. - str q13, [x0, #-16] // ........................................................................................* - - // ----------------------------------- cycle (expected) -----------------------------------> - // 0 25 50 75 - // |------------------------|------------------------|------------------------|------------- - // ldr q8, [x1], #32 // ......................*.................................................................. - // ldr q18, [x1, #-16] // ..................*...................................................................... - // ld1 {v31.8H}, [x3], #16 // ...........*............................................................................. - // uzp1 v30.8H, v8.8H, v18.8H // ..........................*.............................................................. - // uzp2 v7.8H, v8.8H, v18.8H // ...........................*............................................................. - // smull2 v24.4S, v30.8H, v13.8H // .............................*........................................................... - // ldr q23, [x4], #32 // ..*...................................................................................... - // srshr v8.8H, v11.8H, #11 // ........................................................*................................ - // srshr v6.8H, v21.8H, #11 // .........................................................*............................... - // uzp1 v25.8H, v23.8H, v4.8H // ......*.................................................................................. - // mls v17.8H, v8.8H, v2.H[0] // ..............................................................*.......................... - // mls v10.8H, v6.8H, v2.H[0] // ...............................................................*......................... - // smlal2 v24.4S, v7.8H, v31.8H // .................................*....................................................... - // ldr q8, [x5], #32 // .......*................................................................................. - // zip1 v3.8H, v17.8H, v10.8H // ....................................................................*.................... - // zip2 v21.8H, v17.8H, v10.8H // .....................................................................*................... - // ldr q10, [x5, #-16] // .........*............................................................................... - // ld1 {v17.8H}, [x6], #16 // ......................................*.................................................. - // uzp1 v1.8H, v8.8H, v10.8H // .............*........................................................................... - // smull v28.4S, v30.4H, v27.4H // ............................*............................................................ - // smlal2 v24.4S, v25.8H, v1.8H // .....................................*................................................... - // smull2 v20.4S, v30.8H, v27.8H // ...............................*......................................................... - // uzp2 v15.8H, v23.8H, v4.8H // .........................*............................................................... - // str q21, [x0, #16] // ..............................................................................*.......... - // smlal2 v24.4S, v15.8H, v17.8H // .............................................*........................................... - // ld1 {v9.8H}, [x9], #16 // ...........................................*............................................. - // smlal v28.4S, v7.4H, v13.4H // ................................*........................................................ - // smlal2 v20.4S, v7.8H, v13.8H // ...................................*..................................................... - // smull v21.4S, v30.4H, v13.4H // ..............................*.......................................................... - // uzp2 v5.8H, v8.8H, v10.8H // ........................*................................................................ - // str q3, [x0], #32 // ..........................................................................*.............. - // smlal2 v20.4S, v25.8H, v5.8H // ..........................................*.............................................. - // smlal v21.4S, v7.4H, v31.4H // ..................................*...................................................... - // ldr q6, [x8], #32 // *........................................................................................ - // smlal2 v20.4S, v15.8H, v1.8H // ..............................................*.......................................... - // smlal v21.4S, v25.4H, v1.4H // .........................................*............................................... - // smlal v28.4S, v25.4H, v5.4H // ....................................*.................................................... - // uzp1 v10.8H, v6.8H, v12.8H // ....*.................................................................................... - // uzp2 v27.8H, v6.8H, v12.8H // .....*................................................................................... - // smlal v21.4S, v15.4H, v17.4H // ...............................................*......................................... - // smlal v28.4S, v15.4H, v1.4H // ........................................*................................................ - // ldr q11, [x7], #32 // ................*........................................................................ - // ldr q14, [x7, #-16] // ..............*.......................................................................... - // uzp1 v31.8H, v11.8H, v14.8H // ....................*.................................................................... - // uzp2 v30.8H, v11.8H, v14.8H // .....................*................................................................... - // smlal v21.4S, v31.4H, v10.4H // ...................................................*..................................... - // smlal v28.4S, v31.4H, v27.4H // ................................................*........................................ - // smlal2 v24.4S, v31.8H, v10.8H // .................................................*....................................... - // smlal2 v20.4S, v31.8H, v27.8H // ..................................................*...................................... - // smlal v21.4S, v30.4H, v9.4H // .......................................................*................................. - // smlal v28.4S, v30.4H, v10.4H // ....................................................*.................................... - // smlal2 v24.4S, v30.8H, v9.8H // .....................................................*................................... - // smlal2 v20.4S, v30.8H, v10.8H // ......................................................*.................................. - // uzp1 v3.8H, v21.8H, v24.8H // ...........................................................*............................. - // uzp1 v1.8H, v28.8H, v20.8H // ..........................................................*.............................. - // mul v3.8H, v3.8H, v2.H[2] // .............................................................*........................... - // mul v18.8H, v1.8H, v2.H[2] // ............................................................*............................ - // smlal2 v24.4S, v3.8H, v0.8H // ...................................................................*..................... - // smlal v28.4S, v18.4H, v0.4H // ................................................................*........................ - // smlal2 v20.4S, v18.8H, v0.8H // ..................................................................*...................... - // smlal v21.4S, v3.4H, v0.4H // .................................................................*....................... - // uzp2 v10.8H, v28.8H, v20.8H // ......................................................................*.................. - // uzp2 v17.8H, v21.8H, v24.8H // .......................................................................*................. - // sqdmulh v21.8H, v10.8H, v2.H[1] // ........................................................................*................ - // sqdmulh v11.8H, v17.8H, v2.H[1] // .........................................................................*............... - // srshr v8.8H, v11.8H, #11 // .............................................................................*........... - // srshr v6.8H, v21.8H, #11 // ............................................................................*............ - // mls v17.8H, v8.8H, v2.H[0] // ................................................................................*........ - // mls v10.8H, v6.8H, v2.H[0] // ...............................................................................*......... - // zip1 v3.8H, v17.8H, v10.8H // ....................................................................................*.... - // zip2 v21.8H, v17.8H, v10.8H // .....................................................................................*... - // str q21, [x0, #16] // ........................................................................................* - // str q3, [x0], #32 // ......................................................................................*.. + // Instructions: 81 + // Expected cycles: 66 + // Expected IPC: 1.23 + + // Cycle bound: 66.0 + // IPC bound: 1.23 + + // Wall time: 5.52s + // User time: 5.52s + + // ----------------------- cycle (expected) ------------------------> + // 0 25 50 + // |------------------------|------------------------|--------------- + ldr q17, [x2, #-16] // *................................................................. + uzp2 v20.8H, v7.8H, v30.8H // *................................................................. + smlal2 v4.4S, v13.8H, v31.8H // .*................................................................ + uzp2 v31.8H, v26.8H, v18.8H // .*................................................................ + ldr q3, [x5, #-16] // ..*............................................................... + smlal2 v4.4S, v28.8H, v19.8H // ..*............................................................... + uzp1 v13.8H, v26.8H, v18.8H // ...*.............................................................. + smlal2 v4.4S, v15.8H, v11.8H // ...*.............................................................. + smlal2 v4.4S, v1.8H, v23.8H // ....*............................................................. + uzp1 v19.8H, v9.8H, v17.8H // ....*............................................................. + uzp1 v18.8H, v7.8H, v30.8H // .....*............................................................ + smlal2 v4.4S, v27.8H, v5.8H // .....*............................................................ + smull v28.4S, v13.4H, v19.4H // ......*........................................................... + uzp1 v15.8H, v22.8H, v3.8H // ......*........................................................... + uzp2 v30.8H, v9.8H, v17.8H // .......*.......................................................... + smlal v28.4S, v31.4H, v8.4H // .......*.......................................................... + smlal v28.4S, v18.4H, v15.4H // ........*......................................................... + ldr q25, [x7], #32 // ........*......................................................... + uzp2 v1.8H, v22.8H, v3.8H // .........*........................................................ + smull v24.4S, v13.4H, v30.4H // .........*........................................................ + smlal v24.4S, v31.4H, v19.4H // ..........*....................................................... + ld1 {v3.8H}, [x6], #16 // ..........*....................................................... + smlal v24.4S, v18.4H, v1.4H // ...........*...................................................... + uzp2 v5.8H, v29.8H, v16.8H // ...........*...................................................... + uzp1 v27.8H, v29.8H, v16.8H // ............*..................................................... + smull2 v9.4S, v13.8H, v19.8H // ............*..................................................... + smlal2 v9.4S, v31.8H, v8.8H // .............*.................................................... + uzp1 v23.8H, v25.8H, v6.8H // .............*.................................................... + smlal2 v9.4S, v18.8H, v15.8H // ..............*................................................... + uzp2 v22.8H, v25.8H, v6.8H // ..............*................................................... + smlal2 v9.4S, v20.8H, v3.8H // ...............*.................................................. + uzp1 v26.8H, v12.8H, v4.8H // ...............*.................................................. + uzp2 v17.8H, v10.8H, v14.8H // ................*................................................. + smlal2 v9.4S, v23.8H, v27.8H // ................*................................................. + smlal v28.4S, v20.4H, v3.4H // .................*................................................ + smlal v24.4S, v20.4H, v15.4H // ..................*............................................... + smlal2 v9.4S, v22.8H, v21.8H // ...................*.............................................. + smlal v28.4S, v23.4H, v27.4H // ....................*............................................. + smlal v28.4S, v22.4H, v21.4H // .....................*............................................ + smlal v24.4S, v23.4H, v5.4H // ......................*........................................... + smlal v24.4S, v22.4H, v27.4H // .......................*.......................................... + smull2 v10.4S, v13.8H, v30.8H // ........................*......................................... + smlal2 v10.4S, v31.8H, v19.8H // .........................*........................................ + uzp1 v11.8H, v28.8H, v9.8H // .........................*........................................ + smlal2 v10.4S, v18.8H, v1.8H // ..........................*....................................... + mul v11.8H, v11.8H, v2.H[2] // ...........................*...................................... + smlal2 v10.4S, v20.8H, v15.8H // .............................*.................................... + smlal2 v10.4S, v23.8H, v5.8H // ..............................*................................... + smlal2 v10.4S, v22.8H, v27.8H // ...............................*.................................. + smlal v28.4S, v11.4H, v0.4H // ................................*................................. + sqdmulh v29.8H, v17.8H, v2.H[1] // .................................*................................ + uzp1 v23.8H, v24.8H, v10.8H // ...................................*.............................. + mul v7.8H, v26.8H, v2.H[2] // ...................................*.............................. + mul v21.8H, v23.8H, v2.H[2] // .....................................*............................ + srshr v1.8H, v29.8H, #11 // ......................................*........................... + smlal2 v9.4S, v11.8H, v0.8H // .......................................*.......................... + smlal v12.4S, v7.4H, v0.4H // ........................................*......................... + smlal2 v4.4S, v7.8H, v0.8H // .........................................*........................ + smlal v24.4S, v21.4H, v0.4H // ..........................................*....................... + smlal2 v10.4S, v21.8H, v0.8H // ...........................................*...................... + uzp2 v18.8H, v28.8H, v9.8H // ...........................................*...................... + uzp2 v25.8H, v12.8H, v4.8H // .............................................*.................... + sqdmulh v15.8H, v18.8H, v2.H[1] // .............................................*.................... + uzp2 v13.8H, v24.8H, v10.8H // ...............................................*.................. + sqdmulh v6.8H, v25.8H, v2.H[1] // ...............................................*.................. + sqdmulh v31.8H, v13.8H, v2.H[1] // .................................................*................ + srshr v14.8H, v15.8H, #11 // ..................................................*............... + mls v17.8H, v1.8H, v2.H[0] // ...................................................*.............. + srshr v26.8H, v6.8H, #11 // ....................................................*............. + mls v18.8H, v14.8H, v2.H[0] // ......................................................*........... + srshr v21.8H, v31.8H, #11 // ......................................................*........... + mls v25.8H, v26.8H, v2.H[0] // ........................................................*......... + mls v13.8H, v21.8H, v2.H[0] // ..........................................................*....... + zip2 v7.8H, v17.8H, v25.8H // .............................................................*.... + zip1 v26.8H, v17.8H, v25.8H // .............................................................*.... + zip2 v3.8H, v18.8H, v13.8H // ...............................................................*.. + zip1 v23.8H, v18.8H, v13.8H // ...............................................................*.. + str q7, [x0, #16] // ................................................................*. + str q26, [x0], #32 // ................................................................*. + str q3, [x0, #16] // .................................................................* + str q23, [x0], #32 // .................................................................* + + // ----------------------- cycle (expected) ------------------------> + // 0 25 50 + // |------------------------|------------------------|--------------- + // smlal2 v4.4S, v13.8H, v31.8H // .*................................................................ + // ldr q3, [x7], #32 // ........*......................................................... + // smlal2 v4.4S, v28.8H, v19.8H // ..*............................................................... + // ldr q24, [x2, #-16] // *................................................................. + // smlal2 v4.4S, v15.8H, v11.8H // ...*.............................................................. + // uzp2 v13.8H, v26.8H, v18.8H // .*................................................................ + // uzp2 v17.8H, v10.8H, v14.8H // ................*................................................. + // smlal2 v4.4S, v1.8H, v23.8H // ....*............................................................. + // uzp1 v19.8H, v26.8H, v18.8H // ...*.............................................................. + // smlal2 v4.4S, v27.8H, v5.8H // .....*............................................................ + // uzp1 v31.8H, v9.8H, v24.8H // ....*............................................................. + // sqdmulh v27.8H, v17.8H, v2.H[1] // .................................*................................ + // ld1 {v20.8H}, [x6], #16 // ..........*....................................................... + // uzp1 v28.8H, v7.8H, v30.8H // .....*............................................................ + // smull v10.4S, v19.4H, v31.4H // ......*........................................................... + // ldr q25, [x5, #-16] // ..*............................................................... + // smlal v10.4S, v13.4H, v8.4H // .......*.......................................................... + // uzp1 v23.8H, v12.8H, v4.8H // ...............*.................................................. + // smull2 v14.4S, v19.8H, v31.8H // ............*..................................................... + // uzp2 v15.8H, v7.8H, v30.8H // *................................................................. + // mul v7.8H, v23.8H, v2.H[2] // ...................................*.............................. + // uzp2 v23.8H, v29.8H, v16.8H // ...........*...................................................... + // uzp1 v11.8H, v22.8H, v25.8H // ......*........................................................... + // uzp2 v9.8H, v9.8H, v24.8H // .......*.......................................................... + // smlal2 v14.4S, v13.8H, v8.8H // .............*.................................................... + // uzp1 v5.8H, v29.8H, v16.8H // ............*..................................................... + // smlal2 v14.4S, v28.8H, v11.8H // ..............*................................................... + // uzp1 v1.8H, v3.8H, v6.8H // .............*.................................................... + // smlal2 v14.4S, v15.8H, v20.8H // ...............*.................................................. + // smlal v12.4S, v7.4H, v0.4H // ........................................*......................... + // srshr v16.8H, v27.8H, #11 // ......................................*........................... + // uzp2 v27.8H, v3.8H, v6.8H // ..............*................................................... + // smlal2 v4.4S, v7.8H, v0.8H // .........................................*........................ + // smlal2 v14.4S, v1.8H, v5.8H // ................*................................................. + // smlal2 v14.4S, v27.8H, v21.8H // ...................*.............................................. + // mls v17.8H, v16.8H, v2.H[0] // ...................................................*.............. + // uzp2 v24.8H, v12.8H, v4.8H // .............................................*.................... + // smull v12.4S, v19.4H, v9.4H // .........*........................................................ + // sqdmulh v6.8H, v24.8H, v2.H[1] // ...............................................*.................. + // smlal v10.4S, v28.4H, v11.4H // ........*......................................................... + // smlal v10.4S, v15.4H, v20.4H // .................*................................................ + // smlal v10.4S, v1.4H, v5.4H // ....................*............................................. + // srshr v6.8H, v6.8H, #11 // ....................................................*............. + // smlal v10.4S, v27.4H, v21.4H // .....................*............................................ + // smull2 v4.4S, v19.8H, v9.8H // ........................*......................................... + // uzp2 v19.8H, v22.8H, v25.8H // .........*........................................................ + // smlal v12.4S, v13.4H, v31.4H // ..........*....................................................... + // smlal v12.4S, v28.4H, v19.4H // ...........*...................................................... + // mls v24.8H, v6.8H, v2.H[0] // ........................................................*......... + // uzp1 v22.8H, v10.8H, v14.8H // .........................*........................................ + // mul v20.8H, v22.8H, v2.H[2] // ...........................*...................................... + // smlal v12.4S, v15.4H, v11.4H // ..................*............................................... + // smlal v12.4S, v1.4H, v23.4H // ......................*........................................... + // zip2 v25.8H, v17.8H, v24.8H // .............................................................*.... + // zip1 v3.8H, v17.8H, v24.8H // .............................................................*.... + // smlal v12.4S, v27.4H, v5.4H // .......................*.......................................... + // smlal v10.4S, v20.4H, v0.4H // ................................*................................. + // str q25, [x0, #16] // ................................................................*. + // str q3, [x0], #32 // ................................................................*. + // smlal2 v14.4S, v20.8H, v0.8H // .......................................*.......................... + // smlal2 v4.4S, v13.8H, v31.8H // .........................*........................................ + // smlal2 v4.4S, v28.8H, v19.8H // ..........................*....................................... + // smlal2 v4.4S, v15.8H, v11.8H // .............................*.................................... + // uzp2 v17.8H, v10.8H, v14.8H // ...........................................*...................... + // smlal2 v4.4S, v1.8H, v23.8H // ..............................*................................... + // smlal2 v4.4S, v27.8H, v5.8H // ...............................*.................................. + // sqdmulh v27.8H, v17.8H, v2.H[1] // .............................................*.................... + // uzp1 v23.8H, v12.8H, v4.8H // ...................................*.............................. + // mul v7.8H, v23.8H, v2.H[2] // .....................................*............................ + // smlal v12.4S, v7.4H, v0.4H // ..........................................*....................... + // srshr v16.8H, v27.8H, #11 // ..................................................*............... + // smlal2 v4.4S, v7.8H, v0.8H // ...........................................*...................... + // mls v17.8H, v16.8H, v2.H[0] // ......................................................*........... + // uzp2 v24.8H, v12.8H, v4.8H // ...............................................*.................. + // sqdmulh v6.8H, v24.8H, v2.H[1] // .................................................*................ + // srshr v6.8H, v6.8H, #11 // ......................................................*........... + // mls v24.8H, v6.8H, v2.H[0] // ..........................................................*....... + // zip2 v25.8H, v17.8H, v24.8H // ...............................................................*.. + // zip1 v3.8H, v17.8H, v24.8H // ...............................................................*.. + // str q25, [x0, #16] // .................................................................* + // str q3, [x0], #32 // .................................................................* pop_stack @@ -1109,591 +1109,591 @@ _polyvec_basemul_acc_montgomery_cached_asm_k4_opt: add b3_cache_ptr, b0_cache_ptr, #(3 * 512/2) mov count, #(KYBER_N / 16) - // Instructions: 100 - // Expected cycles: 139 - // Expected IPC: 0.72 - // - // Cycle bound: 139.0 - // IPC bound: 0.72 - // - // Wall time: 0.55s - // User time: 0.55s - // - // ------------------------------------------------------------ cycle (expected) ------------------------------------------------------------> - // 0 25 50 75 100 125 - // |------------------------|------------------------|------------------------|------------------------|------------------------|------------- - ldr q13, [x1], #32 // *.......................................................................................................................................... - ldr q10, [x1, #-16] // ..*........................................................................................................................................ - ldr q21, [x2], #32 // ....*...................................................................................................................................... - uzp1 v3.8H, v13.8H, v10.8H // ......*.................................................................................................................................... - uzp2 v13.8H, v13.8H, v10.8H // .......*................................................................................................................................... - ldr q10, [x2, #-16] // ........*.................................................................................................................................. - ld1 {v12.8H}, [x3], #16 // ..........*................................................................................................................................ - uzp1 v6.8H, v21.8H, v10.8H // ............*.............................................................................................................................. - uzp2 v10.8H, v21.8H, v10.8H // .............*............................................................................................................................. - smull v21.4S, v3.4H, v6.4H // ..............*............................................................................................................................ - smull2 v30.4S, v3.8H, v6.8H // ...............*........................................................................................................................... - smull v31.4S, v3.4H, v10.4H // ................*.......................................................................................................................... - smull2 v10.4S, v3.8H, v10.8H // .................*......................................................................................................................... - smlal v21.4S, v13.4H, v12.4H // ..................*........................................................................................................................ - smlal2 v30.4S, v13.8H, v12.8H // ...................*....................................................................................................................... - smlal v31.4S, v13.4H, v6.4H // ....................*...................................................................................................................... - smlal2 v10.4S, v13.8H, v6.8H // .....................*..................................................................................................................... - ldr q13, [x4], #32 // ......................*.................................................................................................................... - ldr q3, [x4, #-16] // ........................*.................................................................................................................. - ldr q12, [x5], #32 // ..........................*................................................................................................................ - uzp1 v6.8H, v13.8H, v3.8H // ............................*.............................................................................................................. - uzp2 v13.8H, v13.8H, v3.8H // .............................*............................................................................................................. - ldr q3, [x5, #-16] // ..............................*............................................................................................................ - ld1 {v5.8H}, [x6], #16 // ................................*.......................................................................................................... - uzp1 v9.8H, v12.8H, v3.8H // ..................................*........................................................................................................ - uzp2 v3.8H, v12.8H, v3.8H // ...................................*....................................................................................................... - smlal v21.4S, v6.4H, v9.4H // ....................................*...................................................................................................... - smlal2 v30.4S, v6.8H, v9.8H // .....................................*..................................................................................................... - smlal v31.4S, v6.4H, v3.4H // ......................................*.................................................................................................... - smlal2 v10.4S, v6.8H, v3.8H // .......................................*................................................................................................... - smlal v21.4S, v13.4H, v5.4H // ........................................*.................................................................................................. - smlal2 v30.4S, v13.8H, v5.8H // .........................................*................................................................................................. - smlal v31.4S, v13.4H, v9.4H // ..........................................*................................................................................................ - smlal2 v10.4S, v13.8H, v9.8H // ...........................................*............................................................................................... - ldr q13, [x7], #32 // ............................................*.............................................................................................. - ldr q3, [x7, #-16] // ..............................................*............................................................................................ - ldr q12, [x8], #32 // ................................................*.......................................................................................... - uzp1 v6.8H, v13.8H, v3.8H // ..................................................*........................................................................................ - uzp2 v13.8H, v13.8H, v3.8H // ...................................................*....................................................................................... - ldr q3, [x8, #-16] // ....................................................*...................................................................................... - ld1 {v5.8H}, [x9], #16 // ......................................................*.................................................................................... - uzp1 v9.8H, v12.8H, v3.8H // ........................................................*.................................................................................. - uzp2 v3.8H, v12.8H, v3.8H // .........................................................*................................................................................. - smlal v21.4S, v6.4H, v9.4H // ..........................................................*................................................................................ - smlal2 v30.4S, v6.8H, v9.8H // ...........................................................*............................................................................... - smlal v31.4S, v6.4H, v3.4H // ............................................................*.............................................................................. - smlal2 v10.4S, v6.8H, v3.8H // .............................................................*............................................................................. - smlal v21.4S, v13.4H, v5.4H // ..............................................................*............................................................................ - smlal2 v30.4S, v13.8H, v5.8H // ...............................................................*........................................................................... - smlal v31.4S, v13.4H, v9.4H // ................................................................*.......................................................................... - smlal2 v10.4S, v13.8H, v9.8H // .................................................................*......................................................................... - ldr q13, [x10], #32 // ..................................................................*........................................................................ - ldr q3, [x10, #-16] // ....................................................................*...................................................................... - ldr q12, [x11], #32 // ......................................................................*.................................................................... - uzp1 v6.8H, v13.8H, v3.8H // ........................................................................*.................................................................. - uzp2 v13.8H, v13.8H, v3.8H // .........................................................................*................................................................. - ldr q3, [x11, #-16] // ..........................................................................*................................................................ - ld1 {v5.8H}, [x12], #16 // ............................................................................*.............................................................. - uzp1 v9.8H, v12.8H, v3.8H // ..............................................................................*............................................................ - uzp2 v3.8H, v12.8H, v3.8H // ...............................................................................*........................................................... - smlal v21.4S, v6.4H, v9.4H // ................................................................................*.......................................................... - smlal2 v30.4S, v6.8H, v9.8H // .................................................................................*......................................................... - smlal v31.4S, v6.4H, v3.4H // ..................................................................................*........................................................ - smlal2 v10.4S, v6.8H, v3.8H // ...................................................................................*....................................................... - smlal v21.4S, v13.4H, v5.4H // ....................................................................................*...................................................... - smlal2 v30.4S, v13.8H, v5.8H // .....................................................................................*..................................................... - smlal v31.4S, v13.4H, v9.4H // ......................................................................................*.................................................... - smlal2 v10.4S, v13.8H, v9.8H // .......................................................................................*................................................... - ldr q6, [x1], #32 // ........................................................................................*.................................................. - uzp1 v13.8H, v21.8H, v30.8H // ..........................................................................................*................................................ - uzp1 v3.8H, v31.8H, v10.8H // ...........................................................................................*............................................... - mul v13.8H, v13.8H, v2.H[2] // ............................................................................................*.............................................. - mul v3.8H, v3.8H, v2.H[2] // .............................................................................................*............................................. - ldr q12, [x2], #32 // ..............................................................................................*............................................ - smlal v21.4S, v13.4H, v0.4H // ................................................................................................*.......................................... - smlal2 v30.4S, v13.8H, v0.8H // .................................................................................................*......................................... - smlal v31.4S, v3.4H, v0.4H // ..................................................................................................*........................................ - smlal2 v10.4S, v3.8H, v0.8H // ...................................................................................................*....................................... - ldr q13, [x2, #-16] // ....................................................................................................*...................................... - uzp2 v8.8H, v21.8H, v30.8H // ......................................................................................................*.................................... - uzp2 v26.8H, v31.8H, v10.8H // .......................................................................................................*................................... - uzp1 v5.8H, v12.8H, v13.8H // ........................................................................................................*.................................. - uzp2 v30.8H, v12.8H, v13.8H // .........................................................................................................*................................. - ldr q10, [x1, #-16] // ..........................................................................................................*................................ - ld1 {v31.8H}, [x3], #16 // ............................................................................................................*.............................. - ldr q9, [x4], #32 // ..............................................................................................................*............................ - ldr q15, [x4, #-16] // ................................................................................................................*.......................... - ldr q25, [x5], #32 // ..................................................................................................................*........................ - ldr q20, [x5, #-16] // ....................................................................................................................*...................... - ld1 {v1.8H}, [x6], #16 // ......................................................................................................................*.................... - ldr q7, [x7], #32 // ........................................................................................................................*.................. - ldr q27, [x7, #-16] // ..........................................................................................................................*................ - ldr q24, [x8], #32 // ............................................................................................................................*.............. - ldr q28, [x8, #-16] // ..............................................................................................................................*............ - ld1 {v19.8H}, [x9], #16 // ................................................................................................................................*.......... - ldr q22, [x10], #32 // ..................................................................................................................................*........ - ldr q4, [x10, #-16] // ....................................................................................................................................*...... - ldr q16, [x11], #32 // ......................................................................................................................................*.... - ldr q29, [x11, #-16] // ........................................................................................................................................*.. - ld1 {v14.8H}, [x12], #16 // ..........................................................................................................................................* - - // ------------------------------------------------------------ cycle (expected) ------------------------------------------------------------> - // 0 25 50 75 100 125 - // |------------------------|------------------------|------------------------|------------------------|------------------------|------------- - // ldr q6, [x1], #32 // *.......................................................................................................................................... - // ldr q10, [x1, #-16] // ..*........................................................................................................................................ - // ldr q30, [x2], #32 // ....*...................................................................................................................................... - // ldr q13, [x2, #-16] // ........*.................................................................................................................................. - // ld1 {v31.8H}, [x3], #16 // ..........*................................................................................................................................ - // uzp1 v5.8H, v30.8H, v13.8H // ............*.............................................................................................................................. - // uzp2 v30.8H, v30.8H, v13.8H // .............*............................................................................................................................. - // ldr q9, [x4], #32 // ......................*.................................................................................................................... - // ldr q15, [x4, #-16] // ........................*.................................................................................................................. - // ldr q25, [x5], #32 // ..........................*................................................................................................................ - // ldr q20, [x5, #-16] // ..............................*............................................................................................................ - // ld1 {v1.8H}, [x6], #16 // ................................*.......................................................................................................... - // ldr q7, [x7], #32 // ............................................*.............................................................................................. - // ldr q27, [x7, #-16] // ..............................................*............................................................................................ - // ldr q24, [x8], #32 // ................................................*.......................................................................................... - // ldr q28, [x8, #-16] // ....................................................*...................................................................................... - // ld1 {v19.8H}, [x9], #16 // ......................................................*.................................................................................... - // ldr q22, [x10], #32 // ..................................................................*........................................................................ - // ldr q4, [x10, #-16] // ....................................................................*...................................................................... - // ldr q16, [x11], #32 // ......................................................................*.................................................................... - // ldr q29, [x11, #-16] // ..........................................................................*................................................................ - // ld1 {v14.8H}, [x12], #16 // ............................................................................*.............................................................. - // uzp1 v13.8H, v6.8H, v10.8H // ......*.................................................................................................................................... - // uzp2 v10.8H, v6.8H, v10.8H // .......*................................................................................................................................... - // smull v21.4S, v13.4H, v5.4H // ..............*............................................................................................................................ - // smull2 v3.4S, v13.8H, v5.8H // ...............*........................................................................................................................... - // smull v12.4S, v13.4H, v30.4H // ................*.......................................................................................................................... - // smull2 v13.4S, v13.8H, v30.8H // .................*......................................................................................................................... - // smlal v21.4S, v10.4H, v31.4H // ..................*........................................................................................................................ - // smlal2 v3.4S, v10.8H, v31.8H // ...................*....................................................................................................................... - // smlal v12.4S, v10.4H, v5.4H // ....................*...................................................................................................................... - // smlal2 v13.4S, v10.8H, v5.8H // .....................*..................................................................................................................... - // uzp1 v10.8H, v9.8H, v15.8H // ............................*.............................................................................................................. - // uzp2 v6.8H, v9.8H, v15.8H // .............................*............................................................................................................. - // uzp1 v30.8H, v25.8H, v20.8H // ..................................*........................................................................................................ - // uzp2 v31.8H, v25.8H, v20.8H // ...................................*....................................................................................................... - // smlal v21.4S, v10.4H, v30.4H // ....................................*...................................................................................................... - // smlal2 v3.4S, v10.8H, v30.8H // .....................................*..................................................................................................... - // smlal v12.4S, v10.4H, v31.4H // ......................................*.................................................................................................... - // smlal2 v13.4S, v10.8H, v31.8H // .......................................*................................................................................................... - // smlal v21.4S, v6.4H, v1.4H // ........................................*.................................................................................................. - // smlal2 v3.4S, v6.8H, v1.8H // .........................................*................................................................................................. - // smlal v12.4S, v6.4H, v30.4H // ..........................................*................................................................................................ - // smlal2 v13.4S, v6.8H, v30.8H // ...........................................*............................................................................................... - // uzp1 v10.8H, v7.8H, v27.8H // ..................................................*........................................................................................ - // uzp2 v6.8H, v7.8H, v27.8H // ...................................................*....................................................................................... - // uzp1 v30.8H, v24.8H, v28.8H // ........................................................*.................................................................................. - // uzp2 v31.8H, v24.8H, v28.8H // .........................................................*................................................................................. - // smlal v21.4S, v10.4H, v30.4H // ..........................................................*................................................................................ - // smlal2 v3.4S, v10.8H, v30.8H // ...........................................................*............................................................................... - // smlal v12.4S, v10.4H, v31.4H // ............................................................*.............................................................................. - // smlal2 v13.4S, v10.8H, v31.8H // .............................................................*............................................................................. - // smlal v21.4S, v6.4H, v19.4H // ..............................................................*............................................................................ - // smlal2 v3.4S, v6.8H, v19.8H // ...............................................................*........................................................................... - // smlal v12.4S, v6.4H, v30.4H // ................................................................*.......................................................................... - // smlal2 v13.4S, v6.8H, v30.8H // .................................................................*......................................................................... - // uzp1 v10.8H, v22.8H, v4.8H // ........................................................................*.................................................................. - // uzp2 v6.8H, v22.8H, v4.8H // .........................................................................*................................................................. - // uzp1 v30.8H, v16.8H, v29.8H // ..............................................................................*............................................................ - // uzp2 v31.8H, v16.8H, v29.8H // ...............................................................................*........................................................... - // smlal v21.4S, v10.4H, v30.4H // ................................................................................*.......................................................... - // smlal2 v3.4S, v10.8H, v30.8H // .................................................................................*......................................................... - // smlal v12.4S, v10.4H, v31.4H // ..................................................................................*........................................................ - // smlal2 v13.4S, v10.8H, v31.8H // ...................................................................................*....................................................... - // smlal v21.4S, v6.4H, v14.4H // ....................................................................................*...................................................... - // smlal2 v3.4S, v6.8H, v14.8H // .....................................................................................*..................................................... - // smlal v12.4S, v6.4H, v30.4H // ......................................................................................*.................................................... - // smlal2 v13.4S, v6.8H, v30.8H // .......................................................................................*................................................... - // uzp1 v6.8H, v21.8H, v3.8H // ..........................................................................................*................................................ - // mul v6.8H, v6.8H, v2.H[2] // ............................................................................................*.............................................. - // uzp1 v31.8H, v12.8H, v13.8H // ...........................................................................................*............................................... - // mul v31.8H, v31.8H, v2.H[2] // .............................................................................................*............................................. - // smlal v21.4S, v6.4H, v0.4H // ................................................................................................*.......................................... - // smlal2 v3.4S, v6.8H, v0.8H // .................................................................................................*......................................... - // smlal v12.4S, v31.4H, v0.4H // ..................................................................................................*........................................ - // smlal2 v13.4S, v31.8H, v0.8H // ...................................................................................................*....................................... - // ldr q6, [x1], #32 // ........................................................................................*.................................................. - // ldr q10, [x1, #-16] // ..........................................................................................................*................................ - // ldr q30, [x2], #32 // ..............................................................................................*............................................ - // uzp2 v8.8H, v21.8H, v3.8H // ......................................................................................................*.................................... - // uzp2 v26.8H, v12.8H, v13.8H // .......................................................................................................*................................... - // ldr q13, [x2, #-16] // ....................................................................................................*...................................... - // ld1 {v31.8H}, [x3], #16 // ............................................................................................................*.............................. - // uzp1 v5.8H, v30.8H, v13.8H // ........................................................................................................*.................................. - // uzp2 v30.8H, v30.8H, v13.8H // .........................................................................................................*................................. - // ldr q9, [x4], #32 // ..............................................................................................................*............................ - // ldr q15, [x4, #-16] // ................................................................................................................*.......................... - // ldr q25, [x5], #32 // ..................................................................................................................*........................ - // ldr q20, [x5, #-16] // ....................................................................................................................*...................... - // ld1 {v1.8H}, [x6], #16 // ......................................................................................................................*.................... - // ldr q7, [x7], #32 // ........................................................................................................................*.................. - // ldr q27, [x7, #-16] // ..........................................................................................................................*................ - // ldr q24, [x8], #32 // ............................................................................................................................*.............. - // ldr q28, [x8, #-16] // ..............................................................................................................................*............ - // ld1 {v19.8H}, [x9], #16 // ................................................................................................................................*.......... - // ldr q22, [x10], #32 // ..................................................................................................................................*........ - // ldr q4, [x10, #-16] // ....................................................................................................................................*...... - // ldr q16, [x11], #32 // ......................................................................................................................................*.... - // ldr q29, [x11, #-16] // ........................................................................................................................................*.. - // ld1 {v14.8H}, [x12], #16 // ..........................................................................................................................................* + // Instructions: 118 + // Expected cycles: 59 + // Expected IPC: 2.00 + // + // Cycle bound: 57.0 + // IPC bound: 2.07 + // + // Wall time: 217.40s + // User time: 217.40s + // + // -------------------- cycle (expected) --------------------> + // 0 25 50 + // |------------------------|------------------------|-------- + ldr q20, [x1], #32 // *.......................................................... + ldr q15, [x1, #-16] // *.......................................................... + ldr q23, [x2], #32 // .*......................................................... + ldr q18, [x2, #-16] // .*......................................................... + ldr q5, [x10, #16] // ..*........................................................ + ldr q17, [x10], #32 // ..*........................................................ + ldr q9, [x5], #32 // ...*....................................................... + ldr q1, [x5, #-16] // ...*....................................................... + ldr q13, [x4], #32 // ....*...................................................... + uzp2 v22.8H, v20.8H, v15.8H // ....*...................................................... + uzp1 v29.8H, v20.8H, v15.8H // .....*..................................................... + uzp2 v28.8H, v23.8H, v18.8H // .....*..................................................... + uzp1 v30.8H, v17.8H, v5.8H // ......*.................................................... + ldr q25, [x4, #-16] // ......*.................................................... + uzp2 v21.8H, v9.8H, v1.8H // .......*................................................... + smull2 v14.4S, v29.8H, v28.8H // .......*................................................... + ldr q20, [x8], #32 // ........*.................................................. + uzp1 v19.8H, v23.8H, v18.8H // ........*.................................................. + ldr q31, [x8, #-16] // .........*................................................. + uzp1 v18.8H, v9.8H, v1.8H // .........*................................................. + uzp1 v16.8H, v13.8H, v25.8H // ..........*................................................ + smull v7.4S, v29.4H, v19.4H // ..........*................................................ + ldr q11, [x7], #32 // ...........*............................................... + smlal2 v14.4S, v22.8H, v19.8H // ...........*............................................... + smlal2 v14.4S, v16.8H, v21.8H // ............*.............................................. + ldr q23, [x7, #-16] // ............*.............................................. + smull v4.4S, v29.4H, v28.4H // .............*............................................. + uzp2 v27.8H, v13.8H, v25.8H // .............*............................................. + uzp2 v12.8H, v20.8H, v31.8H // ..............*............................................ + smlal v4.4S, v22.4H, v19.4H // ..............*............................................ + ld1 {v8.8H}, [x3], #16 // ...............*........................................... + smull2 v1.4S, v29.8H, v19.8H // ...............*........................................... + smlal2 v14.4S, v27.8H, v18.8H // ................*.......................................... + uzp1 v3.8H, v11.8H, v23.8H // ................*.......................................... + ld1 {v29.8H}, [x6], #16 // .................*......................................... + smlal v4.4S, v16.4H, v21.4H // .................*......................................... + smlal2 v14.4S, v3.8H, v12.8H // ..................*........................................ + ldr q26, [x11, #16] // ..................*........................................ + smlal v4.4S, v27.4H, v18.4H // ...................*....................................... + ldr q25, [x4], #32 // ...................*....................................... + smlal v7.4S, v22.4H, v8.4H // ....................*...................................... + uzp2 v24.8H, v11.8H, v23.8H // ....................*...................................... + smlal v4.4S, v3.4H, v12.4H // .....................*..................................... + ldr q12, [x11], #32 // .....................*..................................... + smlal2 v1.4S, v22.8H, v8.8H // ......................*.................................... + ldr q13, [x4, #-16] // ......................*.................................... + smlal v7.4S, v16.4H, v18.4H // .......................*................................... + uzp1 v20.8H, v20.8H, v31.8H // .......................*................................... + smlal v7.4S, v27.4H, v29.4H // ........................*.................................. + uzp2 v15.8H, v17.8H, v5.8H // ........................*.................................. + smlal2 v1.4S, v16.8H, v18.8H // .........................*................................. + uzp2 v17.8H, v12.8H, v26.8H // .........................*................................. + ld1 {v31.8H}, [x12], #16 // ..........................*................................ + smlal2 v14.4S, v24.8H, v20.8H // ..........................*................................ + smlal2 v14.4S, v30.8H, v17.8H // ...........................*............................... + uzp1 v12.8H, v12.8H, v26.8H // ...........................*............................... + ld1 {v19.8H}, [x9], #16 // ............................*.............................. + smlal v4.4S, v24.4H, v20.4H // ............................*.............................. + smlal2 v14.4S, v15.8H, v12.8H // .............................*............................. + ldr q26, [x2, #16] // .............................*............................. + ldr q6, [x1], #32 // ..............................*............................ + smlal v4.4S, v30.4H, v17.4H // ..............................*............................ + ldr q18, [x8, #16] // ...............................*........................... + smlal v4.4S, v15.4H, v12.4H // ...............................*........................... + smlal2 v1.4S, v27.8H, v29.8H // ................................*.......................... + ldr q9, [x8], #32 // ................................*.......................... + ldr q23, [x5], #32 // .................................*......................... + smlal v7.4S, v3.4H, v20.4H // .................................*......................... + smlal2 v1.4S, v3.8H, v20.8H // ..................................*........................ + ldr q8, [x5, #-16] // ..................................*........................ + uzp1 v29.8H, v4.8H, v14.8H // ...................................*....................... + smlal2 v1.4S, v24.8H, v19.8H // ...................................*....................... + ldr q11, [x1, #-16] // ....................................*...................... + smlal2 v1.4S, v30.8H, v12.8H // ....................................*...................... + mul v28.8H, v29.8H, v2.H[2] // .....................................*..................... + uzp1 v22.8H, v25.8H, v13.8H // .....................................*..................... + uzp2 v16.8H, v25.8H, v13.8H // ......................................*.................... + ldr q10, [x7, #16] // ......................................*.................... + smlal2 v1.4S, v15.8H, v31.8H // .......................................*................... + ldr q13, [x2], #32 // .......................................*................... + smlal v7.4S, v24.4H, v19.4H // ........................................*.................. + uzp1 v5.8H, v6.8H, v11.8H // ........................................*.................. + ldr q27, [x7], #32 // .........................................*................. + smlal v7.4S, v30.4H, v12.4H // .........................................*................. + smlal2 v14.4S, v28.8H, v0.8H // ..........................................*................ + uzp2 v17.8H, v23.8H, v8.8H // ..........................................*................ + smlal v4.4S, v28.4H, v0.4H // ...........................................*............... + uzp2 v28.8H, v13.8H, v26.8H // ...........................................*............... + uzp2 v21.8H, v6.8H, v11.8H // ............................................*.............. + smlal v7.4S, v15.4H, v31.4H // ............................................*.............. + uzp1 v11.8H, v13.8H, v26.8H // .............................................*............. + smull v29.4S, v5.4H, v28.4H // .............................................*............. + uzp2 v6.8H, v27.8H, v10.8H // ..............................................*............ + smull2 v20.4S, v5.8H, v28.8H // ..............................................*............ + smlal2 v20.4S, v21.8H, v11.8H // ...............................................*........... + uzp2 v15.8H, v4.8H, v14.8H // ...............................................*........... + uzp1 v30.8H, v7.8H, v1.8H // ................................................*.......... + smlal v29.4S, v21.4H, v11.4H // ................................................*.......... + ldr q31, [x11, #16] // .................................................*......... + sqdmulh v14.8H, v15.8H, v2.H[1] // .................................................*......... + ldr q4, [x10], #32 // ..................................................*........ + uzp1 v24.8H, v23.8H, v8.8H // ..................................................*........ + mul v19.8H, v30.8H, v2.H[2] // ...................................................*....... + ldr q28, [x10, #-16] // ...................................................*....... + ld1 {v30.8H}, [x6], #16 // ....................................................*...... + uzp2 v26.8H, v9.8H, v18.8H // ....................................................*...... + smlal v29.4S, v22.4H, v17.4H // .....................................................*..... + uzp1 v10.8H, v27.8H, v10.8H // .....................................................*..... + smlal v29.4S, v16.4H, v24.4H // ......................................................*.... + srshr v27.8H, v14.8H, #11 // ......................................................*.... + uzp1 v8.8H, v9.8H, v18.8H // .......................................................*... + smlal v29.4S, v10.4H, v26.4H // .......................................................*... + smlal v7.4S, v19.4H, v0.4H // ........................................................*.. + ld1 {v25.8H}, [x3], #16 // ........................................................*.. + smlal2 v1.4S, v19.8H, v0.8H // .........................................................*. + ldr q19, [x11], #32 // .........................................................*. + mls v15.8H, v27.8H, v2.H[0] // ..........................................................* + uzp1 v14.8H, v4.8H, v28.8H // ..........................................................* + + // -------------------- cycle (expected) --------------------> + // 0 25 50 + // |------------------------|------------------------|-------- + // ldr q23, [x1], #32 // *.......................................................... + // ldr q3, [x1, #-16] // *.......................................................... + // ldr q31, [x11, #16] // ..................*........................................ + // uzp1 v5.8H, v23.8H, v3.8H // .....*..................................................... + // ldr q19, [x11], #32 // .....................*..................................... + // ldr q28, [x5], #32 // ...*....................................................... + // ldr q4, [x10], #32 // ..*........................................................ + // uzp2 v21.8H, v23.8H, v3.8H // ....*...................................................... + // ldr q26, [x5, #-16] // ...*....................................................... + // ldr q9, [x7, #16] // ............*.............................................. + // ldr q27, [x4, #16] // ......*.................................................... + // uzp2 v17.8H, v28.8H, v26.8H // .......*................................................... + // ldr q25, [x2, #16] // .*......................................................... + // ldr q23, [x8, #16] // .........*................................................. + // ldr q24, [x7], #32 // ...........*............................................... + // ldr q8, [x8], #32 // ........*.................................................. + // ldr q12, [x2], #32 // .*......................................................... + // ldr q3, [x4], #32 // ....*...................................................... + // uzp2 v6.8H, v24.8H, v9.8H // ....................*...................................... + // uzp2 v18.8H, v12.8H, v25.8H // .....*..................................................... + // uzp2 v16.8H, v3.8H, v27.8H // .............*............................................. + // uzp1 v11.8H, v12.8H, v25.8H // ........*.................................................. + // smull2 v20.4S, v5.8H, v18.8H // .......*................................................... + // uzp1 v10.8H, v24.8H, v9.8H // ................*.......................................... + // smull v29.4S, v5.4H, v18.4H // .............*............................................. + // uzp1 v24.8H, v28.8H, v26.8H // .........*................................................. + // ldr q28, [x10, #-16] // ..*........................................................ + // smlal v29.4S, v21.4H, v11.4H // ..............*............................................ + // uzp2 v26.8H, v8.8H, v23.8H // ..............*............................................ + // uzp1 v22.8H, v3.8H, v27.8H // ..........*................................................ + // ld1 {v30.8H}, [x6], #16 // .................*......................................... + // smlal v29.4S, v22.4H, v17.4H // .................*......................................... + // smlal v29.4S, v16.4H, v24.4H // ...................*....................................... + // uzp1 v14.8H, v4.8H, v28.8H // ......*.................................................... + // smlal v29.4S, v10.4H, v26.4H // .....................*..................................... + // ld1 {v25.8H}, [x3], #16 // ...............*........................................... + // smlal2 v20.4S, v21.8H, v11.8H // ...........*............................................... + // uzp1 v8.8H, v8.8H, v23.8H // .......................*................................... + // smlal2 v20.4S, v22.8H, v17.8H // ............*.............................................. + // ldr q23, [x1], #32 // ..............................*............................ + // smull2 v1.4S, v5.8H, v11.8H // ...............*........................................... + // smlal2 v1.4S, v21.8H, v25.8H // ......................*.................................... + // ldr q3, [x1, #-16] // ....................................*...................... + // uzp2 v9.8H, v19.8H, v31.8H // .........................*................................. + // smlal2 v1.4S, v22.8H, v24.8H // .........................*................................. + // uzp1 v18.8H, v19.8H, v31.8H // ...........................*............................... + // smlal2 v1.4S, v16.8H, v30.8H // ................................*.......................... + // smull v7.4S, v5.4H, v11.4H // ..........*................................................ + // ldr q31, [x11, #16] // .................................................*......... + // uzp1 v5.8H, v23.8H, v3.8H // ........................................*.................. + // smlal v29.4S, v6.4H, v8.4H // ............................*.............................. + // smlal v29.4S, v14.4H, v9.4H // ..............................*............................ + // ldr q19, [x11], #32 // .........................................................*. + // uzp2 v11.8H, v4.8H, v28.8H // ........................*.................................. + // ldr q28, [x5], #32 // .................................*......................... + // smlal v7.4S, v21.4H, v25.4H // ....................*...................................... + // ldr q4, [x10], #32 // ..................................................*........ + // smlal2 v20.4S, v16.8H, v24.8H // ................*.......................................... + // uzp2 v21.8H, v23.8H, v3.8H // ............................................*.............. + // smlal2 v20.4S, v10.8H, v26.8H // ..................*........................................ + // ldr q26, [x5, #-16] // ..................................*........................ + // smlal2 v20.4S, v6.8H, v8.8H // ..........................*................................ + // smlal2 v20.4S, v14.8H, v9.8H // ...........................*............................... + // smlal2 v20.4S, v11.8H, v18.8H // .............................*............................. + // ldr q9, [x7, #16] // ......................................*.................... + // smlal v29.4S, v11.4H, v18.4H // ...............................*........................... + // ldr q27, [x4, #16] // ......................*.................................... + // uzp2 v17.8H, v28.8H, v26.8H // ..........................................*................ + // ldr q25, [x2, #16] // .............................*............................. + // ldr q23, [x8, #16] // ...............................*........................... + // smlal v7.4S, v22.4H, v24.4H // .......................*................................... + // ldr q24, [x7], #32 // .........................................*................. + // uzp1 v13.8H, v29.8H, v20.8H // ...................................*....................... + // smlal v7.4S, v16.4H, v30.4H // ........................*.................................. + // smlal v7.4S, v10.4H, v8.4H // .................................*......................... + // ld1 {v30.8H}, [x9], #16 // ............................*.............................. + // smlal2 v1.4S, v10.8H, v8.8H // ..................................*........................ + // mul v10.8H, v13.8H, v2.H[2] // .....................................*..................... + // ldr q8, [x8], #32 // ................................*.......................... + // ld1 {v15.8H}, [x12], #16 // ..........................*................................ + // smlal v7.4S, v6.4H, v30.4H // ........................................*.................. + // smlal v7.4S, v14.4H, v18.4H // .........................................*................. + // ldr q12, [x2], #32 // .......................................*................... + // ldr q3, [x4], #32 // ...................*....................................... + // smlal2 v1.4S, v6.8H, v30.8H // ...................................*....................... + // smlal v29.4S, v10.4H, v0.4H // ...........................................*............... + // smlal2 v20.4S, v10.8H, v0.8H // ..........................................*................ + // uzp2 v6.8H, v24.8H, v9.8H // ..............................................*............ + // smlal2 v1.4S, v14.8H, v18.8H // ....................................*...................... + // uzp2 v18.8H, v12.8H, v25.8H // ...........................................*............... + // smlal2 v1.4S, v11.8H, v15.8H // .......................................*................... + // uzp2 v16.8H, v3.8H, v27.8H // ......................................*.................... + // smlal v7.4S, v11.4H, v15.4H // ............................................*.............. + // uzp1 v11.8H, v12.8H, v25.8H // .............................................*............. + // uzp2 v15.8H, v29.8H, v20.8H // ...............................................*........... + // smull2 v20.4S, v5.8H, v18.8H // ..............................................*............ + // uzp1 v10.8H, v24.8H, v9.8H // .....................................................*..... + // smull v29.4S, v5.4H, v18.4H // .............................................*............. + // sqdmulh v12.8H, v15.8H, v2.H[1] // .................................................*......... + // uzp1 v24.8H, v28.8H, v26.8H // ..................................................*........ + // ldr q28, [x10, #-16] // ...................................................*....... + // uzp1 v13.8H, v7.8H, v1.8H // ................................................*.......... + // smlal v29.4S, v21.4H, v11.4H // ................................................*.......... + // uzp2 v26.8H, v8.8H, v23.8H // ....................................................*...... + // mul v9.8H, v13.8H, v2.H[2] // ...................................................*....... + // uzp1 v22.8H, v3.8H, v27.8H // .....................................*..................... + // ld1 {v30.8H}, [x6], #16 // ....................................................*...... + // srshr v13.8H, v12.8H, #11 // ......................................................*.... + // smlal v29.4S, v22.4H, v17.4H // .....................................................*..... + // smlal v29.4S, v16.4H, v24.4H // ......................................................*.... + // uzp1 v14.8H, v4.8H, v28.8H // ..........................................................* + // smlal v29.4S, v10.4H, v26.4H // .......................................................*... + // smlal2 v1.4S, v9.8H, v0.8H // .........................................................*. + // smlal v7.4S, v9.4H, v0.4H // ........................................................*.. + // mls v15.8H, v13.8H, v2.H[0] // ..........................................................* + // ld1 {v25.8H}, [x3], #16 // ........................................................*.. + // smlal2 v20.4S, v21.8H, v11.8H // ...............................................*........... + // uzp1 v8.8H, v8.8H, v23.8H // .......................................................*... sub count, count, #2 k4_loop_start: // Instructions: 88 - // Expected cycles: 108 - // Expected IPC: 0.81 + // Expected cycles: 48 + // Expected IPC: 1.83 // - // Cycle bound: 108.0 - // IPC bound: 0.81 + // Cycle bound: 48.0 + // IPC bound: 1.83 // - // Wall time: 6.84s - // User time: 6.84s + // Wall time: 313.44s + // User time: 313.44s // - // -------------------------------------------- cycle (expected) ---------------------------------------------> - // 0 25 50 75 100 - // |------------------------|------------------------|------------------------|------------------------|------- - uzp1 v13.8H, v6.8H, v10.8H // *........................................................................................................... - uzp2 v10.8H, v6.8H, v10.8H // .*.......................................................................................................... - smull v21.4S, v13.4H, v5.4H // ..*......................................................................................................... - smull2 v3.4S, v13.8H, v5.8H // ...*........................................................................................................ - smull v12.4S, v13.4H, v30.4H // ....*....................................................................................................... - smull2 v13.4S, v13.8H, v30.8H // .....*...................................................................................................... - smlal v21.4S, v10.4H, v31.4H // ......*..................................................................................................... - smlal2 v3.4S, v10.8H, v31.8H // .......*.................................................................................................... - smlal v12.4S, v10.4H, v5.4H // ........*................................................................................................... - smlal2 v13.4S, v10.8H, v5.8H // .........*.................................................................................................. - uzp1 v10.8H, v9.8H, v15.8H // ..........*................................................................................................. - uzp2 v6.8H, v9.8H, v15.8H // ...........*................................................................................................ - uzp1 v30.8H, v25.8H, v20.8H // ............*............................................................................................... - uzp2 v31.8H, v25.8H, v20.8H // .............*.............................................................................................. - smlal v21.4S, v10.4H, v30.4H // ..............*............................................................................................. - smlal2 v3.4S, v10.8H, v30.8H // ...............*............................................................................................ - smlal v12.4S, v10.4H, v31.4H // ................*........................................................................................... - smlal2 v13.4S, v10.8H, v31.8H // .................*.......................................................................................... - smlal v21.4S, v6.4H, v1.4H // ..................*......................................................................................... - smlal2 v3.4S, v6.8H, v1.8H // ...................*........................................................................................ - smlal v12.4S, v6.4H, v30.4H // ....................*....................................................................................... - smlal2 v13.4S, v6.8H, v30.8H // .....................*...................................................................................... - uzp1 v10.8H, v7.8H, v27.8H // ......................*..................................................................................... - uzp2 v6.8H, v7.8H, v27.8H // .......................*.................................................................................... - uzp1 v30.8H, v24.8H, v28.8H // ........................*................................................................................... - uzp2 v31.8H, v24.8H, v28.8H // .........................*.................................................................................. - smlal v21.4S, v10.4H, v30.4H // ..........................*................................................................................. - smlal2 v3.4S, v10.8H, v30.8H // ...........................*................................................................................ - smlal v12.4S, v10.4H, v31.4H // ............................*............................................................................... - smlal2 v13.4S, v10.8H, v31.8H // .............................*.............................................................................. - smlal v21.4S, v6.4H, v19.4H // ..............................*............................................................................. - smlal2 v3.4S, v6.8H, v19.8H // ...............................*............................................................................ - smlal v12.4S, v6.4H, v30.4H // ................................*........................................................................... - smlal2 v13.4S, v6.8H, v30.8H // .................................*.......................................................................... - uzp1 v10.8H, v22.8H, v4.8H // ..................................*......................................................................... - uzp2 v6.8H, v22.8H, v4.8H // ...................................*........................................................................ - uzp1 v30.8H, v16.8H, v29.8H // ....................................*....................................................................... - uzp2 v31.8H, v16.8H, v29.8H // .....................................*...................................................................... - smlal v21.4S, v10.4H, v30.4H // ......................................*..................................................................... - smlal2 v3.4S, v10.8H, v30.8H // .......................................*.................................................................... - smlal v12.4S, v10.4H, v31.4H // ........................................*................................................................... - smlal2 v13.4S, v10.8H, v31.8H // .........................................*.................................................................. - smlal v21.4S, v6.4H, v14.4H // ..........................................*................................................................. - smlal2 v3.4S, v6.8H, v14.8H // ...........................................*................................................................ - smlal v12.4S, v6.4H, v30.4H // ............................................*............................................................... - smlal2 v13.4S, v6.8H, v30.8H // .............................................*.............................................................. - sqdmulh v10.8H, v8.8H, v2.H[1] // ..............................................l............................................................. - uzp1 v6.8H, v21.8H, v3.8H // ...............................................*............................................................ - sqdmulh v30.8H, v26.8H, v2.H[1] // ................................................l........................................................... - mul v6.8H, v6.8H, v2.H[2] // .................................................*.......................................................... - uzp1 v31.8H, v12.8H, v13.8H // ..................................................*......................................................... - srshr v10.8H, v10.8H, #11 // ...................................................l........................................................ - mul v31.8H, v31.8H, v2.H[2] // ....................................................*....................................................... - smlal v21.4S, v6.4H, v0.4H // .....................................................*...................................................... - smlal2 v3.4S, v6.8H, v0.8H // ......................................................*..................................................... - mls v8.8H, v10.8H, v2.H[0] // .......................................................l.................................................... - smlal v12.4S, v31.4H, v0.4H // ........................................................*................................................... - smlal2 v13.4S, v31.8H, v0.8H // .........................................................*.................................................. - srshr v10.8H, v30.8H, #11 // ..........................................................l................................................. - ldr q6, [x1], #32 // ...........................................................e................................................ - mls v26.8H, v10.8H, v2.H[0] // .............................................................l.............................................. - ldr q10, [x1, #-16] // ..............................................................e............................................. - ldr q30, [x2], #32 // ................................................................e........................................... - zip1 v31.8H, v8.8H, v26.8H // ..................................................................l......................................... - zip2 v5.8H, v8.8H, v26.8H // ...................................................................l........................................ - uzp2 v8.8H, v21.8H, v3.8H // ....................................................................*....................................... - uzp2 v26.8H, v12.8H, v13.8H // .....................................................................*...................................... - str q31, [x0], #32 // ......................................................................l..................................... - ldr q13, [x2, #-16] // .......................................................................e.................................... - str q5, [x0, #-16] // .........................................................................l.................................. - ld1 {v31.8H}, [x3], #16 // ..........................................................................e................................. - uzp1 v5.8H, v30.8H, v13.8H // ............................................................................e............................... - uzp2 v30.8H, v30.8H, v13.8H // .............................................................................e.............................. - ldr q9, [x4], #32 // ..............................................................................e............................. - ldr q15, [x4, #-16] // ................................................................................e........................... - ldr q25, [x5], #32 // ..................................................................................e......................... - ldr q20, [x5, #-16] // ....................................................................................e....................... - ld1 {v1.8H}, [x6], #16 // ......................................................................................e..................... - ldr q7, [x7], #32 // ........................................................................................e................... - ldr q27, [x7, #-16] // ..........................................................................................e................. - ldr q24, [x8], #32 // ............................................................................................e............... - ldr q28, [x8, #-16] // ..............................................................................................e............. - ld1 {v19.8H}, [x9], #16 // ................................................................................................e........... - ldr q22, [x10], #32 // ..................................................................................................e......... - ldr q4, [x10, #-16] // ....................................................................................................e....... - ldr q16, [x11], #32 // ......................................................................................................e..... - ldr q29, [x11, #-16] // ........................................................................................................e... - ld1 {v14.8H}, [x12], #16 // ..........................................................................................................e. - - // ---------------------------------------------------------------------------------------------------------- cycle (expected) ----------------------------------------------------------------------------------------------------------> - // 0 25 50 75 100 125 150 175 200 225 - // |------------------------|------------------------|------------------------|------------------------|------------------------|------------------------|------------------------|------------------------|------------------------|----- - // ldr q12, [x1], #32 // e................................................'..........................................................~................................................'..........................................................~.............. - // ldr q13, [x1, #-16] // ...e.............................................'.............................................................~.............................................'.............................................................~........... - // uzp1 v3.8h, v12.8h, v13.8h // .................................................*...........................................................................................................~......................................................................... - // uzp2 v4.8h, v12.8h, v13.8h // .................................................'*..........................................................................................................'~........................................................................ - // ldr q12, [x2], #32 // .....e...........................................'...............................................................~...........................................'...............................................................~......... - // ldr q13, [x2, #-16] // ............e....................................'......................................................................~....................................'......................................................................~.. - // uzp1 v5.8h, v12.8h, v13.8h // .................e...............................'...........................................................................~...............................'......................................................................... - // uzp2 v6.8h, v12.8h, v13.8h // ..................e..............................'............................................................................~..............................'......................................................................... - // ld1 {v7.8h}, [x3], #16 // ...............e.................................'.........................................................................~.................................'......................................................................... - // smull v8.4s, v3.4h, v5.4h // .................................................'.*.........................................................................................................'.~....................................................................... - // smull2 v10.4s, v3.8h, v5.8h // .................................................'..*........................................................................................................'..~...................................................................... - // smlal v8.4s, v4.4h, v7.4h // .................................................'.....*.....................................................................................................'.....~................................................................... - // smlal2 v10.4s, v4.8h, v7.8h // .................................................'......*....................................................................................................'......~.................................................................. - // smull v9.4s, v3.4h, v6.4h // .................................................'...*.......................................................................................................'...~..................................................................... - // smull2 v11.4s, v3.8h, v6.8h // .................................................'....*......................................................................................................'....~.................................................................... - // smlal v9.4s, v4.4h, v5.4h // .................................................'.......*...................................................................................................'.......~................................................................. - // smlal2 v11.4s, v4.8h, v5.8h // .................................................'........*..................................................................................................'........~................................................................ - // ldr q12, [x4], #32 // ...................e.............................'.............................................................................~.............................'......................................................................... - // ldr q13, [x4, #-16] // .....................e...........................'...............................................................................~...........................'......................................................................... - // uzp1 v3.8h, v12.8h, v13.8h // .................................................'.........*.................................................................................................'.........~............................................................... - // uzp2 v4.8h, v12.8h, v13.8h // .................................................'..........*................................................................................................'..........~.............................................................. - // ldr q12, [x5], #32 // .......................e.........................'.................................................................................~.........................'......................................................................... - // ldr q13, [x5, #-16] // .........................e.......................'...................................................................................~.......................'......................................................................... - // uzp1 v5.8h, v12.8h, v13.8h // .................................................'...........*...............................................................................................'...........~............................................................. - // uzp2 v6.8h, v12.8h, v13.8h // .................................................'............*..............................................................................................'............~............................................................ - // ld1 {v7.8h}, [x6], #16 // ...........................e.....................'.....................................................................................~.....................'......................................................................... - // smlal v8.4s, v3.4h, v5.4h // .................................................'.............*.............................................................................................'.............~........................................................... - // smlal2 v10.4s, v3.8h, v5.8h // .................................................'..............*............................................................................................'..............~.......................................................... - // smlal v8.4s, v4.4h, v7.4h // .................................................'.................*.........................................................................................'.................~....................................................... - // smlal2 v10.4s, v4.8h, v7.8h // .................................................'..................*........................................................................................'..................~...................................................... - // smlal v9.4s, v3.4h, v6.4h // .................................................'...............*...........................................................................................'...............~......................................................... - // smlal2 v11.4s, v3.8h, v6.8h // .................................................'................*..........................................................................................'................~........................................................ - // smlal v9.4s, v4.4h, v5.4h // .................................................'...................*.......................................................................................'...................~..................................................... - // smlal2 v11.4s, v4.8h, v5.8h // .................................................'....................*......................................................................................'....................~.................................................... - // ldr q12, [x7], #32 // .............................e...................'.......................................................................................~...................'......................................................................... - // ldr q13, [x7, #-16] // ...............................e.................'.........................................................................................~.................'......................................................................... - // uzp1 v3.8h, v12.8h, v13.8h // .................................................'.....................*.....................................................................................'.....................~................................................... - // uzp2 v4.8h, v12.8h, v13.8h // .................................................'......................*....................................................................................'......................~.................................................. - // ldr q12, [x8], #32 // .................................e...............'...........................................................................................~...............'......................................................................... - // ldr q13, [x8, #-16] // ...................................e.............'.............................................................................................~.............'......................................................................... - // uzp1 v5.8h, v12.8h, v13.8h // .................................................'.......................*...................................................................................'.......................~................................................. - // uzp2 v6.8h, v12.8h, v13.8h // .................................................'........................*..................................................................................'........................~................................................ - // ld1 {v7.8h}, [x9], #16 // .....................................e...........'...............................................................................................~...........'......................................................................... - // smlal v8.4s, v3.4h, v5.4h // .................................................'.........................*.................................................................................'.........................~............................................... - // smlal2 v10.4s, v3.8h, v5.8h // .................................................'..........................*................................................................................'..........................~.............................................. - // smlal v8.4s, v4.4h, v7.4h // .................................................'.............................*.............................................................................'.............................~........................................... - // smlal2 v10.4s, v4.8h, v7.8h // .................................................'..............................*............................................................................'..............................~.......................................... - // smlal v9.4s, v3.4h, v6.4h // .................................................'...........................*...............................................................................'...........................~............................................. - // smlal2 v11.4s, v3.8h, v6.8h // .................................................'............................*..............................................................................'............................~............................................ - // smlal v9.4s, v4.4h, v5.4h // .................................................'...............................*...........................................................................'...............................~......................................... - // smlal2 v11.4s, v4.8h, v5.8h // .................................................'................................*..........................................................................'................................~........................................ - // ldr q12, [x10], #32 // .......................................e.........'.................................................................................................~.........'......................................................................... - // ldr q13, [x10, #-16] // .........................................e.......'...................................................................................................~.......'......................................................................... - // uzp1 v3.8h, v12.8h, v13.8h // .................................................'.................................*.........................................................................'.................................~....................................... - // uzp2 v4.8h, v12.8h, v13.8h // .................................................'..................................*........................................................................'..................................~...................................... - // ldr q12, [x11], #32 // ...........................................e.....'.....................................................................................................~.....'......................................................................... - // ldr q13, [x11, #-16] // .............................................e...'.......................................................................................................~...'......................................................................... - // uzp1 v5.8h, v12.8h, v13.8h // .................................................'...................................*.......................................................................'...................................~..................................... - // uzp2 v6.8h, v12.8h, v13.8h // .................................................'....................................*......................................................................'....................................~.................................... - // ld1 {v7.8h}, [x12], #16 // ...............................................e.'.........................................................................................................~.'......................................................................... - // smlal v8.4s, v3.4h, v5.4h // .................................................'.....................................*.....................................................................'.....................................~................................... - // smlal2 v10.4s, v3.8h, v5.8h // .................................................'......................................*....................................................................'......................................~.................................. - // smlal v8.4s, v4.4h, v7.4h // .................................................'.........................................*.................................................................'.........................................~............................... - // smlal2 v10.4s, v4.8h, v7.8h // .................................................'..........................................*................................................................'..........................................~.............................. - // smlal v9.4s, v3.4h, v6.4h // .................................................'.......................................*...................................................................'.......................................~................................. - // smlal2 v11.4s, v3.8h, v6.8h // .................................................'........................................*..................................................................'........................................~................................ - // smlal v9.4s, v4.4h, v5.4h // .................................................'...........................................*...............................................................'...........................................~............................. - // smlal2 v11.4s, v4.8h, v5.8h // .................................................'............................................*..............................................................'............................................~............................ - // uzp1 v28.8h, v8.8h, v10.8h // .................................................'..............................................*............................................................'..............................................~.......................... - // mul v28.8h, v28.8h, v2.h[2] // .................................................'................................................*..........................................................'................................................~........................ - // smlal v8.4s, v28.4h, v0.4h // .................................................'....................................................*......................................................'....................................................~.................... - // smlal2 v10.4s, v28.8h, v0.8h // .................................................'.....................................................*.....................................................'.....................................................~................... - // uzp2 v26.8h, v8.8h, v10.8h // .........~.......................................'...................................................................*.......................................'...................................................................~..... - // uzp1 v28.8h, v9.8h, v11.8h // .................................................'.................................................*.........................................................'.................................................~....................... - // mul v28.8h, v28.8h, v2.h[2] // .................................................'...................................................*.......................................................'...................................................~..................... - // smlal v9.4s, v28.4h, v0.4h // .................................................'.......................................................*...................................................'.......................................................~................. - // smlal2 v11.4s, v28.8h, v0.8h // .................................................'........................................................*..................................................'........................................................~................ - // uzp2 v27.8h, v9.8h, v11.8h // ..........~......................................'....................................................................*......................................'....................................................................~.... - // sqdmulh v28.8h, v26.8h, v2.h[1] // .................................................'.............................................~.............................................................'.............................................l........................... - // srshr v28.8h, v28.8h, #11 // .................................................'..................................................~........................................................'..................................................l...................... - // mls v26.8h, v28.8h, v2.h[0] // .................................................'......................................................~....................................................'......................................................l.................. - // sqdmulh v28.8h, v27.8h, v2.h[1] // .................................................'...............................................~...........................................................'...............................................l......................... - // srshr v28.8h, v28.8h, #11 // .................................................'.........................................................~.................................................'.........................................................l............... - // mls v27.8h, v28.8h, v2.h[0] // ..~..............................................'............................................................~..............................................'............................................................l............ - // zip1 v12.8h, v26.8h, v27.8h // .......~.........................................'.................................................................~.........................................'.................................................................l....... - // zip2 v13.8h, v26.8h, v27.8h // ........~........................................'..................................................................~........................................'..................................................................l...... - // str q12, [x0], #32 // ...........~.....................................'.....................................................................~.....................................'.....................................................................l... - // str q13, [x0, #-16] // ..............~..................................'........................................................................~..................................'........................................................................l + // -------------- cycle (expected) ---------------> + // 0 25 + // |------------------------|---------------------- + smlal2 v20.4S, v22.8H, v17.8H // *............................................... + uzp2 v12.8H, v7.8H, v1.8H // l............................................... + ldr q23, [x1], #32 // .e.............................................. + smull2 v1.4S, v5.8H, v11.8H // .*.............................................. + smlal2 v1.4S, v21.8H, v25.8H // ..*............................................. + ldr q3, [x1, #-16] // ..e............................................. + uzp2 v9.8H, v19.8H, v31.8H // ...*............................................ + smlal2 v1.4S, v22.8H, v24.8H // ...*............................................ + uzp1 v18.8H, v19.8H, v31.8H // ....*........................................... + smlal2 v1.4S, v16.8H, v30.8H // ....*........................................... + smull v7.4S, v5.4H, v11.4H // .....*.......................................... + ldr q31, [x11, #16] // .....e.......................................... + uzp1 v5.8H, v23.8H, v3.8H // ......e......................................... + smlal v29.4S, v6.4H, v8.4H // ......*......................................... + smlal v29.4S, v14.4H, v9.4H // .......*........................................ + ldr q19, [x11], #32 // .......e........................................ + sqdmulh v13.8H, v12.8H, v2.H[1] // ........l....................................... + uzp2 v11.8H, v4.8H, v28.8H // .........*...................................... + ldr q28, [x5], #32 // .........e...................................... + smlal v7.4S, v21.4H, v25.4H // ..........*..................................... + ldr q4, [x10], #32 // ..........e..................................... + smlal2 v20.4S, v16.8H, v24.8H // ...........*.................................... + uzp2 v21.8H, v23.8H, v3.8H // ...........e.................................... + smlal2 v20.4S, v10.8H, v26.8H // ............*................................... + ldr q26, [x5, #-16] // ............e................................... + srshr v17.8H, v13.8H, #11 // .............l.................................. + smlal2 v20.4S, v6.8H, v8.8H // .............*.................................. + smlal2 v20.4S, v14.8H, v9.8H // ..............*................................. + smlal2 v20.4S, v11.8H, v18.8H // ...............*................................ + ldr q9, [x7, #16] // ...............e................................ + smlal v29.4S, v11.4H, v18.4H // ................*............................... + ldr q27, [x4, #16] // ................e............................... + mls v12.8H, v17.8H, v2.H[0] // .................l.............................. + uzp2 v17.8H, v28.8H, v26.8H // .................e.............................. + ldr q25, [x2, #16] // ..................e............................. + ldr q23, [x8, #16] // ..................e............................. + smlal v7.4S, v22.4H, v24.4H // ...................*............................ + ldr q24, [x7], #32 // ...................e............................ + uzp1 v13.8H, v29.8H, v20.8H // ....................*........................... + smlal v7.4S, v16.4H, v30.4H // ....................*........................... + smlal v7.4S, v10.4H, v8.4H // .....................*.......................... + ld1 {v30.8H}, [x9], #16 // .....................*.......................... + smlal2 v1.4S, v10.8H, v8.8H // ......................*......................... + zip1 v16.8H, v12.8H, v15.8H // ......................l......................... + mul v10.8H, v13.8H, v2.H[2] // .......................*........................ + zip2 v13.8H, v12.8H, v15.8H // .......................l........................ + str q16, [x0], #32 // ........................l....................... + ldr q8, [x8], #32 // ........................e....................... + ld1 {v15.8H}, [x12], #16 // .........................*...................... + smlal v7.4S, v6.4H, v30.4H // .........................*...................... + smlal v7.4S, v14.4H, v18.4H // ..........................*..................... + ldr q12, [x2], #32 // ..........................e..................... + ldr q3, [x4], #32 // ...........................e.................... + smlal2 v1.4S, v6.8H, v30.8H // ...........................*.................... + smlal v29.4S, v10.4H, v0.4H // ............................*................... + str q13, [x0, #-16] // ............................l................... + smlal2 v20.4S, v10.8H, v0.8H // .............................*.................. + uzp2 v6.8H, v24.8H, v9.8H // .............................e.................. + smlal2 v1.4S, v14.8H, v18.8H // ..............................*................. + uzp2 v18.8H, v12.8H, v25.8H // ..............................e................. + smlal2 v1.4S, v11.8H, v15.8H // ...............................*................ + uzp2 v16.8H, v3.8H, v27.8H // ...............................e................ + smlal v7.4S, v11.4H, v15.4H // ................................*............... + uzp1 v11.8H, v12.8H, v25.8H // ................................e............... + uzp2 v15.8H, v29.8H, v20.8H // .................................*.............. + smull2 v20.4S, v5.8H, v18.8H // .................................e.............. + uzp1 v10.8H, v24.8H, v9.8H // ..................................e............. + smull v29.4S, v5.4H, v18.4H // ..................................e............. + sqdmulh v12.8H, v15.8H, v2.H[1] // ...................................*............ + uzp1 v24.8H, v28.8H, v26.8H // ...................................e............ + ldr q28, [x10, #-16] // ....................................e........... + uzp1 v13.8H, v7.8H, v1.8H // ....................................*........... + smlal v29.4S, v21.4H, v11.4H // .....................................e.......... + uzp2 v26.8H, v8.8H, v23.8H // .....................................e.......... + mul v9.8H, v13.8H, v2.H[2] // ......................................*......... + uzp1 v22.8H, v3.8H, v27.8H // ......................................e......... + ld1 {v30.8H}, [x6], #16 // .......................................e........ + srshr v13.8H, v12.8H, #11 // ........................................*....... + smlal v29.4S, v22.4H, v17.4H // ........................................e....... + smlal v29.4S, v16.4H, v24.4H // .........................................e...... + uzp1 v14.8H, v4.8H, v28.8H // .........................................e...... + smlal v29.4S, v10.4H, v26.4H // ..........................................e..... + smlal2 v1.4S, v9.8H, v0.8H // ...........................................*.... + smlal v7.4S, v9.4H, v0.4H // ............................................*... + mls v15.8H, v13.8H, v2.H[0] // .............................................*.. + ld1 {v25.8H}, [x3], #16 // ..............................................e. + smlal2 v20.4S, v21.8H, v11.8H // ...............................................e + uzp1 v8.8H, v8.8H, v23.8H // ...............................................e + + // ---------------------------------------------------- cycle (expected) -----------------------------------------------------> + // 0 25 50 75 100 + // |------------------------|------------------------|------------------------|------------------------|----------------------- + // ldr q12, [x1], #32 // e..............................................'~..............................................'~........................... + // ldr q13, [x1, #-16] // .e.............................................'.~.............................................'.~.......................... + // uzp1 v3.8h, v12.8h, v13.8h // .....e.........................................'.....~.........................................'.....~...................... + // uzp2 v4.8h, v12.8h, v13.8h // ..........e....................................'..........~....................................'..........~................. + // ldr q12, [x2], #32 // .........................e.....................'.........................~.....................'.........................~.. + // ldr q13, [x2, #-16] // .................e.............................'.................~.............................'.................~.......... + // uzp1 v5.8h, v12.8h, v13.8h // ...............................e...............'...............................~...............'............................ + // uzp2 v6.8h, v12.8h, v13.8h // .............................e.................'.............................~.................'............................ + // ld1 {v7.8h}, [x3], #16 // .............................................e.'.............................................~.'............................ + // smull v8.4s, v3.4h, v5.4h // ....~..........................................'....*..........................................'....~....................... + // smull2 v10.4s, v3.8h, v5.8h // ~..............................................'*..............................................'~........................... + // smlal v8.4s, v4.4h, v7.4h // .........~.....................................'.........*.....................................'.........~.................. + // smlal2 v10.4s, v4.8h, v7.8h // .~.............................................'.*.............................................'.~.......................... + // smull v9.4s, v3.4h, v6.4h // .................................e.............'.................................~.............'............................ + // smull2 v11.4s, v3.8h, v6.8h // ................................e..............'................................~..............'............................ + // smlal v9.4s, v4.4h, v5.4h // ....................................e..........'....................................~..........'............................ + // smlal2 v11.4s, v4.8h, v5.8h // ..............................................e'..............................................~'............................ + // ldr q12, [x4], #32 // ..........................e....................'..........................~....................'..........................~. + // ldr q13, [x4, #-16] // ...............e...............................'...............~...............................'...............~............ + // uzp1 v3.8h, v12.8h, v13.8h // .....................................e.........'.....................................~.........'............................ + // uzp2 v4.8h, v12.8h, v13.8h // ..............................e................'..............................~................'............................ + // ldr q12, [x5], #32 // ........e......................................'........~......................................'........~................... + // ldr q13, [x5, #-16] // ...........e...................................'...........~...................................'...........~................ + // uzp1 v5.8h, v12.8h, v13.8h // ..................................e............'..................................~............'............................ + // uzp2 v6.8h, v12.8h, v13.8h // ................e..............................'................~..............................'................~........... + // ld1 {v7.8h}, [x6], #16 // ......................................e........'......................................~........'............................ + // smlal v8.4s, v3.4h, v5.4h // ..................~............................'..................*............................'..................~......... + // smlal2 v10.4s, v3.8h, v5.8h // ..~............................................'..*............................................'..~......................... + // smlal v8.4s, v4.4h, v7.4h // ...................~...........................'...................*...........................'...................~........ + // smlal2 v10.4s, v4.8h, v7.8h // ...~...........................................'...*...........................................'...~........................ + // smlal v9.4s, v3.4h, v6.4h // .......................................e.......'.......................................~.......'............................ + // smlal2 v11.4s, v3.8h, v6.8h // ...............................................*...............................................~............................ + // smlal v9.4s, v4.4h, v5.4h // ........................................e......'........................................~......'............................ + // smlal2 v11.4s, v4.8h, v5.8h // ..........~....................................'..........*....................................'..........~................. + // ldr q12, [x7], #32 // ..................e............................'..................~............................'..................~......... + // ldr q13, [x7, #-16] // ..............e................................'..............~................................'..............~............. + // uzp1 v3.8h, v12.8h, v13.8h // .................................e.............'.................................~.............'............................ + // uzp2 v4.8h, v12.8h, v13.8h // ............................e..................'............................~..................'............................ + // ldr q12, [x8], #32 // .......................e.......................'.......................~.......................'.......................~.... + // ldr q13, [x8, #-16] // .................e.............................'.................~.............................'.................~.......... + // uzp1 v5.8h, v12.8h, v13.8h // ..............................................e'..............................................~'............................ + // uzp2 v6.8h, v12.8h, v13.8h // ....................................e..........'....................................~..........'............................ + // ld1 {v7.8h}, [x9], #16 // ....................~..........................'....................*..........................'....................~....... + // smlal v8.4s, v3.4h, v5.4h // ....................~..........................'....................*..........................'....................~....... + // smlal2 v10.4s, v3.8h, v5.8h // .....................~.........................'.....................*.........................'.....................~...... + // smlal v8.4s, v4.4h, v7.4h // ........................~......................'........................*......................'........................~... + // smlal2 v10.4s, v4.8h, v7.8h // ..........................~....................'..........................*....................'..........................~. + // smlal v9.4s, v3.4h, v6.4h // .........................................e.....'.........................................~.....'............................ + // smlal2 v11.4s, v3.8h, v6.8h // ...........~...................................'...........*...................................'...........~................ + // smlal v9.4s, v4.4h, v5.4h // .....~.........................................'.....*.........................................'.....~...................... + // smlal2 v11.4s, v4.8h, v5.8h // ............~..................................'............*..................................'............~............... + // ldr q12, [x10], #32 // .........e.....................................'.........~.....................................'.........~.................. + // ldr q13, [x10, #-16] // ...................................e...........'...................................~...........'............................ + // uzp1 v3.8h, v12.8h, v13.8h // ........................................e......'........................................~......'............................ + // uzp2 v4.8h, v12.8h, v13.8h // ........~......................................'........*......................................'........~................... + // ldr q12, [x11], #32 // ......e........................................'......~........................................'......~..................... + // ldr q13, [x11, #-16] // ....e..........................................'....~..........................................'....~....................... + // uzp1 v5.8h, v12.8h, v13.8h // ...~...........................................'...*...........................................'...~........................ + // uzp2 v6.8h, v12.8h, v13.8h // ..~............................................'..*............................................'..~......................... + // ld1 {v7.8h}, [x12], #16 // ........................~......................'........................*......................'........................~... + // smlal v8.4s, v3.4h, v5.4h // .........................~.....................'.........................*.....................'.........................~.. + // smlal2 v10.4s, v3.8h, v5.8h // .............................~.................'.............................*.................'............................ + // smlal v8.4s, v4.4h, v7.4h // ...............................~...............'...............................*...............'............................ + // smlal2 v10.4s, v4.8h, v7.8h // ..............................~................'..............................*................'............................ + // smlal v9.4s, v3.4h, v6.4h // ......~........................................'......*........................................'......~..................... + // smlal2 v11.4s, v3.8h, v6.8h // .............~.................................'.............*.................................'.............~.............. + // smlal v9.4s, v4.4h, v5.4h // ...............~...............................'...............*...............................'...............~............ + // smlal2 v11.4s, v4.8h, v5.8h // ..............~................................'..............*................................'..............~............. + // uzp1 v28.8h, v8.8h, v10.8h // ...................................~...........'...................................*...........'............................ + // mul v28.8h, v28.8h, v2.h[2] // .....................................~.........'.....................................*.........'............................ + // smlal v8.4s, v28.4h, v0.4h // ...........................................~...'...........................................*...'............................ + // smlal2 v10.4s, v28.8h, v0.8h // ..........................................~....'..........................................*....'............................ + // uzp2 v26.8h, v8.8h, v10.8h // ...............................................~...............................................l............................ + // uzp1 v28.8h, v9.8h, v11.8h // ...................~...........................'...................*...........................'...................~........ + // mul v28.8h, v28.8h, v2.h[2] // ......................~........................'......................*........................'......................~..... + // smlal v9.4s, v28.4h, v0.4h // ...........................~...................'...........................*...................'............................ + // smlal2 v11.4s, v28.8h, v0.8h // ............................~..................'............................*..................'............................ + // uzp2 v27.8h, v9.8h, v11.8h // ................................~..............'................................*..............'............................ + // sqdmulh v28.8h, v26.8h, v2.h[1] // .......~.......................................'.......~.......................................'.......l.................... + // srshr v28.8h, v28.8h, #11 // ............~..................................'............~..................................'............l............... + // mls v26.8h, v28.8h, v2.h[0] // ................~..............................'................~..............................'................l........... + // sqdmulh v28.8h, v27.8h, v2.h[1] // ..................................~............'..................................*............'............................ + // srshr v28.8h, v28.8h, #11 // .......................................~.......'.......................................*.......'............................ + // mls v27.8h, v28.8h, v2.h[0] // ............................................~..'............................................*..'............................ + // zip1 v12.8h, v26.8h, v27.8h // .....................~.........................'.....................~.........................'.....................l...... + // zip2 v13.8h, v26.8h, v27.8h // ......................~........................'......................~........................'......................l..... + // str q12, [x0], #32 // .......................~.......................'.......................~.......................'.......................l.... + // str q13, [x0, #-16] // ...........................~...................'...........................~...................'...........................l sub count, count, #1 cbnz count, k4_loop_start - // Instructions: 76 - // Expected cycles: 79 - // Expected IPC: 0.96 + // Instructions: 58 + // Expected cycles: 59 + // Expected IPC: 0.98 // - // Cycle bound: 79.0 - // IPC bound: 0.96 + // Cycle bound: 59.0 + // IPC bound: 0.98 // - // Wall time: 9.03s - // User time: 9.03s + // Wall time: 1.71s + // User time: 1.71s // - // ------------------------------ cycle (expected) ------------------------------> - // 0 25 50 75 - // |------------------------|------------------------|------------------------|--- - uzp1 v17.8H, v25.8H, v20.8H // *.............................................................................. - uzp1 v12.8H, v6.8H, v10.8H // .*............................................................................. - uzp2 v13.8H, v25.8H, v20.8H // ..*............................................................................ - smull2 v23.4S, v12.8H, v5.8H // ...*........................................................................... - uzp2 v18.8H, v24.8H, v28.8H // ....*.......................................................................... - uzp2 v10.8H, v6.8H, v10.8H // .....*......................................................................... - uzp1 v3.8H, v9.8H, v15.8H // ......*........................................................................ - smlal2 v23.4S, v10.8H, v31.8H // .......*....................................................................... - uzp1 v20.8H, v24.8H, v28.8H // ........*...................................................................... - smull v28.4S, v12.4H, v30.4H // .........*..................................................................... - smull2 v25.4S, v12.8H, v30.8H // ..........*.................................................................... - smlal2 v23.4S, v3.8H, v17.8H // ...........*................................................................... - uzp2 v11.8H, v9.8H, v15.8H // ............*.................................................................. - smlal v28.4S, v10.4H, v5.4H // .............*................................................................. - smull v6.4S, v12.4H, v5.4H // ..............*................................................................ - smlal2 v23.4S, v11.8H, v1.8H // ...............*............................................................... - uzp1 v24.8H, v7.8H, v27.8H // ................*.............................................................. - smlal v28.4S, v3.4H, v13.4H // .................*............................................................. - smlal2 v25.4S, v10.8H, v5.8H // ..................*............................................................ - smlal2 v23.4S, v24.8H, v20.8H // ...................*........................................................... - smlal v6.4S, v10.4H, v31.4H // ....................*.......................................................... - uzp2 v7.8H, v7.8H, v27.8H // .....................*......................................................... - smlal2 v25.4S, v3.8H, v13.8H // ......................*........................................................ - smlal2 v23.4S, v7.8H, v19.8H // .......................*....................................................... - smlal v6.4S, v3.4H, v17.4H // ........................*...................................................... - uzp1 v5.8H, v16.8H, v29.8H // .........................*..................................................... - smlal v28.4S, v11.4H, v17.4H // ..........................*.................................................... - smlal2 v25.4S, v11.8H, v17.8H // ...........................*................................................... - smlal v6.4S, v11.4H, v1.4H // ............................*.................................................. - uzp1 v21.8H, v22.8H, v4.8H // .............................*................................................. - uzp2 v22.8H, v22.8H, v4.8H // ..............................*................................................ - smlal2 v25.4S, v24.8H, v18.8H // ...............................*............................................... - smlal v6.4S, v24.4H, v20.4H // ................................*.............................................. - smlal v28.4S, v24.4H, v18.4H // .................................*............................................. - uzp2 v10.8H, v16.8H, v29.8H // ..................................*............................................ - smlal2 v25.4S, v7.8H, v20.8H // ...................................*........................................... - smlal v6.4S, v7.4H, v19.4H // ....................................*.......................................... - smlal v28.4S, v7.4H, v20.4H // .....................................*......................................... - smlal2 v23.4S, v21.8H, v5.8H // ......................................*........................................ - smlal2 v25.4S, v21.8H, v10.8H // .......................................*....................................... - smlal v6.4S, v21.4H, v5.4H // ........................................*...................................... - smlal v28.4S, v21.4H, v10.4H // .........................................*..................................... - smlal2 v23.4S, v22.8H, v14.8H // ..........................................*.................................... - smlal2 v25.4S, v22.8H, v5.8H // ...........................................*................................... - smlal v6.4S, v22.4H, v14.4H // ............................................*.................................. - smlal v28.4S, v22.4H, v5.4H // .............................................*................................. - sqdmulh v30.8H, v26.8H, v2.H[1] // ..............................................*................................ - sqdmulh v3.8H, v8.8H, v2.H[1] // ...............................................*............................... - uzp1 v13.8H, v6.8H, v23.8H // ................................................*.............................. - uzp1 v15.8H, v28.8H, v25.8H // .................................................*............................. - mul v14.8H, v13.8H, v2.H[2] // ..................................................*............................ - mul v10.8H, v15.8H, v2.H[2] // ...................................................*........................... - srshr v13.8H, v3.8H, #11 // ....................................................*.......................... - srshr v21.8H, v30.8H, #11 // .....................................................*......................... - smlal v6.4S, v14.4H, v0.4H // ......................................................*........................ - smlal2 v23.4S, v14.8H, v0.8H // .......................................................*....................... - smlal v28.4S, v10.4H, v0.4H // ........................................................*...................... - smlal2 v25.4S, v10.8H, v0.8H // .........................................................*..................... - mls v8.8H, v13.8H, v2.H[0] // ..........................................................*.................... - uzp2 v12.8H, v6.8H, v23.8H // ...........................................................*................... - mls v26.8H, v21.8H, v2.H[0] // ............................................................*.................. - uzp2 v25.8H, v28.8H, v25.8H // .............................................................*................. - sqdmulh v10.8H, v12.8H, v2.H[1] // ..............................................................*................ - sqdmulh v13.8H, v25.8H, v2.H[1] // ...............................................................*............... - zip1 v30.8H, v8.8H, v26.8H // ................................................................*.............. - zip2 v3.8H, v8.8H, v26.8H // .................................................................*............. - srshr v10.8H, v10.8H, #11 // ..................................................................*............ - srshr v13.8H, v13.8H, #11 // ...................................................................*........... - str q3, [x0, #16] // ....................................................................*.......... - mls v12.8H, v10.8H, v2.H[0] // .....................................................................*......... - mls v25.8H, v13.8H, v2.H[0] // ......................................................................*........ - str q30, [x0], #32 // .......................................................................*....... - zip2 v13.8H, v12.8H, v25.8H // ..........................................................................*.... - zip1 v10.8H, v12.8H, v25.8H // ...........................................................................*... - str q13, [x0, #16] // ............................................................................*.. - str q10, [x0], #32 // ..............................................................................* - - // ------------------------------ cycle (expected) ------------------------------> - // 0 25 50 75 - // |------------------------|------------------------|------------------------|--- - // uzp1 v13.8H, v6.8H, v10.8H // .*............................................................................. - // uzp2 v10.8H, v6.8H, v10.8H // .....*......................................................................... - // smull v21.4S, v13.4H, v5.4H // ..............*................................................................ - // smull2 v3.4S, v13.8H, v5.8H // ...*........................................................................... - // smull v12.4S, v13.4H, v30.4H // .........*..................................................................... - // smull2 v13.4S, v13.8H, v30.8H // ..........*.................................................................... - // smlal v21.4S, v10.4H, v31.4H // ....................*.......................................................... - // smlal2 v3.4S, v10.8H, v31.8H // .......*....................................................................... - // smlal v12.4S, v10.4H, v5.4H // .............*................................................................. - // smlal2 v13.4S, v10.8H, v5.8H // ..................*............................................................ - // uzp1 v10.8H, v9.8H, v15.8H // ......*........................................................................ - // uzp2 v6.8H, v9.8H, v15.8H // ............*.................................................................. - // uzp1 v30.8H, v25.8H, v20.8H // *.............................................................................. - // uzp2 v31.8H, v25.8H, v20.8H // ..*............................................................................ - // smlal v21.4S, v10.4H, v30.4H // ........................*...................................................... - // smlal2 v3.4S, v10.8H, v30.8H // ...........*................................................................... - // smlal v12.4S, v10.4H, v31.4H // .................*............................................................. - // smlal2 v13.4S, v10.8H, v31.8H // ......................*........................................................ - // smlal v21.4S, v6.4H, v1.4H // ............................*.................................................. - // smlal2 v3.4S, v6.8H, v1.8H // ...............*............................................................... - // smlal v12.4S, v6.4H, v30.4H // ..........................*.................................................... - // smlal2 v13.4S, v6.8H, v30.8H // ...........................*................................................... - // uzp1 v10.8H, v7.8H, v27.8H // ................*.............................................................. - // uzp2 v6.8H, v7.8H, v27.8H // .....................*......................................................... - // uzp1 v30.8H, v24.8H, v28.8H // ........*...................................................................... - // uzp2 v31.8H, v24.8H, v28.8H // ....*.......................................................................... - // smlal v21.4S, v10.4H, v30.4H // ................................*.............................................. - // smlal2 v3.4S, v10.8H, v30.8H // ...................*........................................................... - // smlal v12.4S, v10.4H, v31.4H // .................................*............................................. - // smlal2 v13.4S, v10.8H, v31.8H // ...............................*............................................... - // smlal v21.4S, v6.4H, v19.4H // ....................................*.......................................... - // smlal2 v3.4S, v6.8H, v19.8H // .......................*....................................................... - // smlal v12.4S, v6.4H, v30.4H // .....................................*......................................... - // smlal2 v13.4S, v6.8H, v30.8H // ...................................*........................................... - // uzp1 v10.8H, v22.8H, v4.8H // .............................*................................................. - // uzp2 v6.8H, v22.8H, v4.8H // ..............................*................................................ - // uzp1 v30.8H, v16.8H, v29.8H // .........................*..................................................... - // uzp2 v31.8H, v16.8H, v29.8H // ..................................*............................................ - // smlal v21.4S, v10.4H, v30.4H // ........................................*...................................... - // smlal2 v3.4S, v10.8H, v30.8H // ......................................*........................................ - // smlal v12.4S, v10.4H, v31.4H // .........................................*..................................... - // smlal2 v13.4S, v10.8H, v31.8H // .......................................*....................................... - // smlal v21.4S, v6.4H, v14.4H // ............................................*.................................. - // smlal2 v3.4S, v6.8H, v14.8H // ..........................................*.................................... - // smlal v12.4S, v6.4H, v30.4H // .............................................*................................. - // smlal2 v13.4S, v6.8H, v30.8H // ...........................................*................................... - // sqdmulh v10.8H, v8.8H, v2.H[1] // ...............................................*............................... - // uzp1 v6.8H, v21.8H, v3.8H // ................................................*.............................. - // sqdmulh v30.8H, v26.8H, v2.H[1] // ..............................................*................................ - // mul v6.8H, v6.8H, v2.H[2] // ..................................................*............................ - // uzp1 v31.8H, v12.8H, v13.8H // .................................................*............................. - // srshr v10.8H, v10.8H, #11 // ....................................................*.......................... - // mul v31.8H, v31.8H, v2.H[2] // ...................................................*........................... - // smlal v21.4S, v6.4H, v0.4H // ......................................................*........................ - // smlal2 v3.4S, v6.8H, v0.8H // .......................................................*....................... - // mls v8.8H, v10.8H, v2.H[0] // ..........................................................*.................... - // smlal v12.4S, v31.4H, v0.4H // ........................................................*...................... - // smlal2 v13.4S, v31.8H, v0.8H // .........................................................*..................... - // srshr v10.8H, v30.8H, #11 // .....................................................*......................... - // mls v26.8H, v10.8H, v2.H[0] // ............................................................*.................. - // zip1 v31.8H, v8.8H, v26.8H // ................................................................*.............. - // zip2 v5.8H, v8.8H, v26.8H // .................................................................*............. - // uzp2 v8.8H, v21.8H, v3.8H // ...........................................................*................... - // uzp2 v26.8H, v12.8H, v13.8H // .............................................................*................. - // str q31, [x0], #32 // .......................................................................*....... - // str q5, [x0, #-16] // ....................................................................*.......... - // sqdmulh v10.8H, v8.8H, v2.H[1] // ..............................................................*................ - // sqdmulh v30.8H, v26.8H, v2.H[1] // ...............................................................*............... - // srshr v10.8H, v10.8H, #11 // ..................................................................*............ - // mls v8.8H, v10.8H, v2.H[0] // .....................................................................*......... - // srshr v10.8H, v30.8H, #11 // ...................................................................*........... - // mls v26.8H, v10.8H, v2.H[0] // ......................................................................*........ - // zip1 v31.8H, v8.8H, v26.8H // ...........................................................................*... - // zip2 v5.8H, v8.8H, v26.8H // ..........................................................................*.... - // str q31, [x0], #32 // ..............................................................................* - // str q5, [x0, #-16] // ............................................................................*.. + // -------------------- cycle (expected) --------------------> + // 0 25 50 + // |------------------------|------------------------|-------- + smlal2 v20.4S, v22.8H, v17.8H // *.......................................................... + uzp2 v13.8H, v4.8H, v28.8H // *.......................................................... + smlal2 v20.4S, v16.8H, v24.8H // .*......................................................... + smull v23.4S, v5.4H, v11.4H // ..*........................................................ + ld1 {v9.8H}, [x9], #16 // ..*........................................................ + smlal v23.4S, v21.4H, v25.4H // ...*....................................................... + smlal2 v20.4S, v10.8H, v26.8H // ....*...................................................... + smull2 v26.4S, v5.8H, v11.8H // .....*..................................................... + smlal v29.4S, v6.4H, v8.4H // ......*.................................................... + smlal2 v26.4S, v21.8H, v25.8H // .......*................................................... + smlal2 v26.4S, v22.8H, v24.8H // ........*.................................................. + smlal v23.4S, v22.4H, v24.4H // .........*................................................. + smlal2 v26.4S, v16.8H, v30.8H // ..........*................................................ + smlal v23.4S, v16.4H, v30.4H // ...........*............................................... + smlal2 v26.4S, v10.8H, v8.8H // ............*.............................................. + smlal v23.4S, v10.4H, v8.4H // .............*............................................. + uzp1 v12.8H, v19.8H, v31.8H // .............*............................................. + smlal2 v26.4S, v6.8H, v9.8H // ..............*............................................ + uzp2 v28.8H, v19.8H, v31.8H // ..............*............................................ + uzp2 v27.8H, v7.8H, v1.8H // ...............*........................................... + smlal v23.4S, v6.4H, v9.4H // ...............*........................................... + smlal2 v20.4S, v6.8H, v8.8H // ................*.......................................... + smlal v29.4S, v14.4H, v28.4H // .................*......................................... + smlal2 v20.4S, v14.8H, v28.8H // ..................*........................................ + ld1 {v18.8H}, [x12], #16 // ..................*........................................ + smlal v23.4S, v14.4H, v12.4H // ...................*....................................... + smlal2 v26.4S, v14.8H, v12.8H // ....................*...................................... + smlal2 v20.4S, v13.8H, v12.8H // .....................*..................................... + smlal v29.4S, v13.4H, v12.4H // ......................*.................................... + smlal2 v26.4S, v13.8H, v18.8H // .......................*................................... + smlal v23.4S, v13.4H, v18.4H // ........................*.................................. + sqdmulh v11.8H, v27.8H, v2.H[1] // .........................*................................. + uzp1 v4.8H, v29.8H, v20.8H // ..........................*................................ + mul v28.8H, v4.8H, v2.H[2] // ............................*.............................. + uzp1 v21.8H, v23.8H, v26.8H // ............................*.............................. + srshr v13.8H, v11.8H, #11 // ..............................*............................ + mul v18.8H, v21.8H, v2.H[2] // ..............................*............................ + smlal v29.4S, v28.4H, v0.4H // .................................*......................... + smlal2 v20.4S, v28.8H, v0.8H // ..................................*........................ + smlal2 v26.4S, v18.8H, v0.8H // ...................................*....................... + smlal v23.4S, v18.4H, v0.4H // ....................................*...................... + mls v27.8H, v13.8H, v2.H[0] // .....................................*..................... + uzp2 v5.8H, v29.8H, v20.8H // ......................................*.................... + uzp2 v22.8H, v23.8H, v26.8H // ........................................*.................. + sqdmulh v7.8H, v5.8H, v2.H[1] // ........................................*.................. + sqdmulh v16.8H, v22.8H, v2.H[1] // ..........................................*................ + srshr v23.8H, v7.8H, #11 // .............................................*............. + zip1 v7.8H, v27.8H, v15.8H // ..............................................*............ + srshr v13.8H, v16.8H, #11 // ...............................................*........... + str q7, [x0], #32 // ................................................*.......... + mls v5.8H, v23.8H, v2.H[0] // .................................................*......... + mls v22.8H, v13.8H, v2.H[0] // ...................................................*....... + zip2 v15.8H, v27.8H, v15.8H // ....................................................*...... + str q15, [x0, #-16] // ......................................................*.... + zip1 v26.8H, v22.8H, v5.8H // ........................................................*.. + zip2 v23.8H, v22.8H, v5.8H // ........................................................*.. + str q26, [x0], #32 // ..........................................................* + str q23, [x0, #-16] // ..........................................................* + + // -------------------- cycle (expected) --------------------> + // 0 25 50 + // |------------------------|------------------------|-------- + // smlal2 v20.4S, v22.8H, v17.8H // *.......................................................... + // uzp2 v12.8H, v7.8H, v1.8H // ...............*........................................... + // smull2 v1.4S, v5.8H, v11.8H // .....*..................................................... + // smlal2 v1.4S, v21.8H, v25.8H // .......*................................................... + // uzp2 v9.8H, v19.8H, v31.8H // ..............*............................................ + // smlal2 v1.4S, v22.8H, v24.8H // ........*.................................................. + // uzp1 v18.8H, v19.8H, v31.8H // .............*............................................. + // smlal2 v1.4S, v16.8H, v30.8H // ..........*................................................ + // smull v7.4S, v5.4H, v11.4H // ..*........................................................ + // smlal v29.4S, v6.4H, v8.4H // ......*.................................................... + // smlal v29.4S, v14.4H, v9.4H // .................*......................................... + // sqdmulh v13.8H, v12.8H, v2.H[1] // .........................*................................. + // uzp2 v11.8H, v4.8H, v28.8H // *.......................................................... + // smlal v7.4S, v21.4H, v25.4H // ...*....................................................... + // smlal2 v20.4S, v16.8H, v24.8H // .*......................................................... + // smlal2 v20.4S, v10.8H, v26.8H // ....*...................................................... + // srshr v17.8H, v13.8H, #11 // ..............................*............................ + // smlal2 v20.4S, v6.8H, v8.8H // ................*.......................................... + // smlal2 v20.4S, v14.8H, v9.8H // ..................*........................................ + // smlal2 v20.4S, v11.8H, v18.8H // .....................*..................................... + // smlal v29.4S, v11.4H, v18.4H // ......................*.................................... + // mls v12.8H, v17.8H, v2.H[0] // .....................................*..................... + // smlal v7.4S, v22.4H, v24.4H // .........*................................................. + // uzp1 v13.8H, v29.8H, v20.8H // ..........................*................................ + // smlal v7.4S, v16.4H, v30.4H // ...........*............................................... + // smlal v7.4S, v10.4H, v8.4H // .............*............................................. + // ld1 {v30.8H}, [x9], #16 // ..*........................................................ + // smlal2 v1.4S, v10.8H, v8.8H // ............*.............................................. + // zip1 v16.8H, v12.8H, v15.8H // ..............................................*............ + // mul v10.8H, v13.8H, v2.H[2] // ............................*.............................. + // zip2 v13.8H, v12.8H, v15.8H // ....................................................*...... + // str q16, [x0], #32 // ................................................*.......... + // ld1 {v15.8H}, [x12], #16 // ..................*........................................ + // smlal v7.4S, v6.4H, v30.4H // ...............*........................................... + // smlal v7.4S, v14.4H, v18.4H // ...................*....................................... + // smlal2 v1.4S, v6.8H, v30.8H // ..............*............................................ + // smlal v29.4S, v10.4H, v0.4H // .................................*......................... + // str q13, [x0, #-16] // ......................................................*.... + // smlal2 v20.4S, v10.8H, v0.8H // ..................................*........................ + // smlal2 v1.4S, v14.8H, v18.8H // ....................*...................................... + // smlal2 v1.4S, v11.8H, v15.8H // .......................*................................... + // smlal v7.4S, v11.4H, v15.4H // ........................*.................................. + // uzp2 v15.8H, v29.8H, v20.8H // ......................................*.................... + // sqdmulh v12.8H, v15.8H, v2.H[1] // ........................................*.................. + // uzp1 v13.8H, v7.8H, v1.8H // ............................*.............................. + // mul v9.8H, v13.8H, v2.H[2] // ..............................*............................ + // srshr v13.8H, v12.8H, #11 // .............................................*............. + // smlal2 v1.4S, v9.8H, v0.8H // ...................................*....................... + // smlal v7.4S, v9.4H, v0.4H // ....................................*...................... + // mls v15.8H, v13.8H, v2.H[0] // .................................................*......... + // uzp2 v12.8H, v7.8H, v1.8H // ........................................*.................. + // sqdmulh v13.8H, v12.8H, v2.H[1] // ..........................................*................ + // srshr v17.8H, v13.8H, #11 // ...............................................*........... + // mls v12.8H, v17.8H, v2.H[0] // ...................................................*....... + // zip1 v16.8H, v12.8H, v15.8H // ........................................................*.. + // zip2 v13.8H, v12.8H, v15.8H // ........................................................*.. + // str q16, [x0], #32 // ..........................................................* + // str q13, [x0, #-16] // ..........................................................* pop_stack