ref: 974c4fc768c12af947af13de75c227ef7e6ca50d
parent: ce1edc34368d192db7d3421673ca98c19cc792b2
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sat Apr 30 01:12:20 EDT 2016
awk: temporarily fix for NaN() exceptions on 386 problem is NaN() produces a SNaN, not a QNaN... and on the 387, storing 80 bit SNaN in register to a 64-bit memory destination traps. SNaN/QNaN encoding is machine specific. mips has the qiet/signaling bit inverted. disabling fp exception in main() now, but that sucks. i think the best solution would be to not even call strtod() in is_number() but just write a regex or a little state machine that will only accept numbers without nan and ±inf. that might even make it faster and is more robust than relying on the os's strtod() details.
--- a/sys/src/cmd/awk/main.c
+++ b/sys/src/cmd/awk/main.c
@@ -55,6 +55,8 @@
char *fs = nil, *marg;
int temp;
+ setfcr(getfcr() & ~FPINVAL);
+
Binit(&stdin, 0, OREAD);
Binit(&stdout, 1, OWRITE);
Binit(&stderr, 2, OWRITE);