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
|
||||
|
||||
CC = gcc
|
||||
CFLAGS = -O3
|
||||
CFLAGS = -O3 -Wno-format-overflow
|
||||
LIBS = -lm
|
||||
LFLAGS = -L.
|
||||
# Link against the riscv-isa-sim version of SoftFloat rather than
|
||||
|
@ -29,19 +29,23 @@ typedef union dp {
|
||||
|
||||
int opSize = 0;
|
||||
|
||||
void long2binstr(long val, char *str, int bits) {
|
||||
int i;
|
||||
long masked;
|
||||
void long2binstr(unsigned long val, char *str, int bits) {
|
||||
int i, shamt;
|
||||
unsigned long mask, masked;
|
||||
|
||||
if (val == 0) { // just return zero
|
||||
str[0] = '0';
|
||||
str[1] = 0;
|
||||
} else {
|
||||
for (i=0; i<bits && val != 0; i++) {
|
||||
masked = val & ~(1 << (bits-i-1)); // mask off the bit
|
||||
// printf("long2binstr %lx %s %d\n", val, str, bits);
|
||||
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';
|
||||
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;
|
||||
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;
|
||||
long exp, fract;
|
||||
char sign;
|
||||
char sci[80], fractstr[80];
|
||||
char sci[300], fractstr[200];
|
||||
float32_t temp;
|
||||
|
||||
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 == 31 && fract == 0) sprintf(sci, "%cinf", sign);
|
||||
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.
|
||||
}
|
||||
|
||||
@ -78,7 +82,7 @@ void printF32(char *msg, float32_t f) {
|
||||
sp conv;
|
||||
long exp, fract;
|
||||
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
|
||||
|
||||
@ -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 == 255 && fract == 0) sprintf(sci, "%cinf", sign);
|
||||
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: ", msg);
|
||||
printf("0x%04x", (conv.v >> 16));
|
||||
printf("_");
|
||||
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",
|
||||
// msg, conv.v, conv.f, sci, exp, fract);
|
||||
}
|
||||
@ -107,7 +111,7 @@ void printF64(char *msg, float64_t f) {
|
||||
long exp, fract;
|
||||
long mask;
|
||||
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
|
||||
|
||||
@ -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 == 2047 && fract == 0) sprintf(sci, "%cinf", sign);
|
||||
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: ", msg);
|
||||
printf("0x%04x", (conv.v >> 48));
|
||||
printf("0x%04lx", (conv.v >> 48));
|
||||
printf("_");
|
||||
printf("%04x", (conv.v >> 32) & 0xFFFF);
|
||||
printf("%04lx", (conv.v >> 32) & 0xFFFF);
|
||||
printf("_");
|
||||
printf("%04x", (conv.v >> 16));
|
||||
printf("%04lx", (conv.v >> 16) & 0xFFFF);
|
||||
printf("_");
|
||||
printf("%04x", (conv.v & 0xFFFF));
|
||||
printf(" = %lg = %s: Biased Exp %d Fract 0x%lx\n", conv.d, sci, exp, fract);
|
||||
printf("%04lx", (conv.v & 0xFFFF));
|
||||
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",
|
||||
// msg, conv.v, conv.d, sci, exp, fract);
|
||||
}
|
||||
@ -204,7 +208,7 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
uint64_t xn, yn, zn;
|
||||
char op1, op2;
|
||||
char cmd[80];
|
||||
char cmd[200];
|
||||
|
||||
softfloatInit();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user