diff --git a/h/con_float b/h/con_float index 903c2ce5b..ad959d34b 100644 --- a/h/con_float +++ b/h/con_float @@ -5,7 +5,7 @@ /* $Id$ */ -/* +/* #define CODE_GENERATOR for code generator #define CODE_EXPANDER for code expander @@ -20,9 +20,9 @@ Unfortunately, the IEEE standard does not define the byte-order. depends on the #defines - FL_MSL_AT_LOW_ADDRESS 1 if most significant long is at low address - FL_MSW_AT_LOW_ADDRESS 1 if most significant word is at low address - FL_MSB_AT_LOW_ADDRESS 1 if most significant byte is at low address + FL_MSL_AT_LOW_ADDRESS 1 if most significant long is at low address + FL_MSW_AT_LOW_ADDRESS 1 if most significant word is at low address + FL_MSB_AT_LOW_ADDRESS 1 if most significant byte is at low address */ #ifdef IEEEFLOAT #define USE_FLT @@ -37,47 +37,57 @@ #define FL_MSB_AT_LOW_ADDRESS 0 #endif -#define I0 ((FL_MSL_AT_LOW_ADDRESS ? 0 : 4) + (FL_MSW_AT_LOW_ADDRESS ? 0 : 2) \ - + (FL_MSB_AT_LOW_ADDRESS ? 0 : 1)) -#define I1 ((FL_MSL_AT_LOW_ADDRESS ? 0 : 4) + (FL_MSW_AT_LOW_ADDRESS ? 0 : 2) \ - + (FL_MSB_AT_LOW_ADDRESS ? 1 : 0)) -#define I2 ((FL_MSL_AT_LOW_ADDRESS ? 0 : 4) + (FL_MSW_AT_LOW_ADDRESS ? 2 : 0) \ - + (FL_MSB_AT_LOW_ADDRESS ? 0 : 1)) -#define I3 ((FL_MSL_AT_LOW_ADDRESS ? 0 : 4) + (FL_MSW_AT_LOW_ADDRESS ? 2 : 0) \ - + (FL_MSB_AT_LOW_ADDRESS ? 1 : 0)) -#define I4 ((FL_MSL_AT_LOW_ADDRESS ? 4 : 0) + (FL_MSW_AT_LOW_ADDRESS ? 0 : 2) \ - + (FL_MSB_AT_LOW_ADDRESS ? 0 : 1)) -#define I5 ((FL_MSL_AT_LOW_ADDRESS ? 4 : 0) + (FL_MSW_AT_LOW_ADDRESS ? 0 : 2) \ - + (FL_MSB_AT_LOW_ADDRESS ? 1 : 0)) -#define I6 ((FL_MSL_AT_LOW_ADDRESS ? 4 : 0) + (FL_MSW_AT_LOW_ADDRESS ? 2 : 0) \ - + (FL_MSB_AT_LOW_ADDRESS ? 0 : 1)) -#define I7 ((FL_MSL_AT_LOW_ADDRESS ? 4 : 0) + (FL_MSW_AT_LOW_ADDRESS ? 2 : 0) \ - + (FL_MSB_AT_LOW_ADDRESS ? 1 : 0)) +#define I0 \ + ((FL_MSL_AT_LOW_ADDRESS ? 0 : 4) + (FL_MSW_AT_LOW_ADDRESS ? 0 : 2) \ + + (FL_MSB_AT_LOW_ADDRESS ? 0 : 1)) +#define I1 \ + ((FL_MSL_AT_LOW_ADDRESS ? 0 : 4) + (FL_MSW_AT_LOW_ADDRESS ? 0 : 2) \ + + (FL_MSB_AT_LOW_ADDRESS ? 1 : 0)) +#define I2 \ + ((FL_MSL_AT_LOW_ADDRESS ? 0 : 4) + (FL_MSW_AT_LOW_ADDRESS ? 2 : 0) \ + + (FL_MSB_AT_LOW_ADDRESS ? 0 : 1)) +#define I3 \ + ((FL_MSL_AT_LOW_ADDRESS ? 0 : 4) + (FL_MSW_AT_LOW_ADDRESS ? 2 : 0) \ + + (FL_MSB_AT_LOW_ADDRESS ? 1 : 0)) +#define I4 \ + ((FL_MSL_AT_LOW_ADDRESS ? 4 : 0) + (FL_MSW_AT_LOW_ADDRESS ? 0 : 2) \ + + (FL_MSB_AT_LOW_ADDRESS ? 0 : 1)) +#define I5 \ + ((FL_MSL_AT_LOW_ADDRESS ? 4 : 0) + (FL_MSW_AT_LOW_ADDRESS ? 0 : 2) \ + + (FL_MSB_AT_LOW_ADDRESS ? 1 : 0)) +#define I6 \ + ((FL_MSL_AT_LOW_ADDRESS ? 4 : 0) + (FL_MSW_AT_LOW_ADDRESS ? 2 : 0) \ + + (FL_MSB_AT_LOW_ADDRESS ? 0 : 1)) +#define I7 \ + ((FL_MSL_AT_LOW_ADDRESS ? 4 : 0) + (FL_MSW_AT_LOW_ADDRESS ? 2 : 0) \ + + (FL_MSB_AT_LOW_ADDRESS ? 1 : 0)) #ifndef USE_FLT -static int -float_cst(str, sz, buf) - char *str, *buf; - int sz; +static int float_cst(str, sz, buf) char *str, *buf; +int sz; { int i; - char *p; + char* p; float fl; double f; double atof(); - if (sz!= 4 && sz!= 8) { + if (sz != 4 && sz != 8) + { return 1; } f = atof(str); - if (sz == 4) { + if (sz == 4) + { fl = f; - p = (char *) &fl; + p = (char*)&fl; } - else { - p = (char *) &f; + else + { + p = (char*)&f; } - for (i = sz; i; i--) { + for (i = sz; i; i--) + { *buf++ = *p++; } return 0; @@ -87,89 +97,105 @@ float_cst(str, sz, buf) #include #include -int -float_cst(str, sz, buf) - char *str, *buf; - int sz; +int float_cst(str, sz, buf) char *str, *buf; +int sz; { int overflow = 0; flt_arith e; - if (sz!= 4 && sz!= 8) { + if (sz != 4 && sz != 8) + { return 1; } flt_str2flt(str, &e); #ifdef IEEEFLOAT - if (sz == 4) { + if (sz == 4) + { #endif #ifdef PDPFLOAT e.flt_exp += 129; #else - e.flt_exp += 127; + e.flt_exp += 127; #endif - if (e.flt_mantissa.flt_h_32 == 0) e.flt_exp = 0; + if (e.flt_mantissa.flt_h_32 == 0) + e.flt_exp = 0; #ifdef IEEEFLOAT - if (e.flt_mantissa.flt_h_32 & 0x80) { + if (e.flt_mantissa.flt_h_32 & 0x80) + { /* rounding */ - if ((e.flt_mantissa.flt_h_32 & 0xffffff00) == 0xffffff00) { + if ((e.flt_mantissa.flt_h_32 & 0xffffff00) == 0xffffff00) + { e.flt_exp++; e.flt_mantissa.flt_h_32 = 0x80000000; } - else { + else + { e.flt_mantissa.flt_h_32 += 0x80; } } - if (e.flt_exp >= 255) { + if (e.flt_exp >= 255) + { overflow = 1; e.flt_exp = 255; e.flt_mantissa.flt_h_32 = e.flt_mantissa.flt_l_32 = 0; } - if (e.flt_exp <= 0) { + if (e.flt_exp <= 0) + { flt_b64_sft(&(e.flt_mantissa), 1); - if (e.flt_exp < 0) { + if (e.flt_exp < 0) + { flt_b64_sft(&(e.flt_mantissa), -e.flt_exp); e.flt_exp = 0; } } #endif #ifndef IEEEFLOAT - if (sz == 4 && (e.flt_mantissa.flt_h_32 & 0x80)) { + if (sz == 4 && (e.flt_mantissa.flt_h_32 & 0x80)) + { /* rounding */ - if ((e.flt_mantissa.flt_h_32 & 0xffffff00) == 0xffffff00) { + if ((e.flt_mantissa.flt_h_32 & 0xffffff00) == 0xffffff00) + { e.flt_exp++; e.flt_mantissa.flt_h_32 = 0x80000000; } - else { + else + { e.flt_mantissa.flt_h_32 += 0x80; } } - if (sz == 8 && (e.flt_mantissa.flt_l_32 & 0x80)) { + if (sz == 8 && (e.flt_mantissa.flt_l_32 & 0x80)) + { /* rounding */ - if ((e.flt_mantissa.flt_l_32 & 0xffffff00) == 0xffffff00) { + if ((e.flt_mantissa.flt_l_32 & 0xffffff00) == 0xffffff00) + { e.flt_mantissa.flt_l_32 = 0; - if (e.flt_mantissa.flt_h_32 == 0xffffffff) { + if (e.flt_mantissa.flt_h_32 == 0xffffffff) + { e.flt_exp++; e.flt_mantissa.flt_h_32 = 0x80000000; } - else e.flt_mantissa.flt_h_32++; + else + e.flt_mantissa.flt_h_32++; } - else { + else + { e.flt_mantissa.flt_l_32 += 0x80; } } - if (e.flt_exp > 255) { + if (e.flt_exp > 255) + { overflow = 1; e.flt_exp = 255; e.flt_mantissa.flt_h_32 = e.flt_mantissa.flt_l_32 = 0xffffffff; } #endif buf[I0] = (e.flt_sign << 7) | (e.flt_exp >> 1); - buf[I1] = ((e.flt_exp&1) << 7) | - ((e.flt_mantissa.flt_h_32 & 0x7fffffff) >> 24); + buf[I1] = ((e.flt_exp & 1) << 7) | ((e.flt_mantissa.flt_h_32 & 0x7fffffff) >> 24); buf[I2] = e.flt_mantissa.flt_h_32 >> 16; buf[I3] = e.flt_mantissa.flt_h_32 >> 8; #ifndef IEEEFLOAT - if (sz == 8) { + if (sz == 8) + { buf[I4] = e.flt_mantissa.flt_h_32; buf[I5] = e.flt_mantissa.flt_l_32 >> 24; buf[I6] = e.flt_mantissa.flt_l_32 >> 16; @@ -181,37 +207,47 @@ float_cst(str, sz, buf) flt_b64_sft(&(e.flt_mantissa), -24); #ifdef IEEEFLOAT } - else { + else + { e.flt_exp += 1023; - if (e.flt_mantissa.flt_h_32 == 0) e.flt_exp = 0; - if (e.flt_mantissa.flt_l_32 & 0x400) { + if (e.flt_mantissa.flt_h_32 == 0) + e.flt_exp = 0; + if (e.flt_mantissa.flt_l_32 & 0x400) + { /* rounding */ - if ((e.flt_mantissa.flt_l_32 & 0xfffff800) == 0xfffff800) { + if ((e.flt_mantissa.flt_l_32 & 0xfffff800) == 0xfffff800) + { e.flt_mantissa.flt_l_32 = 0; - if (e.flt_mantissa.flt_h_32 == 0xffffffff) { + if (e.flt_mantissa.flt_h_32 == 0xffffffff) + { e.flt_exp++; e.flt_mantissa.flt_h_32 = 0x80000000; } - else e.flt_mantissa.flt_h_32++; + else + e.flt_mantissa.flt_h_32++; } - else { + else + { e.flt_mantissa.flt_l_32 += 0x400; } } - if (e.flt_exp >= 2047) { + if (e.flt_exp >= 2047) + { overflow = 1; e.flt_exp = 2047; e.flt_mantissa.flt_h_32 = e.flt_mantissa.flt_l_32 = 0; } - if (e.flt_exp <= 0) { + if (e.flt_exp <= 0) + { flt_b64_sft(&(e.flt_mantissa), 1); - if (e.flt_exp < 0) { + if (e.flt_exp < 0) + { flt_b64_sft(&(e.flt_mantissa), -e.flt_exp); e.flt_exp = 0; } } buf[I0] = (e.flt_sign << 7) | (e.flt_exp >> 4); - buf[I1] = ((e.flt_exp & 017)<< 4) | ((e.flt_mantissa.flt_h_32 >> 27) & 017); + buf[I1] = ((e.flt_exp & 017) << 4) | ((e.flt_mantissa.flt_h_32 >> 27) & 017); buf[I2] = e.flt_mantissa.flt_h_32 >> 19; buf[I3] = e.flt_mantissa.flt_h_32 >> 11; buf[I4] = e.flt_mantissa.flt_h_32 >> 3; @@ -221,15 +257,17 @@ float_cst(str, sz, buf) flt_b64_sft(&(e.flt_mantissa), -53); } #endif -#if ! FL_MSL_AT_LOW_ADDRESS - if (sz == 4) { +#if !FL_MSL_AT_LOW_ADDRESS + if (sz == 4) + { buf[I4] = buf[I0]; buf[I5] = buf[I1]; buf[I6] = buf[I2]; buf[I7] = buf[I3]; } #endif - if (overflow) { + if (overflow) + { return 2; } return 0; @@ -243,16 +281,19 @@ con_float() int rval = float_cst(str, (int)argval, buf); int i; - if (rval == 1) { - fprintf(stderr,"float constant size = %d\n",(int)argval); + if (rval == 1) + { + fprintf(stderr, "float constant size = %d\n", (int)argval); fatal("bad fcon size"); } - fprintf(codefile,"!float %s sz %d\n", str, (int)argval); - if (rval == 2) { + fprintf(codefile, "!float %s sz %d\n", str, (int)argval); + if (rval == 2) + { fprintf(stderr, "Warning: overflow in floating point constant %s\n", str); } fprintf(codefile, ".data1 0%o", buf[0] & 0377); - for (i = 1; i < (int)argval; i++) { + for (i = 1; i < (int)argval; i++) + { fprintf(codefile, ",0%o", buf[i] & 0377); } putc('\n', codefile); @@ -260,19 +301,20 @@ con_float() #endif /* CODE_GENERATOR */ #ifdef CODE_EXPANDER -con_float(str, argval) - char *str; - arith argval; +con_float(str, argval) char* str; +arith argval; { char buf[8]; int rval = float_cst(str, (int)argval, buf); int i; - if (rval == 1) { + if (rval == 1) + { argval = 8; rval = float_cst(str, 8, buf); } - for (i = 0; i < (int)argval; i++) { + for (i = 0; i < (int)argval; i++) + { gen1(buf[i]); } }