From 974c4fc768c12af947af13de75c227ef7e6ca50d Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sat, 30 Apr 2016 05:12:20 +0200 Subject: [PATCH] awk: temporarily fix for NaN() exceptions on 386 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- sys/src/cmd/awk/main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sys/src/cmd/awk/main.c b/sys/src/cmd/awk/main.c index 3d1ae4e0d..2695de56d 100644 --- a/sys/src/cmd/awk/main.c +++ b/sys/src/cmd/awk/main.c @@ -55,6 +55,8 @@ void main(int argc, char *argv[]) char *fs = nil, *marg; int temp; + setfcr(getfcr() & ~FPINVAL); + Binit(&stdin, 0, OREAD); Binit(&stdout, 1, OWRITE); Binit(&stderr, 2, OWRITE);