shithub: riscv

Download patch

ref: 974c4fc768c12af947af13de75c227ef7e6ca50d
parent: ce1edc34368d192db7d3421673ca98c19cc792b2
author: cinap_lenrek <[email protected]>
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);