mirror of
				https://github.com/netwide-assembler/nasm.git
				synced 2025-10-10 00:25:06 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <inttypes.h>
 | |
| #include <stdio.h>
 | |
| 
 | |
| int main(int argc, char *argv[])
 | |
| {
 | |
|     /* Polynomial in bit-reversed notation */
 | |
|     uint64_t poly;
 | |
|     uint64_t crctab[256], v;
 | |
|     int i, j;
 | |
| 
 | |
|     poly = strtoumax(argv[1], NULL, 0);
 | |
| 
 | |
|     printf("/* C */\n");
 | |
|     printf("static const uint64_t crc64_tab[256] = {\n");
 | |
|     for (i = 0; i < 256; i++) {
 | |
| 	v = i;
 | |
| 	for (j = 0; j < 8; j++)
 | |
| 	    v = (v >> 1) ^ ((v & 1) ? poly : 0);
 | |
| 	crctab[i] = v;
 | |
|     }
 | |
| 
 | |
|     for (i = 0; i < 256; i += 2) {
 | |
| 	printf("    /* %02x */ UINT64_C(0x%016"PRIx64"), "
 | |
| 	       "UINT64_C(0x%016"PRIx64")%s\n",
 | |
| 	       i, crctab[i], crctab[i+1], (i == 254) ? "" : ",");
 | |
|     }
 | |
|     printf("};\n\n");
 | |
| 
 | |
|     printf("# perl\n");
 | |
|     printf("@crc64_tab = (\n");
 | |
|     for (i = 0; i < 256; i += 2) {
 | |
| 	printf("    [0x%08"PRIx32", 0x%08"PRIx32"], "
 | |
| 	       "[0x%08"PRIx32", 0x%08"PRIx32"]%-1s    # %02x\n",
 | |
| 	       (uint32_t)(crctab[i] >> 32),
 | |
| 	       (uint32_t)(crctab[i]),
 | |
| 	       (uint32_t)(crctab[i+1] >> 32),
 | |
| 	       (uint32_t)(crctab[i+1]),
 | |
| 	       (i == 254) ? "" : ",",
 | |
| 	       i);
 | |
|     }
 | |
|     printf(");\n");
 | |
| 
 | |
|     return 0;
 | |
| }
 |