/* Encodes block data and returns k parameter for block */ int encode(char *input_data, int *output_data, int size) { int n = 0; int k = 0; int z = 0; int bit_mask = 0; char num_bits = 0; /* Clear buf */ memset(output_data, 0x00, size); /* Get k parameter given average sum squared error (input_data) */ k = get_k(get_sse(input_data, size)/size); write_byte((char)k, "Output/compressed.out"); for(n=0;n<size;n++) { /* Get last k bits */ bit_mask = 0xFF >> (8-k); output_data[n] = (int)input_data[n]; output_data[n] &= bit_mask; /* Add |1| after kth bit */ output_data[n] |= (0x01 << k); /* Buffer error and get last Z remaining bits */ bit_mask = 0xFF << k; z = (int)input_data[n]; z &= bit_mask; /* Align Z with bit 0 */ z >>= k; /* How many bits to write */ num_bits = k+1+z+1; /* Prefix sign bit and Z amount of zeroes */ output_data[n] |= (0x02 << (k+z)); /* Start putting bits from sign bit */ bit_mask = 0x01 << (num_bits-1); /* Code generated, write out */ while(num_bits > 0){ put_bit(output_data[n] & bit_mask); bit_mask >>= 1; num_bits--; } } return k; }
int main(int argc, char *argv[]){ #ifdef FORCE char buffer[8192], *p, *q; int length; #endif if (argc == 1) return 0; switch (argv[1][0]) { case '0' : /* for Makefile */ #ifdef FORCE printf("CORE=%s\n", CORENAME); #else #if defined(INTEL_AMD) || defined(POWER) || defined(__mips__) || defined(__arm__) || defined(__aarch64__) printf("CORE=%s\n", get_corename()); #endif #endif #ifdef FORCE printf("LIBCORE=%s\n", LIBNAME); #else printf("LIBCORE="); get_libname(); printf("\n"); #endif printf("NUM_CORES=%d\n", get_num_cores()); #if defined(__arm__) && !defined(FORCE) get_features(); #endif #ifdef INTEL_AMD #ifndef FORCE get_sse(); #else sprintf(buffer, "%s", ARCHCONFIG); p = &buffer[0]; while (*p) { if ((*p == '-') && (*(p + 1) == 'D')) { p += 2; while ((*p != ' ') && (*p != '\0')) { if (*p == '=') { printf("="); p ++; while ((*p != ' ') && (*p != '\0')) { printf("%c", *p); p ++; } } else { printf("%c", *p); p ++; if ((*p == ' ') || (*p =='\0')) printf("=1"); } } printf("\n"); } else p ++; } #endif #endif #ifdef MAKE_NB_JOBS printf("MAKE += -j %d\n", MAKE_NB_JOBS); #elif NO_PARALLEL_MAKE==1 printf("MAKE += -j 1\n"); #else #ifndef OS_WINDOWS printf("MAKE += -j %d\n", get_num_cores()); #endif #endif break; case '1' : /* For config.h */ #ifdef FORCE sprintf(buffer, "%s -DCORE_%s\n", ARCHCONFIG, CORENAME); p = &buffer[0]; while (*p) { if ((*p == '-') && (*(p + 1) == 'D')) { p += 2; printf("#define "); while ((*p != ' ') && (*p != '\0')) { if (*p == '=') { printf(" "); p ++; while ((*p != ' ') && (*p != '\0')) { printf("%c", *p); p ++; } } else { printf("%c", *p); p ++; } } printf("\n"); } else p ++; } #else get_cpuconfig(); #endif #ifdef FORCE printf("#define CHAR_CORENAME \"%s\"\n", CORENAME); #else #if defined(INTEL_AMD) || defined(POWER) || defined(__mips__) || defined(__arm__) || defined(__aarch64__) printf("#define CHAR_CORENAME \"%s\"\n", get_corename()); #endif #endif break; case '2' : /* SMP */ if (get_num_cores() > 1) printf("SMP=1\n"); break; } fflush(stdout); return 0; }