From 3eed3506b4bf5b31eca4001d43d211a20c2376f1 Mon Sep 17 00:00:00 2001 From: Thomas Preud'homme Date: Sat, 4 Jan 2014 12:56:14 +0800 Subject: [PATCH] Fix negation of 0.0 and -0.0 --- tccgen.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/tccgen.c b/tccgen.c index bf208af1..e8f7f82a 100644 --- a/tccgen.c +++ b/tccgen.c @@ -3794,9 +3794,22 @@ ST_FUNC void unary(void) break; case '-': next(); - vpushi(0); unary(); - gen_op('-'); + t = vtop->type.t & VT_BTYPE; + /* handle (-)0.0 */ + if ((vtop->r & (VT_VALMASK | VT_LVAL | VT_SYM)) == VT_CONST && + is_float(t)) { + if (t == VT_FLOAT) + vtop->c.f = -vtop->c.f; + else if (t == VT_DOUBLE) + vtop->c.d = -vtop->c.d; + else + vtop->c.ld = -vtop->c.ld; + } else { + vpushi(0); + vswap(); + gen_op('-'); + } break; case TOK_LAND: if (!gnu_ext) -- 2.11.4.GIT