diff options
author | Michael Forney <mforney@mforney.org> | 2022-02-10 15:35:56 -0800 |
---|---|---|
committer | Michael Forney <mforney@mforney.org> | 2022-02-10 15:35:56 -0800 |
commit | 28fdb0f046184e567e85b9bb40dc942ca1739d9f (patch) | |
tree | f292aa8a8f6934be35ca9982effb5bd5e811d368 | |
parent | 704382569df976ab94d2b4d6ef7b5926c2de5de0 (diff) |
qbe: Switch to unary negation
This fixes bugs involving floating point negative zero.
-rw-r--r-- | ops.h | 1 | ||||
-rw-r--r-- | qbe.c | 2 |
2 files changed, 2 insertions, 1 deletions
@@ -1,6 +1,7 @@ /* arithmetic and bits */ OP(IADD, "add") OP(ISUB, "sub") +OP(INEG, "neg") OP(IDIV, "div") OP(IMUL, "mul") OP(IUDIV, "udiv") @@ -803,7 +803,7 @@ funcexpr(struct func *f, struct expr *e) return funcload(f, e->type, (struct lvalue){r}); case TSUB: r = funcexpr(f, e->base); - return funcinst(f, ISUB, qbetype(e->type).base, mkintconst(0), r); + return funcinst(f, INEG, qbetype(e->type).base, r, NULL); } fatal("internal error; unknown unary expression"); break; |