Skip to content
Snippets Groups Projects
Select Git revision
  • 2023ss
  • 2025ss default
  • 2024ss
  • 2022ss
  • 2021ss
  • 2020ss
  • 2019ss
  • 2018ss
8 results

product-01.c

Blame
  • 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");
    		}
    	}
    }