4242 factor .req v2
4343 factor_t .req v3
4444 modulus .req v4
45- modulus_twisted .req v5
4645
47- tmp0 .req v6
46+ tmp0 .req v5
4847
4948 .text
5049 . global MLK_ASM_NAMESPACE(poly_tomont_asm)
@@ -54,9 +53,6 @@ MLK_ASM_FN_SYMBOL(poly_tomont_asm)
5453 mov wtmp , # 3329 // ML - KEM modulus
5554 dup modulus. 8h , wtmp
5655
57- mov wtmp , # 20159 // Barrett twist of 1 wrt 2 ^ 27
58- dup modulus_twisted. 8h , wtmp
59-
6056 mov wtmp , # - 1044 // 2 ^ 16 % 3329
6157 dup factor. 8h , wtmp
6258
@@ -71,48 +67,48 @@ MLK_ASM_FN_SYMBOL(poly_tomont_asm)
7167 // Cycle bound : 23 . 0
7268 // IPC bound : 0 . 70
7369 //
74- // Wall time: 0 .05s
75- // User time: 0 .05s
70+ // Wall time: 0 .11s
71+ // User time: 0 .11s
7672 //
7773 // ----- cycle (expected) ------ >
7874 // 0 25
7975 // | ------------------------ | ----
80- ldr q18 , [ x0 , # 32 ] // * .............................
81- ldr q0 , [ x0 , # 16 ] // * .............................
82- ldr q16 , [ x0 ], # 64 // . * ............................
83- sqrdmulh v23. 8H , v0. 8H , v3. 8H // .... * .........................
84- mul v26. 8H , v0. 8H , v2. 8H // ...... * .......................
85- sqrdmulh v19. 8H , v16. 8H , v3. 8H // ........ * .....................
86- mls v26. 8H , v23. 8H , v4.H [ 0 ] // .......... * ...................
87- mul v29. 8H , v16. 8H , v2. 8H // ............ * .................
88- ldr q16 , [ x0 , # - 16 ] // ............ * .................
89- mls v29. 8H , v19. 8H , v4.H [ 0 ] // .............. * ...............
90- str q26 , [ x0 , # - 48 ] // ............... * ..............
91- sqrdmulh v26. 8H , v18. 8H , v3. 8H // ................ * .............
92- mul v18. 8H , v18. 8H , v2. 8H // .................. * ...........
93- str q29 , [ x0 , # - 64 ] // ................... * ..........
76+ ldr q5 , [ x0 , # 16 ] // * .............................
77+ ldr q17 , [ x0 ], # 64 // * .............................
78+ ldr q0 , [ x0 , # - 32 ] // . * ............................
79+ ldr q16 , [ x0 , # - 16 ] // . * ............................
80+ mul v29. 8H , v5. 8H , v2. 8H // .... * .........................
81+ sqrdmulh v22. 8H , v5. 8H , v3. 8H // ...... * .......................
82+ mul v5. 8H , v17. 8H , v2. 8H // ........ * .....................
83+ sqrdmulh v28. 8H , v17. 8H , v3. 8H // .......... * ...................
84+ sqrdmulh v17. 8H , v0. 8H , v3. 8H // ............ * .................
85+ mls v29. 8H , v22. 8H , v4.H [ 0 ] // .............. * ...............
86+ mls v5. 8H , v28. 8H , v4.H [ 0 ] // ................ * .............
87+ mul v18. 8H , v0. 8H , v2. 8H // .................. * ...........
88+ str q29 , [ x0 , # - 48 ] // .................... * .........
9489 sqrdmulh v29. 8H , v16. 8H , v3. 8H // .................... * .........
95- mls v18. 8H , v26. 8H , v4.H [ 0 ] // ...................... * .......
90+ mls v18. 8H , v17. 8H , v4.H [ 0 ] // ...................... * .......
91+ str q5 , [ x0 , # - 64 ] // ...................... * .......
9692
9793 // ------ cycle (expected) ------ >
9894 // 0 25
9995 // | ------------------------ | -----
100- // ldr q19 , [ x0 , # 16 ] // * ..............................
101- // ldr q23 , [ x0 , # 32 ] // * ..............................
102- // ldr q17 , [ x0 ], # 64 // . * .............................
103- // ldr q16 , [ x0 , # - 16 ] // ............ * ..................
104- // sqrdmulh v28. 8H , v19. 8H , v3. 8H // .... * ..........................
105- // mul v0. 8H , v19. 8H , v2. 8H // ...... * ........................
106- // sqrdmulh v24. 8H , v23. 8H , v3. 8H // ................ * ..............
96+ // ldr q23 , [ x0 , # 32 ] // . * .............................
97+ // ldr q17 , [ x0 ], # 64 // * ..............................
98+ // ldr q16 , [ x0 , # - 16 ] // . * .............................
10799 // mul v18. 8H , v23. 8H , v2. 8H // .................. * ............
108- // sqrdmulh v22. 8H , v17. 8H , v3. 8H // ........ * ......................
109- // mul v26. 8H , v17. 8H , v2. 8H // ............ * ..................
110- // mls v0. 8H , v28. 8H , v4.H [ 0 ] // .......... * ....................
111- // mls v26. 8H , v22. 8H , v4.H [ 0 ] // .............. * ................
100+ // ldr q19 , [ x0 , # - 48 ] // * ..............................
101+ // sqrdmulh v24. 8H , v23. 8H , v3. 8H // ............ * ..................
102+ // sqrdmulh v28. 8H , v19. 8H , v3. 8H // ...... * ........................
103+ // mul v0. 8H , v19. 8H , v2. 8H // .... * ..........................
104+ // sqrdmulh v22. 8H , v17. 8H , v3. 8H // .......... * ....................
105+ // mul v26. 8H , v17. 8H , v2. 8H // ........ * ......................
106+ // mls v0. 8H , v28. 8H , v4.H [ 0 ] // .............. * ................
107+ // mls v26. 8H , v22. 8H , v4.H [ 0 ] // ................ * ..............
112108 // sqrdmulh v29. 8H , v16. 8H , v3. 8H // .................... * ..........
113- // str q0 , [ x0 , # - 48 ] // ............... * ...............
109+ // str q0 , [ x0 , # - 48 ] // .................... * ..........
114110 // mls v18. 8H , v24. 8H , v4.H [ 0 ] // ...................... * ........
115- // str q26 , [ x0 , # - 64 ] // ................... * ...........
111+ // str q26 , [ x0 , # - 64 ] // ...................... * ........
116112
117113 sub count , count , # 1
118114poly_tomont_loop:
@@ -123,24 +119,24 @@ poly_tomont_loop:
123119 // Cycle bound : 24 . 0
124120 // IPC bound : 0 . 83
125121 //
126- // Wall time: 0 .14s
127- // User time: 0 .14s
122+ // Wall time: 0 .28s
123+ // User time: 0 .28s
128124 //
129125 // ----- cycle (expected) ------ >
130126 // 0 25
131127 // | ------------------------ | ----
132- ldr q19 , [ x0 , # 16 ] // * .............................
133128 mul v26. 8H , v16. 8H , v2. 8H // l.............................
134- ldr q23 , [ x0 , # 32 ] // . * ............................
135- ldr q17 , [ x0 ], # 64 // .. * ...........................
129+ ldr q23 , [ x0 , # 32 ] // * . ............................
130+ ldr q17 , [ x0 ], # 64 // . * . ...........................
136131 mls v26. 8H , v29. 8H , v4.H [ 0 ] // ..l...........................
137- ldr q16 , [ x0 , # - 16 ] // ... * ..........................
138- sqrdmulh v28. 8H , v19. 8H , v3. 8H // .... * .........................
139- str q18 , [ x0 , # - 96 ] // ....l.........................
140- mul v0. 8H , v19. 8H , v2. 8H // ...... * .......................
132+ ldr q16 , [ x0 , # - 16 ] // .. * ...........................
133+ str q18 , [ x0 , # - 96 ] // ...l..........................
134+ mul v18. 8H , v23. 8H , v2. 8H // .... * .........................
135+ ldr q19 , [ x0 , # - 48 ] // .... * .........................
136+ sqrdmulh v24. 8H , v23. 8H , v3. 8H // ...... * .......................
141137 str q26 , [ x0 , # - 80 ] // .......l......................
142- sqrdmulh v24 . 8H , v23 . 8H , v3. 8H // ........ * .....................
143- mul v18 . 8H , v23 . 8H , v2. 8H // .......... * ...................
138+ sqrdmulh v28 . 8H , v19 . 8H , v3. 8H // ........ * .....................
139+ mul v0 . 8H , v19 . 8H , v2. 8H // ..........* ...................
144140 sqrdmulh v22. 8H , v17. 8H , v3. 8H // ............ * .................
145141 mul v26. 8H , v17. 8H , v2. 8H // .............. * ...............
146142 mls v0. 8H , v28. 8H , v4.H [ 0 ] // ................ * .............
@@ -153,25 +149,25 @@ poly_tomont_loop:
153149 // ------ cycle (expected) ------- >
154150 // 0 25
155151 // | ------------------------ | ------
156- // ldr q0 , [ x0 ], # 64 // .. * .....................'.~ .....
157- // sqrdmulh v6 . 8h , v0. 8h , v3. 8h // ............ * ...........'.......
152+ // ldr q0 , [ x0 ], # 64 // . * ......................'~. .....
153+ // sqrdmulh v5 . 8h , v0. 8h , v3. 8h // ............ * ...........'.......
158154 // mul v1. 8h , v0. 8h , v2. 8h // .............. * .........'.......
159- // mls v1. 8h , v6 . 8h , v4.h [ 0 ] // .................. * .....'.......
155+ // mls v1. 8h , v5 . 8h , v4.h [ 0 ] // .................. * .....'.......
160156 // str q1 , [ x0 , # - 64 ] // ....................... * '.......
161- // ldr q0 , [ x0 , # - 48 ] // * .......................~.......
162- // sqrdmulh v6. 8h , v0. 8h , v3. 8h // .... * ...................'...~...
163- // mul v1. 8h , v0. 8h , v2. 8h // ...... * .................'.....~.
164- // mls v1. 8h , v6. 8h , v4.h [ 0 ] // ................ * .......'.......
165- // str q1 , [ x0 , # - 48 ] // ..................... * ..'.......
166- // ldr q0 , [ x0 , # - 32 ] // . * ......................'~......
167- // sqrdmulh v6. 8h , v0. 8h , v3. 8h // ........ * ...............'.......
157+ // ldr q0 , [ x0 , # - 48 ] // .... * ...................'...~...
158+ // sqrdmulh v5. 8h , v0. 8h , v3. 8h // ........ * ...............'.......
168159 // mul v1. 8h , v0. 8h , v2. 8h // .......... * .............'.......
169- // mls v1. 8h , v6. 8h , v4.h [ 0 ] // ...................... * .'.......
170- // str q1 , [ x0 , # - 32 ] // ....~...................'...l...
171- // ldr q0 , [ x0 , # - 16 ] // ... * ....................'..~....
172- // sqrdmulh v6. 8h , v0. 8h , v3. 8h // .................... * ...'.......
160+ // mls v1. 8h , v5. 8h , v4.h [ 0 ] // ................ * .......'.......
161+ // str q1 , [ x0 , # - 48 ] // ..................... * ..'.......
162+ // ldr q0 , [ x0 , # - 32 ] // * .......................~.......
163+ // sqrdmulh v5. 8h , v0. 8h , v3. 8h // ...... * .................'.....~.
164+ // mul v1. 8h , v0. 8h , v2. 8h // .... * ...................'...~...
165+ // mls v1. 8h , v5. 8h , v4.h [ 0 ] // ...................... * .'.......
166+ // str q1 , [ x0 , # - 32 ] // ...~....................'..l....
167+ // ldr q0 , [ x0 , # - 16 ] // .. * .....................'.~.....
168+ // sqrdmulh v5. 8h , v0. 8h , v3. 8h // .................... * ...'.......
173169 // mul v1. 8h , v0. 8h , v2. 8h // ~.......................l.......
174- // mls v1. 8h , v6 . 8h , v4.h [ 0 ] // ..~.....................'.l.....
170+ // mls v1. 8h , v5 . 8h , v4.h [ 0 ] // ..~.....................'.l.....
175171 // str q1 , [ x0 , # - 16 ] // .......~................'......l
176172
177173 sub count , count , 1
@@ -183,8 +179,8 @@ poly_tomont_loop:
183179 // Cycle bound : 8 . 0
184180 // IPC bound : 0 . 50
185181 //
186- // Wall time: 0 .01s
187- // User time: 0 .01s
182+ // Wall time: 0 .02s
183+ // User time: 0 .02s
188184 //
189185 // ----- cycle (expected) ------ >
190186 // 0 25
@@ -217,7 +213,6 @@ poly_tomont_loop:
217213 .unreq factor
218214 .unreq factor_t
219215 .unreq modulus
220- .unreq modulus_twisted
221216
222217 .unreq tmp0
223218
0 commit comments