added signed ints to register, how was this not added before?!

This commit is contained in:
2026-03-30 12:13:55 -06:00
parent 0015387d60
commit 67ed4a7fc4

View File

@@ -18,10 +18,53 @@ namespace spider {
* type-punning which is the "standard" right now. * type-punning which is the "standard" right now.
*/ */
union register_t { union register_t {
// -- Un/Signed 64 -- //
u64 _u64; u64 _u64;
i64 _i64; i64 _i64;
f64 _f64;
u8 _bytes[8]; // -- Un/Signed 32 -- //
struct {
#if SPIDER_LITTLE_ENDIAN
u32 _u32; u32 : 32;
#else
u32 : 32; u32 _u32;
#endif
};
struct {
#if SPIDER_LITTLE_ENDIAN
i32 _i32; i32 : 32;
#else
i32 : 32; i32 _i32;
#endif
};
// -- Un/Signed 16 -- //
struct {
#if SPIDER_LITTLE_ENDIAN
u16 _u16;
u16 : 16; u16 : 16; u16 : 16;
#else
u16 : 16; u16 : 16; u16 : 16;
u16 _u16;
#endif
};
struct {
#if SPIDER_LITTLE_ENDIAN
i16 _i16;
i16 : 16; i16 : 16; i16 : 16;
#else
i16 : 16; i16 : 16; i16 : 16;
i16 _i16;
#endif
};
// -- Un/Signed 8 -- //
struct { struct {
#if SPIDER_LITTLE_ENDIAN #if SPIDER_LITTLE_ENDIAN
@@ -35,22 +78,17 @@ namespace spider {
struct { struct {
#if SPIDER_LITTLE_ENDIAN #if SPIDER_LITTLE_ENDIAN
u16 _u16; i8 _i8; // ditto
u16 : 16; u16 : 16; u16 : 16; i8 : 8; i8 : 8; i8 : 8; i8 : 8; i8 : 8; i8 : 8; i8 : 8;
#else #else
u16 : 16; u16 : 16; u16 : 16; i8 : 8; i8 : 8; i8 : 8; i8 : 8; i8 : 8; i8 : 8; i8 : 8;
u16 _u16; i8 _i8;
#endif #endif
}; };
struct { // -- Floating Point -- //
#if SPIDER_LITTLE_ENDIAN
u32 _u32; u32 : 32;
#else
u32 : 32; u32 _u32;
#endif
};
f64 _f64;
struct { struct {
#if SPIDER_LITTLE_ENDIAN #if SPIDER_LITTLE_ENDIAN
f32 _f32; u32 : 32; f32 _f32; u32 : 32;
@@ -59,6 +97,10 @@ namespace spider {
#endif #endif
}; };
// -- Access -- //
u8 _bytes[8];
u8& operator[](size_t i) { // 0 is always LSB u8& operator[](size_t i) { // 0 is always LSB
#if SPIDER_LITTLE_ENDIAN #if SPIDER_LITTLE_ENDIAN
return _bytes[i]; return _bytes[i];
@@ -75,6 +117,7 @@ namespace spider {
return _bytes[7 - i]; return _bytes[7 - i];
#endif #endif
} }
}; };
static_assert(sizeof(register_t) == 8, "The register type must be exactly 8 bytes."); static_assert(sizeof(register_t) == 8, "The register type must be exactly 8 bytes.");