From 2f5a9a37f1b236512369c57e69f4e1cf44fb9371 Mon Sep 17 00:00:00 2001 From: Luke Gorrie Date: Mon, 4 Dec 2017 08:55:44 +0000 Subject: [PATCH 1/2] lj_obj.h: Redefine GCRef as simple GCobj* pointer --- src/lj_obj.h | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/lj_obj.h b/src/lj_obj.h index 7cf74a77de..c8284fc938 100644 --- a/src/lj_obj.h +++ b/src/lj_obj.h @@ -31,26 +31,27 @@ typedef struct MRef { /* -- GC object references (32 bit address space) ------------------------- */ +/* Forward declaration. */ +union GCobj; + /* GCobj reference */ -typedef struct GCRef { - uint64_t gcptr64; /* True 64 bit pointer. */ -} GCRef; +typedef union GCobj * GCRef; /* Common GC header for all collectable objects. */ #define GCHeader GCRef nextgc; uint8_t marked; uint8_t gct /* This occupies 6 bytes, so use the next 2 bytes for non-32 bit fields. */ -#define gcref(r) ((GCobj *)(r).gcptr64) -#define gcrefp(r, t) ((t *)(void *)(r).gcptr64) -#define gcrefu(r) ((r).gcptr64) -#define gcrefeq(r1, r2) ((r1).gcptr64 == (r2).gcptr64) +#define gcref(r) (r) +#define gcrefp(r, t) ((t *)(void *)(r)) +#define gcrefu(r) ((uint64_t)(r)) +#define gcrefeq(r1, r2) ((r1)==(r2)) -#define setgcref(r, gc) ((r).gcptr64 = (uint64_t)&(gc)->gch) +#define setgcref(r, gc) ((r) = (GCobj *)&(gc)->gch) #define setgcreft(r, gc, it) \ - (r).gcptr64 = (uint64_t)&(gc)->gch | (((uint64_t)(it)) << 47) -#define setgcrefp(r, p) ((r).gcptr64 = (uint64_t)(p)) -#define setgcrefnull(r) ((r).gcptr64 = 0) -#define setgcrefr(r, v) ((r).gcptr64 = (v).gcptr64) + (r) = (GCobj *)((uint64_t)&(gc)->gch | ((uint64_t)(it) << 47)) +#define setgcrefp(r, p) ((r) = (GCobj *)p) +#define setgcrefnull(r) ((r) = NULL) +#define setgcrefr(r, v) ((r) = (v)) #define gcnext(gc) (gcref((gc)->gch.nextgc)) From 1587377935944ffd9a1ad4b4dfe3aabc3ca70f15 Mon Sep 17 00:00:00 2001 From: Luke Gorrie Date: Mon, 4 Dec 2017 09:00:09 +0000 Subject: [PATCH 2/2] lj_obj.h: Redefine MRef as simple void* pointer --- src/lj_obj.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/lj_obj.h b/src/lj_obj.h index c8284fc938..1955875e75 100644 --- a/src/lj_obj.h +++ b/src/lj_obj.h @@ -20,14 +20,12 @@ typedef uint32_t MSize; typedef uint64_t GCSize; /* Memory reference */ -typedef struct MRef { - uint64_t ptr64; /* True 64 bit pointer. */ -} MRef; +typedef void * MRef; -#define mref(r, t) ((t *)(void *)(r).ptr64) +#define mref(r, t) ((t *)(r)) -#define setmref(r, p) ((r).ptr64 = (uint64_t)(void *)(p)) -#define setmrefr(r, v) ((r).ptr64 = (v).ptr64) +#define setmref(r, p) ((r) = (void *)(p)) +#define setmrefr(r, v) ((r) = (v)) /* -- GC object references (32 bit address space) ------------------------- */