Skip to content

Commit 0371acd

Browse files
hanno-beckermkannwischer
authored andcommitted
AArch64 NTT/invNTT: Drop dead flag-set in loop tail
The loop-tail `subs count, count, #1` writes NZCV, but the loop closes on `cbnz` and the flags are never read. Replace with a plain `sub` in both the opt and clean variants. The HOL-Light bytecode is updated to match; the proofs are otherwise unchanged. Signed-off-by: Hanno Becker <beckphan@amazon.co.uk>
1 parent f654c2f commit 0371acd

10 files changed

Lines changed: 20 additions & 20 deletions

File tree

dev/aarch64_clean/src/intt_aarch64_asm.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ intt_layer4567_start:
299299
str q_data2, [inp, #(-64 + 16*2)]
300300
str q_data3, [inp, #(-64 + 16*3)]
301301

302-
subs count, count, #1
302+
sub count, count, #1
303303
cbnz count, intt_layer4567_start
304304

305305
// ---------------------------------------------------------------------
@@ -347,7 +347,7 @@ intt_layer123_start:
347347
str q_data2, [in, #(-16 + 2*(512/8))]
348348
str q_data3, [in, #(-16 + 3*(512/8))]
349349

350-
subs count, count, #1
350+
sub count, count, #1
351351
cbnz count, intt_layer123_start
352352

353353
pop_stack

dev/aarch64_clean/src/ntt_aarch64_asm.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ ntt_layer123_start:
255255
str q_data6, [in, #(-16 + 6*(512/8))]
256256
str q_data7, [in, #(-16 + 7*(512/8))]
257257

258-
subs count, count, #1
258+
sub count, count, #1
259259
cbnz count, ntt_layer123_start
260260

261261
mov in, inp
@@ -291,7 +291,7 @@ ntt_layer4567_start:
291291
str q_data2, [in, #(-16*2)]
292292
str q_data3, [in, #(-16*1)]
293293

294-
subs count, count, #1
294+
sub count, count, #1
295295
cbnz count, ntt_layer4567_start
296296

297297
pop_stack

dev/aarch64_opt/src/intt_aarch64_asm.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,7 @@ intt_layer4567_start:
685685
// str q10, [x3, #(-64 + 16*2)] // .....~.............................................................................'.....~.............................................................................'.....l.............................................................................
686686
// str q11, [x3, #(-64 + 16*3)] // ................................................................~..................'................................................................~..................'................................................................l..................
687687

688-
subs count, count, 1
688+
sub count, count, 1
689689
cbnz count, intt_layer4567_start
690690
// Instructions: 71
691691
// Expected cycles: 77
@@ -1187,7 +1187,7 @@ intt_layer123_start:
11871187
// str q10, [x0, #(-16 + 2*(512/8))] // ...............................................~........'..............................................................*........'..............................................................~......
11881188
// str q11, [x0, #(-16 + 3*(512/8))] // ........................................................'..~....................................................................'..l..................................................................
11891189

1190-
subs count, count, 1
1190+
sub count, count, 1
11911191
cbnz count, intt_layer123_start
11921192
// Instructions: 81
11931193
// Expected cycles: 86

dev/aarch64_opt/src/ntt_aarch64_asm.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,7 @@ ntt_layer123_start:
527527
// str q14, [x0, #(-16 + 6*(512/8))] // ................................~................................'......................................~................................'......................................l.....
528528
// str q15, [x0, #(-16 + 7*(512/8))] // .....................................~...........................'...........................................~...........................'...........................................l
529529

530-
subs count, count, 1
530+
sub count, count, 1
531531
cbnz count, ntt_layer123_start
532532
// Instructions: 93
533533
// Expected cycles: 84
@@ -1070,7 +1070,7 @@ ntt_layer4567_start:
10701070
// str q10, [x0, #(-16*2)] // ...........~..................................'............~..................................'............l...........................
10711071
// str q11, [x0, #(-16*1)] // ......................................~.......'.......................................~.......'.......................................l
10721072

1073-
subs count, count, 1
1073+
sub count, count, 1
10741074
cbnz count, ntt_layer4567_start
10751075
// Instructions: 66
10761076
// Expected cycles: 49

mlkem/src/native/aarch64/src/intt_aarch64_asm.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ Lintt_layer4567_start:
295295
sqrdmulh v31.8h, v8.8h, v11.h[5]
296296
sub v14.8h, v21.8h, v10.8h
297297
stur q0, [x3, #-0x30]
298-
subs x4, x4, #0x1
298+
sub x4, x4, #0x1
299299
cbnz x4, Lintt_layer4567_start
300300
mul v15.8h, v6.8h, v15.8h
301301
sub v22.8h, v20.8h, v25.8h
@@ -521,7 +521,7 @@ Lintt_layer123_start:
521521
sqrdmulh v9.8h, v13.8h, v0.h[1]
522522
str q17, [x0, #0x130]
523523
mul v17.8h, v19.8h, v0.h[0]
524-
subs x4, x4, #0x1
524+
sub x4, x4, #0x1
525525
cbnz x4, Lintt_layer123_start
526526
mls v23.8h, v10.8h, v7.h[0]
527527
ldr q11, [x0, #0x190]

mlkem/src/native/aarch64/src/ntt_aarch64_asm.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ Lntt_layer123_start:
223223
add v28.8h, v13.8h, v23.8h
224224
sub v13.8h, v13.8h, v23.8h
225225
mul v23.8h, v20.8h, v0.h[2]
226-
subs x4, x4, #0x1
226+
sub x4, x4, #0x1
227227
cbnz x4, Lntt_layer123_start
228228
sqrdmulh v3.8h, v5.8h, v1.h[1]
229229
mls v23.8h, v15.8h, v7.h[0]
@@ -470,7 +470,7 @@ Lntt_layer4567_start:
470470
sub v30.8h, v21.8h, v17.8h
471471
mul v0.8h, v16.8h, v1.8h
472472
trn1 v28.4s, v6.4s, v12.4s
473-
subs x4, x4, #0x1
473+
sub x4, x4, #0x1
474474
cbnz x4, Lntt_layer4567_start
475475
add v22.8h, v11.8h, v8.8h
476476
mul v27.8h, v27.8h, v4.h[2]

proofs/hol_light/aarch64/mlkem/intt_aarch64_asm.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ Lintt_layer4567_start:
298298
sqrdmulh v31.8h, v8.8h, v11.h[5]
299299
sub v14.8h, v21.8h, v10.8h
300300
stur q0, [x3, #-0x30]
301-
subs x4, x4, #0x1
301+
sub x4, x4, #0x1
302302
cbnz x4, Lintt_layer4567_start
303303
mul v15.8h, v6.8h, v15.8h
304304
sub v22.8h, v20.8h, v25.8h
@@ -524,7 +524,7 @@ Lintt_layer123_start:
524524
sqrdmulh v9.8h, v13.8h, v0.h[1]
525525
str q17, [x0, #0x130]
526526
mul v17.8h, v19.8h, v0.h[0]
527-
subs x4, x4, #0x1
527+
sub x4, x4, #0x1
528528
cbnz x4, Lintt_layer123_start
529529
mls v23.8h, v10.8h, v7.h[0]
530530
ldr q11, [x0, #0x190]

proofs/hol_light/aarch64/mlkem/ntt_aarch64_asm.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ Lntt_layer123_start:
226226
add v28.8h, v13.8h, v23.8h
227227
sub v13.8h, v13.8h, v23.8h
228228
mul v23.8h, v20.8h, v0.h[2]
229-
subs x4, x4, #0x1
229+
sub x4, x4, #0x1
230230
cbnz x4, Lntt_layer123_start
231231
sqrdmulh v3.8h, v5.8h, v1.h[1]
232232
mls v23.8h, v15.8h, v7.h[0]
@@ -473,7 +473,7 @@ Lntt_layer4567_start:
473473
sub v30.8h, v21.8h, v17.8h
474474
mul v0.8h, v16.8h, v1.8h
475475
trn1 v28.4s, v6.4s, v12.4s
476-
subs x4, x4, #0x1
476+
sub x4, x4, #0x1
477477
cbnz x4, Lntt_layer4567_start
478478
add v22.8h, v11.8h, v8.8h
479479
mul v27.8h, v27.8h, v4.h[2]

proofs/hol_light/aarch64/proofs/intt_aarch64_asm.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ let mlkem_intt_mc = define_assert_from_elf
242242
0x4f5bd91f; (* arm_SQRDMULH_VEC Q31 Q8 (Q11 :> LANE_H 5) 16 128 *)
243243
0x6e6a86ae; (* arm_SUB_VEC Q14 Q21 Q10 16 128 *)
244244
0x3c9d0060; (* arm_STR Q0 X3 (Immediate_Offset (word 18446744073709551568)) *)
245-
0xf1000484; (* arm_SUBS X4 X4 (rvalue (word 1)) *)
245+
0xd1000484; (* arm_SUB X4 X4 (rvalue (word 1)) *)
246246
0xb5fff464; (* arm_CBNZ X4 (word 2096780) *)
247247
0x4e6f9ccf; (* arm_MUL_VEC Q15 Q6 Q15 16 128 *)
248248
0x6e798696; (* arm_SUB_VEC Q22 Q20 Q25 16 128 *)
@@ -466,7 +466,7 @@ let mlkem_intt_mc = define_assert_from_elf
466466
0x4f50d1a9; (* arm_SQRDMULH_VEC Q9 Q13 (Q0 :> LANE_H 1) 16 128 *)
467467
0x3d804c11; (* arm_STR Q17 X0 (Immediate_Offset (word 304)) *)
468468
0x4f408271; (* arm_MUL_VEC Q17 Q19 (Q0 :> LANE_H 0) 16 128 *)
469-
0xf1000484; (* arm_SUBS X4 X4 (rvalue (word 1)) *)
469+
0xd1000484; (* arm_SUB X4 X4 (rvalue (word 1)) *)
470470
0xb5fff664; (* arm_CBNZ X4 (word 2096844) *)
471471
0x6f474157; (* arm_MLS_VEC Q23 Q10 (Q7 :> LANE_H 0) 16 128 *)
472472
0x3dc0640b; (* arm_LDR Q11 X0 (Immediate_Offset (word 400)) *)

proofs/hol_light/aarch64/proofs/ntt_aarch64_asm.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ let mlkem_ntt_mc = define_assert_from_elf
170170
0x4e7785bc; (* arm_ADD_VEC Q28 Q13 Q23 16 128 *)
171171
0x6e7785ad; (* arm_SUB_VEC Q13 Q13 Q23 16 128 *)
172172
0x4f608297; (* arm_MUL_VEC Q23 Q20 (Q0 :> LANE_H 2) 16 128 *)
173-
0xf1000484; (* arm_SUBS X4 X4 (rvalue (word 1)) *)
173+
0xd1000484; (* arm_SUB X4 X4 (rvalue (word 1)) *)
174174
0xb5fff664; (* arm_CBNZ X4 (word 2096844) *)
175175
0x4f51d0a3; (* arm_SQRDMULH_VEC Q3 Q5 (Q1 :> LANE_H 1) 16 128 *)
176176
0x6f4741f7; (* arm_MLS_VEC Q23 Q15 (Q7 :> LANE_H 0) 16 128 *)
@@ -415,7 +415,7 @@ let mlkem_ntt_mc = define_assert_from_elf
415415
0x6e7186be; (* arm_SUB_VEC Q30 Q21 Q17 16 128 *)
416416
0x4e619e00; (* arm_MUL_VEC Q0 Q16 Q1 16 128 *)
417417
0x4e8c28dc; (* arm_TRN1 Q28 Q6 Q12 32 128 *)
418-
0xf1000484; (* arm_SUBS X4 X4 (rvalue (word 1)) *)
418+
0xd1000484; (* arm_SUB X4 X4 (rvalue (word 1)) *)
419419
0xb5fff704; (* arm_CBNZ X4 (word 2096864) *)
420420
0x4e688576; (* arm_ADD_VEC Q22 Q11 Q8 16 128 *)
421421
0x4f64837b; (* arm_MUL_VEC Q27 Q27 (Q4 :> LANE_H 2) 16 128 *)

0 commit comments

Comments
 (0)