added signed ints to register, how was this not added before?!
This commit is contained in:
@@ -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.");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user