From 60a9104f6b737976e30271ac1c1a432cd9a5c657 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Wed, 9 Feb 2022 17:25:28 +0000 Subject: Encode ref count in bit mask too --- apl9.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'apl9.h') diff --git a/apl9.h b/apl9.h index 8135f39..1208cac 100644 --- a/apl9.h +++ b/apl9.h @@ -75,7 +75,7 @@ typedef struct Mail Mail; struct Mixed { - int type; + u8int type; union { vlong i; double f; @@ -87,10 +87,12 @@ struct Mixed #define GetRank(a) ((u8int)((a->info & 0x0000000F00000000) >> 32)) #define GetType(a) ((u8int)((a->info & 0x000000F000000000) >> 36)) #define GetStrand(a) ((u8int)((a->info & 0x0000010000000000) >> 40)) +#define GetRefs(a) ((u32int)((a->info & 0xFFFFFE0000000000) >> 41)) #define SetSize(a,v) (a->info ^= ((u64int)GetSize(a)^v)) #define SetRank(a,v) (a->info ^= ((u64int)(GetRank(a)^v) << 32)) #define SetType(a,v) (a->info ^= ((u64int)(GetType(a)^v) << 36)) #define SetStrand(a,v) (a->info ^= ((u64int)(GetStrand(a)^v) << 40)) +#define SetRefs(a,v) (a->info ^= ((u64int)(GetRefs(a)^v) << 41)) struct Array { @@ -109,10 +111,9 @@ struct Array * 32-35: 4 bits for the rank (max rank 15) * 36-39: 4 bits for the type (16 options) * 40: 1 bit for stranding - * 41-63: unused + * 41-63: 23 bits for reference counting (max refs = 8388608) * NOTE: should only be modified through the macros defined above */ - ulong refs; }; struct Statement -- cgit v1.2.3