From a6c2f8a9177eeae64b83e4aeafe46dbe310b3861 Mon Sep 17 00:00:00 2001 From: lemon Date: Thu, 25 Dec 2025 13:28:56 +0100 Subject: avoid GOT relocations in unnecessary instances Also change xcon to have a flagset for symbols (whether it's a function, locally defined; later: thread local, etc). --- ir/ir.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'ir/ir.h') diff --git a/ir/ir.h b/ir/ir.h index 8e18e1f..8402864 100644 --- a/ir/ir.h +++ b/ir/ir.h @@ -25,9 +25,14 @@ struct irdat { internstr name; }; +enum symflags { + SLOCAL = 1, + SFUNC = 2, +}; struct xcon { - bool issym, isdat, isfunc, deref; + bool issym, isdat, deref; uchar cls; + uchar flag; union { internstr sym; int dat; @@ -255,7 +260,7 @@ union ref mkfltcon(enum irclass, double); #define isaddrcon(r,derefok) ((r).t == RXCON && !conht[(r).i].cls && (derefok || !conht[(r).i].deref)) #define intconval(r) ((r).t == RICON ? (r).i : conht[(r).i].i) #define fltconval(r) ((r).t == RICON ? (r).i : conht[(r).i].f) -union ref mksymref(internstr, bool isfunc); +union ref mksymref(internstr, enum symflags); union ref mkdatref(internstr name, union type ctype, uint siz, uint align, const void *, uint n, bool deref); internstr xcon2sym(int ref); struct instr mkalloca(uint siz, uint align); -- cgit v1.2.3