Skip to content

Commit 2bf75d4

Browse files
committed
Add memory fence to bench_internal
1 parent 96cd94e commit 2bf75d4

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

src/bench.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
#include <math.h>
1313
#include "sys/time.h"
1414

15+
static void escape(void *p) {
16+
__asm__ __volatile__("": : "g"(p) : "memory");
17+
}
18+
1519
static double gettimedouble(void) {
1620
struct timeval tv;
1721
gettimeofday(&tv, NULL);

src/bench_internal.c

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ typedef struct {
2727
int wnaf[256];
2828
} bench_inv;
2929

30+
3031
void bench_setup(void* arg) {
3132
bench_inv *data = (bench_inv*)arg;
3233

@@ -62,6 +63,7 @@ void bench_scalar_add(void* arg) {
6263

6364
for (i = 0; i < 2000000; i++) {
6465
secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
66+
escape(data);
6567
}
6668
}
6769

@@ -71,6 +73,7 @@ void bench_scalar_negate(void* arg) {
7173

7274
for (i = 0; i < 2000000; i++) {
7375
secp256k1_scalar_negate(&data->scalar_x, &data->scalar_x);
76+
escape(data);
7477
}
7578
}
7679

@@ -80,6 +83,7 @@ void bench_scalar_sqr(void* arg) {
8083

8184
for (i = 0; i < 200000; i++) {
8285
secp256k1_scalar_sqr(&data->scalar_x, &data->scalar_x);
86+
escape(data);
8387
}
8488
}
8589

@@ -89,6 +93,7 @@ void bench_scalar_mul(void* arg) {
8993

9094
for (i = 0; i < 200000; i++) {
9195
secp256k1_scalar_mul(&data->scalar_x, &data->scalar_x, &data->scalar_y);
96+
escape(data);
9297
}
9398
}
9499

@@ -101,6 +106,7 @@ void bench_scalar_split(void* arg) {
101106
secp256k1_scalar l, r;
102107
secp256k1_scalar_split_lambda(&l, &r, &data->scalar_x);
103108
secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
109+
escape(data);
104110
}
105111
}
106112
#endif
@@ -112,6 +118,7 @@ void bench_scalar_inverse(void* arg) {
112118
for (i = 0; i < 2000; i++) {
113119
secp256k1_scalar_inverse(&data->scalar_x, &data->scalar_x);
114120
secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
121+
escape(data);
115122
}
116123
}
117124

@@ -122,6 +129,7 @@ void bench_scalar_inverse_var(void* arg) {
122129
for (i = 0; i < 2000; i++) {
123130
secp256k1_scalar_inverse_var(&data->scalar_x, &data->scalar_x);
124131
secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
132+
escape(data);
125133
}
126134
}
127135

@@ -131,6 +139,7 @@ void bench_field_normalize(void* arg) {
131139

132140
for (i = 0; i < 2000000; i++) {
133141
secp256k1_fe_normalize(&data->fe_x);
142+
escape(data);
134143
}
135144
}
136145

@@ -140,6 +149,7 @@ void bench_field_normalize_weak(void* arg) {
140149

141150
for (i = 0; i < 2000000; i++) {
142151
secp256k1_fe_normalize_weak(&data->fe_x);
152+
escape(data);
143153
}
144154
}
145155

@@ -149,6 +159,7 @@ void bench_field_mul(void* arg) {
149159

150160
for (i = 0; i < 200000; i++) {
151161
secp256k1_fe_mul(&data->fe_x, &data->fe_x, &data->fe_y);
162+
escape(data);
152163
}
153164
}
154165

@@ -158,6 +169,7 @@ void bench_field_sqr(void* arg) {
158169

159170
for (i = 0; i < 200000; i++) {
160171
secp256k1_fe_sqr(&data->fe_x, &data->fe_x);
172+
escape(data);
161173
}
162174
}
163175

@@ -168,6 +180,7 @@ void bench_field_inverse(void* arg) {
168180
for (i = 0; i < 20000; i++) {
169181
secp256k1_fe_inv(&data->fe_x, &data->fe_x);
170182
secp256k1_fe_add(&data->fe_x, &data->fe_y);
183+
escape(data);
171184
}
172185
}
173186

@@ -178,6 +191,7 @@ void bench_field_inverse_var(void* arg) {
178191
for (i = 0; i < 20000; i++) {
179192
secp256k1_fe_inv_var(&data->fe_x, &data->fe_x);
180193
secp256k1_fe_add(&data->fe_x, &data->fe_y);
194+
escape(data);
181195
}
182196
}
183197

@@ -190,6 +204,7 @@ void bench_field_sqrt(void* arg) {
190204
t = data->fe_x;
191205
secp256k1_fe_sqrt(&data->fe_x, &t);
192206
secp256k1_fe_add(&data->fe_x, &data->fe_y);
207+
escape(data);
193208
}
194209
}
195210

@@ -199,6 +214,7 @@ void bench_group_double_var(void* arg) {
199214

200215
for (i = 0; i < 200000; i++) {
201216
secp256k1_gej_double_var(&data->gej_x, &data->gej_x, NULL);
217+
escape(data);
202218
}
203219
}
204220

@@ -208,6 +224,7 @@ void bench_group_add_var(void* arg) {
208224

209225
for (i = 0; i < 200000; i++) {
210226
secp256k1_gej_add_var(&data->gej_x, &data->gej_x, &data->gej_y, NULL);
227+
escape(data);
211228
}
212229
}
213230

@@ -217,6 +234,7 @@ void bench_group_add_affine(void* arg) {
217234

218235
for (i = 0; i < 200000; i++) {
219236
secp256k1_gej_add_ge(&data->gej_x, &data->gej_x, &data->ge_y);
237+
escape(data);
220238
}
221239
}
222240

@@ -226,6 +244,7 @@ void bench_group_add_affine_var(void* arg) {
226244

227245
for (i = 0; i < 200000; i++) {
228246
secp256k1_gej_add_ge_var(&data->gej_x, &data->gej_x, &data->ge_y, NULL);
247+
escape(data);
229248
}
230249
}
231250

@@ -235,6 +254,7 @@ void bench_group_jacobi_var(void* arg) {
235254

236255
for (i = 0; i < 20000; i++) {
237256
secp256k1_gej_has_quad_y_var(&data->gej_x);
257+
escape(data);
238258
}
239259
}
240260

@@ -245,6 +265,7 @@ void bench_ecmult_wnaf(void* arg) {
245265
for (i = 0; i < 20000; i++) {
246266
secp256k1_ecmult_wnaf(data->wnaf, 256, &data->scalar_x, WINDOW_A);
247267
secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
268+
escape(data);
248269
}
249270
}
250271

@@ -255,6 +276,7 @@ void bench_wnaf_const(void* arg) {
255276
for (i = 0; i < 20000; i++) {
256277
secp256k1_wnaf_const(data->wnaf, &data->scalar_x, WINDOW_A, 256);
257278
secp256k1_scalar_add(&data->scalar_x, &data->scalar_x, &data->scalar_y);
279+
escape(data);
258280
}
259281
}
260282

@@ -268,6 +290,7 @@ void bench_sha256(void* arg) {
268290
secp256k1_sha256_initialize(&sha);
269291
secp256k1_sha256_write(&sha, data->data, 32);
270292
secp256k1_sha256_finalize(&sha, data->data);
293+
escape(data);
271294
}
272295
}
273296

@@ -280,6 +303,7 @@ void bench_hmac_sha256(void* arg) {
280303
secp256k1_hmac_sha256_initialize(&hmac, data->data, 32);
281304
secp256k1_hmac_sha256_write(&hmac, data->data, 32);
282305
secp256k1_hmac_sha256_finalize(&hmac, data->data);
306+
escape(data);
283307
}
284308
}
285309

@@ -291,6 +315,7 @@ void bench_rfc6979_hmac_sha256(void* arg) {
291315
for (i = 0; i < 20000; i++) {
292316
secp256k1_rfc6979_hmac_sha256_initialize(&rng, data->data, 64);
293317
secp256k1_rfc6979_hmac_sha256_generate(&rng, data->data, 32);
318+
escape(data);
294319
}
295320
}
296321

@@ -312,7 +337,7 @@ void bench_context_sign(void* arg) {
312337

313338
#ifndef USE_NUM_NONE
314339
void bench_num_jacobi(void* arg) {
315-
int i;
340+
int i, j;
316341
bench_inv *data = (bench_inv*)arg;
317342
secp256k1_num nx, norder;
318343

@@ -321,7 +346,8 @@ void bench_num_jacobi(void* arg) {
321346
secp256k1_scalar_get_num(&norder, &data->scalar_y);
322347

323348
for (i = 0; i < 200000; i++) {
324-
secp256k1_num_jacobi(&nx, &norder);
349+
j = secp256k1_num_jacobi(&nx, &norder);
350+
escape(&j);
325351
}
326352
}
327353
#endif

0 commit comments

Comments
 (0)