diff --git a/demo/test.c b/demo/test.c index 15ed183..3d81d87 100644 --- a/demo/test.c +++ b/demo/test.c @@ -1,5 +1,7 @@ /* TFM demo program */ #include +#include +#include void draw(fp_int *a) { @@ -27,14 +29,17 @@ static ulong64 TIMFUNC (void) asm ("rdtsc":"=A"(a)); return a; #elif defined(__i386__) || defined(__x86_64__) - ulong64 a; - __asm__ __volatile__ ("rdtsc\nmovl %%eax,%0\nmovl %%edx,4+%0\n"::"m"(a):"%eax","%edx"); - return a; - #elif defined(TFM_PPC32) + /* version from http://www.mcs.anl.gov/~kazutomo/rdtsc.html + * the old code always got a warning issued by gcc, clang did not complain... + */ + unsigned hi, lo; + __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi)); + return ((ulong64)lo)|( ((ulong64)hi)<<32); + #elif defined(TFM_PPC32) unsigned long a, b; __asm__ __volatile__ ("mftbu %1 \nmftb %0\n":"=r"(a), "=r"(b)); return (((ulong64)b) << 32ULL) | ((ulong64)a); - #elif defined(TFM_AVR32) + #elif defined(TFM_AVR32) FILE *in; char buf[20]; in = fopen("/sys/devices/system/cpu/cpu0/pccycles", "r"); @@ -77,7 +82,7 @@ int main(void) srand(time(NULL)); printf("TFM Ident string:\n%s\n\n", fp_ident()); - fp_zero(&b); fp_zero(&c); fp_zero(&d); fp_zero(&e); fp_zero(&f); + fp_zero(&b); fp_zero(&c); fp_zero(&d); fp_zero(&e); fp_zero(&f); fp_zero(&a); draw(&a); /* test set and simple shifts */ @@ -86,7 +91,7 @@ int main(void) for (n = 0; n <= DIGIT_BIT; n++) { fp_mul_2(&a, &a); printf("(%d) ", fp_count_bits(&a)); draw(&a); - + } for (n = 0; n <= (DIGIT_BIT + 1); n++) { fp_div_2(&a, &a); @@ -163,7 +168,7 @@ int main(void) fp_read_radix(&d, "123456789123", 16); for (n = 0; n < 1000000; n++) { - fp_add_d(&d, 1, &d); fp_sqrmod(&d, &a, &d); + fp_add_d(&d, 1, &d); fp_sqrmod(&d, &a, &d); fp_mul(&d, &b, &c); fp_montgomery_reduce(&c, &a, fp); if (fp_cmp(&c, &d) != FP_EQ) { @@ -185,7 +190,7 @@ int main(void) fp_read_radix(&d, "123456789123", 16); for (n = 0; n < 1000000; n++) { - fp_add_d(&d, 1, &d); fp_sqrmod(&d, &a, &d); + fp_add_d(&d, 1, &d); fp_sqrmod(&d, &a, &d); fp_mul(&d, &b, &c); fp_montgomery_reduce(&c, &a, fp); if (fp_cmp(&c, &d) != FP_EQ) { @@ -515,80 +520,80 @@ monttime: fp_montgomery_setup(&a, &fp); fp_sub_d(&a, 3, &b); - fp_sqr(&b, &b); - fp_copy(&b, &c); - fp_copy(&b, &d); + fp_sqr(&b, &b); + fp_copy(&b, &c); + fp_copy(&b, &d); t2 = -1; for (ix = 0; ix < 100; ++ix) { t1 = TIMFUNC(); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); - fp_montgomery_reduce(&c, &a, &fp); - fp_montgomery_reduce(&d, &a, &fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); + fp_montgomery_reduce(&c, &a, fp); + fp_montgomery_reduce(&d, &a, fp); t2 = (TIMFUNC() - t1)>>6; - fp_copy(&b, &c); - fp_copy(&b, &d); + fp_copy(&b, &c); + fp_copy(&b, &d); if (t1>1; - fp_copy(&b, &c); - fp_copy(&b, &d); + fp_copy(&b, &c); + fp_copy(&b, &d); if (t1