[compiler] support 128-bit bitfields (#500)

* support setting and accessing fields of a 128-bit bitfield

* remove print

* rework static constants

* support 128-bit bitfields as part of static structures

* dynamic construction
This commit is contained in:
water111
2021-05-18 21:25:29 -04:00
committed by GitHub
parent ec412c7777
commit a6258f3654
21 changed files with 548 additions and 178 deletions
+37
View File
@@ -0,0 +1,37 @@
#include "BitUtils.h"
#include <cstring>
bool integer_fits(s64 in, int size, bool is_signed) {
switch (size) {
case 1:
if (is_signed) {
return in >= INT8_MIN && in <= INT8_MAX;
} else {
return in >= 0 && in <= UINT8_MAX;
}
case 2:
if (is_signed) {
return in >= INT16_MIN && in <= INT16_MAX;
} else {
return in >= 0 && in <= UINT16_MAX;
}
case 4:
if (is_signed) {
return in >= INT32_MIN && in <= INT32_MAX;
} else {
return in >= 0 && in <= UINT32_MAX;
}
case 8:
return true;
default:
assert(false);
return false;
}
}
u32 float_as_u32(float x) {
u32 result;
memcpy(&result, &x, 4);
return result;
}