Select Git revision
product-01.c
product-01.c 1.10 KiB
#include "product.h"
#include "sum.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
void product(uintN_t a, uintN_t b, uintN_t result){
uintN_t tmp;
for (int i = 0; i < N; i++) {
tmp[i] = 0;
}
volatile int test = 0;
for(uint64_t i = 0; i < N * 64; i++){
if(b[i / 64] & ((uint64_t) 1 << (i & 0x3F))){
tmp[(i / 64)] = a[0] << (i & 0x3F);
printf("weewoo %lx\n",(i & 0x3F));
printf("a0 %lx\n", a[0]);
printf("differnez %ld\n", (64 - (i & 0x3F)));
printf("rshift %lx\n", (uint64_t) a[0] >> (64 - (i & 0x3F)));
int tomp = 64 - (i & 0x3F);
printf("topm: %d\n", tomp);
printf("rshift %lx\n", ((uint64_t) 5) >> (64 - (test)));
printf("rshift %lx\n", ((uint64_t) 5) >> tomp);
printf("rshift_sanity %lx\n", ((uint64_t) 5) >> (64 - 0));
for (int j = 1; j < N; j++) {
if(j + (i / 64) >= N) break;
tmp[j + (i / 64)] = a[j] << (i & 0x3F)| a[j-1] >> (64 - (i & 0x3F));
}
sum(tmp, result, result);
for (int i = 0; i < N; i++) {
tmp[i] = 0;
}
printf("sum\n");
for(int i = N-1; i >= 0; i--){
printf("%016lX ", result[i]);
}
printf("\n");
}
}
}