forked from Github_Repos/cvw
Cleaned up printing and warnings in fpcalc.c
This commit is contained in:
parent
99a0e2d73d
commit
bffd417567
@ -1,7 +1,7 @@
|
|||||||
# Makefile
|
# Makefile
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
CFLAGS = -O3
|
CFLAGS = -O3 -Wno-format-overflow
|
||||||
LIBS = -lm
|
LIBS = -lm
|
||||||
LFLAGS = -L.
|
LFLAGS = -L.
|
||||||
# Link against the riscv-isa-sim version of SoftFloat rather than
|
# Link against the riscv-isa-sim version of SoftFloat rather than
|
||||||
|
@ -29,19 +29,23 @@ typedef union dp {
|
|||||||
|
|
||||||
int opSize = 0;
|
int opSize = 0;
|
||||||
|
|
||||||
void long2binstr(long val, char *str, int bits) {
|
void long2binstr(unsigned long val, char *str, int bits) {
|
||||||
int i;
|
int i, shamt;
|
||||||
long masked;
|
unsigned long mask, masked;
|
||||||
|
|
||||||
if (val == 0) { // just return zero
|
if (val == 0) { // just return zero
|
||||||
str[0] = '0';
|
str[0] = '0';
|
||||||
str[1] = 0;
|
str[1] = 0;
|
||||||
} else {
|
} else {
|
||||||
for (i=0; i<bits && val != 0; i++) {
|
// printf("long2binstr %lx %s %d\n", val, str, bits);
|
||||||
masked = val & ~(1 << (bits-i-1)); // mask off the bit
|
for (i=0; (i<bits) && (val != 0); i++) {
|
||||||
|
shamt = bits - i - 1;
|
||||||
|
mask = 1;
|
||||||
|
mask = (mask << shamt);
|
||||||
|
masked = val & ~mask; // mask off the bit
|
||||||
if (masked != val) str[i] = '1';
|
if (masked != val) str[i] = '1';
|
||||||
else str[i] = '0';
|
else str[i] = '0';
|
||||||
//printf(" Considering %d masked %d str[%d] %c\n", val, masked, i, str[i]);
|
// printf(" Considering %016lx mask %016lx (%d) masked %016lx str[%d] %c\n", val, mask, shamt, masked, i, str[i]);
|
||||||
val = masked;
|
val = masked;
|
||||||
if (!val) str[i+1] = 0; // terminate when out of nonzero digits
|
if (!val) str[i+1] = 0; // terminate when out of nonzero digits
|
||||||
}
|
}
|
||||||
@ -53,7 +57,7 @@ void printF16(char *msg, float16_t f) {
|
|||||||
sp convf;
|
sp convf;
|
||||||
long exp, fract;
|
long exp, fract;
|
||||||
char sign;
|
char sign;
|
||||||
char sci[80], fractstr[80];
|
char sci[300], fractstr[200];
|
||||||
float32_t temp;
|
float32_t temp;
|
||||||
|
|
||||||
convh.v = f.v; // use union to convert between hexadecimal and floating-point views
|
convh.v = f.v; // use union to convert between hexadecimal and floating-point views
|
||||||
@ -68,9 +72,9 @@ void printF16(char *msg, float16_t f) {
|
|||||||
else if (exp == 0 && fract != 0) sprintf(sci, "Denorm: %c0.%s x 2^-14", sign, fractstr);
|
else if (exp == 0 && fract != 0) sprintf(sci, "Denorm: %c0.%s x 2^-14", sign, fractstr);
|
||||||
else if (exp == 31 && fract == 0) sprintf(sci, "%cinf", sign);
|
else if (exp == 31 && fract == 0) sprintf(sci, "%cinf", sign);
|
||||||
else if (exp == 31 && fract != 0) sprintf(sci, "NaN Payload: %c%s", sign, fractstr);
|
else if (exp == 31 && fract != 0) sprintf(sci, "NaN Payload: %c%s", sign, fractstr);
|
||||||
else sprintf(sci, "%c1.%s x 2^%d", sign, fractstr, exp-15);
|
else sprintf(sci, "%c1.%s x 2^%ld", sign, fractstr, exp-15);
|
||||||
|
|
||||||
printf ("%s: 0x%04x = %g = %s: Biased Exp %d Fract 0x%lx\n",
|
printf ("%s: 0x%04x = %g = %s: Biased Exp %ld Fract 0x%lx\n",
|
||||||
msg, convh.v, convf.f, sci, exp, fract); // no easy way to print half prec.
|
msg, convh.v, convf.f, sci, exp, fract); // no easy way to print half prec.
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +82,7 @@ void printF32(char *msg, float32_t f) {
|
|||||||
sp conv;
|
sp conv;
|
||||||
long exp, fract;
|
long exp, fract;
|
||||||
char sign;
|
char sign;
|
||||||
char sci[80], fractstr[80];
|
char sci[200], fractstr[200];
|
||||||
|
|
||||||
conv.v = f.v; // use union to convert between hexadecimal and floating-point views
|
conv.v = f.v; // use union to convert between hexadecimal and floating-point views
|
||||||
|
|
||||||
@ -90,14 +94,14 @@ void printF32(char *msg, float32_t f) {
|
|||||||
else if (exp == 0 && fract != 0) sprintf(sci, "Denorm: %c0.%s x 2^-126", sign, fractstr);
|
else if (exp == 0 && fract != 0) sprintf(sci, "Denorm: %c0.%s x 2^-126", sign, fractstr);
|
||||||
else if (exp == 255 && fract == 0) sprintf(sci, "%cinf", sign);
|
else if (exp == 255 && fract == 0) sprintf(sci, "%cinf", sign);
|
||||||
else if (exp == 255 && fract != 0) sprintf(sci, "NaN Payload: %c%s", sign, fractstr);
|
else if (exp == 255 && fract != 0) sprintf(sci, "NaN Payload: %c%s", sign, fractstr);
|
||||||
else sprintf(sci, "%c1.%s x 2^%d", sign, fractstr, exp-127);
|
else sprintf(sci, "%c1.%s x 2^%ld", sign, fractstr, exp-127);
|
||||||
|
|
||||||
//printf ("%s: 0x%08x = %g\n", msg, conv.v, conv.f);
|
//printf ("%s: 0x%08x = %g\n", msg, conv.v, conv.f);
|
||||||
printf("%s: ", msg);
|
printf("%s: ", msg);
|
||||||
printf("0x%04x", (conv.v >> 16));
|
printf("0x%04x", (conv.v >> 16));
|
||||||
printf("_");
|
printf("_");
|
||||||
printf("%04x", (conv.v & 0xFF));
|
printf("%04x", (conv.v & 0xFF));
|
||||||
printf(" = %g = %s: Biased Exp %d Fract 0x%lx\n", conv.f, sci, exp, fract);
|
printf(" = %g = %s: Biased Exp %ld Fract 0x%lx\n", conv.f, sci, exp, fract);
|
||||||
//printf ("%s: 0x%08x = %g = %s: Biased Exp %d Fract 0x%lx\n",
|
//printf ("%s: 0x%08x = %g = %s: Biased Exp %d Fract 0x%lx\n",
|
||||||
// msg, conv.v, conv.f, sci, exp, fract);
|
// msg, conv.v, conv.f, sci, exp, fract);
|
||||||
}
|
}
|
||||||
@ -107,7 +111,7 @@ void printF64(char *msg, float64_t f) {
|
|||||||
long exp, fract;
|
long exp, fract;
|
||||||
long mask;
|
long mask;
|
||||||
char sign;
|
char sign;
|
||||||
char sci[80], fractstr[80];
|
char sci[200], fractstr[200];
|
||||||
|
|
||||||
conv.v = f.v; // use union to convert between hexadecimal and floating-point views
|
conv.v = f.v; // use union to convert between hexadecimal and floating-point views
|
||||||
|
|
||||||
@ -120,18 +124,18 @@ void printF64(char *msg, float64_t f) {
|
|||||||
else if (exp == 0 && fract != 0) sprintf(sci, "Denorm: %c0.%s x 2^-1022", sign, fractstr);
|
else if (exp == 0 && fract != 0) sprintf(sci, "Denorm: %c0.%s x 2^-1022", sign, fractstr);
|
||||||
else if (exp == 2047 && fract == 0) sprintf(sci, "%cinf", sign);
|
else if (exp == 2047 && fract == 0) sprintf(sci, "%cinf", sign);
|
||||||
else if (exp == 2047 && fract != 0) sprintf(sci, "NaN Payload: %c%s", sign, fractstr);
|
else if (exp == 2047 && fract != 0) sprintf(sci, "NaN Payload: %c%s", sign, fractstr);
|
||||||
else sprintf(sci, "%c1.%s x 2^%d", sign, fractstr, exp-1023);
|
else sprintf(sci, "%c1.%s x 2^%ld", sign, fractstr, exp-1023);
|
||||||
|
|
||||||
//printf ("%s: 0x%016lx = %lg\n", msg, conv.v, conv.d);
|
//printf ("%s: 0x%016lx = %lg\n", msg, conv.v, conv.d);
|
||||||
printf("%s: ", msg);
|
printf("%s: ", msg);
|
||||||
printf("0x%04x", (conv.v >> 48));
|
printf("0x%04lx", (conv.v >> 48));
|
||||||
printf("_");
|
printf("_");
|
||||||
printf("%04x", (conv.v >> 32) & 0xFFFF);
|
printf("%04lx", (conv.v >> 32) & 0xFFFF);
|
||||||
printf("_");
|
printf("_");
|
||||||
printf("%04x", (conv.v >> 16));
|
printf("%04lx", (conv.v >> 16) & 0xFFFF);
|
||||||
printf("_");
|
printf("_");
|
||||||
printf("%04x", (conv.v & 0xFFFF));
|
printf("%04lx", (conv.v & 0xFFFF));
|
||||||
printf(" = %lg = %s: Biased Exp %d Fract 0x%lx\n", conv.d, sci, exp, fract);
|
printf(" = %lg = %s: Biased Exp %ld Fract 0x%lx\n", conv.d, sci, exp, fract);
|
||||||
//printf ("%s: 0x%016lx = %lg = %s: Biased Exp %d Fract 0x%lx\n",
|
//printf ("%s: 0x%016lx = %lg = %s: Biased Exp %d Fract 0x%lx\n",
|
||||||
// msg, conv.v, conv.d, sci, exp, fract);
|
// msg, conv.v, conv.d, sci, exp, fract);
|
||||||
}
|
}
|
||||||
@ -204,7 +208,7 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
uint64_t xn, yn, zn;
|
uint64_t xn, yn, zn;
|
||||||
char op1, op2;
|
char op1, op2;
|
||||||
char cmd[80];
|
char cmd[200];
|
||||||
|
|
||||||
softfloatInit();
|
softfloatInit();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user