From 8d8cf6584bf4081b54cd91fcaa42578cbd794440 Mon Sep 17 00:00:00 2001 From: lemon Date: Wed, 14 Jun 2023 09:58:50 +0200 Subject: simpler handling of large constants in IR --- ir.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'ir.h') diff --git a/ir.h b/ir.h index 1182ed3..d3eeeea 100644 --- a/ir.h +++ b/ir.h @@ -36,10 +36,8 @@ struct xcon { union { const char *sym; int dat; - int i4; - vlong i8; - float fs; - double fd; + vlong i; + double f; }; }; @@ -197,6 +195,12 @@ void irfini(struct function *); union irtype mkirtype(union type); union ref mkintcon(enum irclass, vlong); union ref mkfltcon(enum irclass, double); +#define iscon(r) in_range((r).t, RICON, RXCON) +#define concls(r) ((r).t == RICON ? KI4 : conht[(r).i].cls) +#define isintcon(r) (iscon(r) && kisint(concls(r))) +#define isfltcon(r) ((r).t == RXCON && kisflt(conht[(r).i].cls)) +#define intconval(r) ((r).t == RICON ? (r).i : conht[(r).i].i) +#define fltconval(r) (conht[(r).i].f) union ref mksymref(const char *); union ref mkdatref(uint siz, uint align, const void *, uint n, bool deref); struct instr mkalloca(uint siz, uint align); -- cgit v1.2.3