authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-04-21 22:46:48+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-04-25 21:58:40+02:00
log0738895237387b34b474db8fd3199efece730420
treea54edfb60caba80a20cd5e9a3e3921bc30227974
parentd3ee286511d5b4525498c289f9af379c94c5306c
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

stage1: update zig1.wasm

Signed-off-by: Alex Rønne Petersen <alex@alexrp.com>

2 files changed, 354 insertions(+), 1 deletions(-)

stage1/zig.h+354-1
...@@ -79,6 +79,9 @@...@@ -79,6 +79,9 @@
79#elif defined(__I86__)79#elif defined(__I86__)
80#define zig_x86_1680#define zig_x86_16
81#define zig_x8681#define zig_x86
82#elif defined (__ez80)
83#define zig_ez80
84#define zig_z80
82#endif85#endif
8386
84#if defined(zig_msvc) || __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__87#if defined(zig_msvc) || __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
...@@ -409,6 +412,8 @@...@@ -409,6 +412,8 @@
409#define zig_trap() __asm__ volatile("int $0x3")412#define zig_trap() __asm__ volatile("int $0x3")
410#elif defined(zig_x86)413#elif defined(zig_x86)
411#define zig_trap() __asm__ volatile("ud2")414#define zig_trap() __asm__ volatile("ud2")
415#elif defined(zig_z80)
416#define zig_trap() __asm__ volatile("rst 00h")
412#else417#else
413#define zig_trap() zig_trap_unavailable418#define zig_trap() zig_trap_unavailable
414#endif419#endif
...@@ -511,7 +516,7 @@ zig_extern void *memcpy (void *zig_restrict, void const *zig_restrict, size_t);...@@ -511,7 +516,7 @@ zig_extern void *memcpy (void *zig_restrict, void const *zig_restrict, size_t);
511zig_extern void *memset (void *, int, size_t);516zig_extern void *memset (void *, int, size_t);
512zig_extern void *memmove (void *, void const *, size_t);517zig_extern void *memmove (void *, void const *, size_t);
513518
514/* ================ Bool and 8/16/32/64-bit Integer Support ================= */519/* ================ Bool and 8/16/24/32/48/64-bit Integer Support ================= */
515520
516#include <limits.h>521#include <limits.h>
517522
...@@ -590,6 +595,16 @@ typedef signed long long int16_t;...@@ -590,6 +595,16 @@ typedef signed long long int16_t;
590#define INT16_MAX ( INT16_C(0x7FFF))595#define INT16_MAX ( INT16_C(0x7FFF))
591#define UINT16_MAX ( INT16_C(0xFFFF))596#define UINT16_MAX ( INT16_C(0xFFFF))
592597
598#if defined(zig_ez80)
599typedef unsigned int uint24_t;
600typedef signed int int24_t;
601#define INT24_C(c) c
602#define UINT24_C(c) c##U
603#endif
604#define INT24_MIN (~INT24_C(0x7FFF))
605#define INT24_MAX ( INT24_C(0x7FFF))
606#define UINT24_MAX ( INT24_C(0xFFFF))
607
593#if SCHAR_MIN == ~0x7FFFFFFF && SCHAR_MAX == 0x7FFFFFFF && UCHAR_MAX == 0xFFFFFFFF608#if SCHAR_MIN == ~0x7FFFFFFF && SCHAR_MAX == 0x7FFFFFFF && UCHAR_MAX == 0xFFFFFFFF
594typedef unsigned char uint32_t;609typedef unsigned char uint32_t;
595typedef signed char int32_t;610typedef signed char int32_t;
...@@ -620,6 +635,17 @@ typedef signed long long int32_t;...@@ -620,6 +635,17 @@ typedef signed long long int32_t;
620#define INT32_MAX ( INT32_C(0x7FFFFFFF))635#define INT32_MAX ( INT32_C(0x7FFFFFFF))
621#define UINT32_MAX ( INT32_C(0xFFFFFFFF))636#define UINT32_MAX ( INT32_C(0xFFFFFFFF))
622637
638#if defined(zig_ez80)
639typedef unsigned __int48 uint48_t;
640typedef signed __int48 int48_t;
641#define INT48_C(c) c
642/* no suffix */
643#define UINT48_C(c) ((uint48_t)(c))
644#endif
645#define INT48_MIN (~INT48_C(0x7FFFFFFFFFFF))
646#define INT48_MAX ( INT48_C(0x7FFFFFFFFFFF))
647#define UINT48_MAX ( INT48_C(0xFFFFFFFFFFFF))
648
623#if SCHAR_MIN == ~0x7FFFFFFFFFFFFFFF && SCHAR_MAX == 0x7FFFFFFFFFFFFFFF && UCHAR_MAX == 0xFFFFFFFFFFFFFFFF649#if SCHAR_MIN == ~0x7FFFFFFFFFFFFFFF && SCHAR_MAX == 0x7FFFFFFFFFFFFFFF && UCHAR_MAX == 0xFFFFFFFFFFFFFFFF
624typedef unsigned char uint64_t;650typedef unsigned char uint64_t;
625typedef signed char int64_t;651typedef signed char int64_t;
...@@ -663,10 +689,18 @@ typedef ptrdiff_t intptr_t;...@@ -663,10 +689,18 @@ typedef ptrdiff_t intptr_t;
663#define zig_maxInt_i16 INT16_MAX689#define zig_maxInt_i16 INT16_MAX
664#define zig_minInt_u16 UINT16_C(0)690#define zig_minInt_u16 UINT16_C(0)
665#define zig_maxInt_u16 UINT16_MAX691#define zig_maxInt_u16 UINT16_MAX
692#define zig_minInt_i24 INT24_MIN
693#define zig_maxInt_i24 INT24_MAX
694#define zig_minInt_u24 UINT24_C(0)
695#define zig_maxInt_u24 UINT24_MAX
666#define zig_minInt_i32 INT32_MIN696#define zig_minInt_i32 INT32_MIN
667#define zig_maxInt_i32 INT32_MAX697#define zig_maxInt_i32 INT32_MAX
668#define zig_minInt_u32 UINT32_C(0)698#define zig_minInt_u32 UINT32_C(0)
669#define zig_maxInt_u32 UINT32_MAX699#define zig_maxInt_u32 UINT32_MAX
700#define zig_minInt_i48 INT48_MIN
701#define zig_maxInt_i48 INT48_MAX
702#define zig_minInt_u48 UINT48_C(0)
703#define zig_maxInt_u48 UINT48_MAX
670#define zig_minInt_i64 INT64_MIN704#define zig_minInt_i64 INT64_MIN
671#define zig_maxInt_i64 INT64_MAX705#define zig_maxInt_i64 INT64_MAX
672#define zig_minInt_u64 UINT64_C(0)706#define zig_minInt_u64 UINT64_C(0)
...@@ -786,6 +820,17 @@ zig_int_helpers(16, unsigned long long)...@@ -786,6 +820,17 @@ zig_int_helpers(16, unsigned long long)
786#else820#else
787zig_int_helpers(16, uint16_t)821zig_int_helpers(16, uint16_t)
788#endif822#endif
823#if defined(zig_ez80)
824#if UINT24_MAX <= UINT_MAX
825zig_int_helpers(24, unsigned int)
826#elif UINT24_MAX <= ULONG_MAX
827zig_int_helpers(24, unsigned long)
828#elif UINT24_MAX <= ULLONG_MAX
829zig_int_helpers(24, unsigned long long)
830#else
831zig_int_helpers(24, uint24_t)
832#endif
833#endif
789#if UINT32_MAX <= UINT_MAX834#if UINT32_MAX <= UINT_MAX
790zig_int_helpers(32, unsigned int)835zig_int_helpers(32, unsigned int)
791#elif UINT32_MAX <= ULONG_MAX836#elif UINT32_MAX <= ULONG_MAX
...@@ -795,6 +840,17 @@ zig_int_helpers(32, unsigned long long)...@@ -795,6 +840,17 @@ zig_int_helpers(32, unsigned long long)
795#else840#else
796zig_int_helpers(32, uint32_t)841zig_int_helpers(32, uint32_t)
797#endif842#endif
843#if defined(zig_ez80)
844#if UINT24_MAX <= UINT_MAX
845zig_int_helpers(48, unsigned int)
846#elif UINT24_MAX <= ULONG_MAX
847zig_int_helpers(48, unsigned long)
848#elif UINT24_MAX <= ULLONG_MAX
849zig_int_helpers(48, unsigned long long)
850#else
851zig_int_helpers(48, uint48_t)
852#endif
853#endif
798#if UINT64_MAX <= UINT_MAX854#if UINT64_MAX <= UINT_MAX
799zig_int_helpers(64, unsigned int)855zig_int_helpers(64, unsigned int)
800#elif UINT64_MAX <= ULONG_MAX856#elif UINT64_MAX <= ULONG_MAX
...@@ -909,6 +965,66 @@ static inline bool zig_addo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t...@@ -909,6 +965,66 @@ static inline bool zig_addo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t
909#endif965#endif
910}966}
911967
968#if defined(zig_ez80)
969static inline bool zig_addo_u24(uint24_t *res, uint24_t lhs, uint24_t rhs, uint8_t bits) {
970#if zig_has_builtin(add_overflow) || defined(zig_gcc)
971 uint24_t full_res;
972 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
973 *res = zig_wrap_u24(full_res, bits);
974 return overflow || full_res < zig_minInt_u(24, bits) || full_res > zig_maxInt_u(24, bits);
975#else
976 uint32_t full_res;
977 bool overflow = zig_addo_u32(&full_res, lhs, rhs, bits);
978 *res = (uint24_t)full_res;
979 return overflow;
980#endif
981}
982
983static inline bool zig_addo_i24(int24_t *res, int24_t lhs, int24_t rhs, uint8_t bits) {
984#if zig_has_builtin(add_overflow) || defined(zig_gcc)
985 int24_t full_res;
986 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
987 *res = zig_wrap_i24(full_res, bits);
988 return overflow || full_res < zig_minInt_i(24, bits) || full_res > zig_maxInt_i(24, bits);
989#else
990 int32_t full_res;
991 bool overflow = zig_addo_i32(&full_res, lhs, rhs, bits);
992 *res = (int24_t)full_res;
993 return overflow;
994#endif
995}
996#endif
997
998#if defined(zig_ez80)
999static inline bool zig_addo_u48(uint48_t *res, uint48_t lhs, uint48_t rhs, uint8_t bits) {
1000#if zig_has_builtin(add_overflow) || defined(zig_gcc)
1001 uint48_t full_res;
1002 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
1003 *res = zig_wrap_u48(full_res, bits);
1004 return overflow || full_res < zig_minInt_u(48, bits) || full_res > zig_maxInt_u(48, bits);
1005#else
1006 uint64_t full_res;
1007 bool overflow = zig_addo_u64(&full_res, lhs, rhs, bits);
1008 *res = (uint48_t)full_res;
1009 return overflow;
1010#endif
1011}
1012
1013static inline bool zig_addo_i48(int48_t *res, int48_t lhs, int48_t rhs, uint8_t bits) {
1014#if zig_has_builtin(add_overflow) || defined(zig_gcc)
1015 int48_t full_res;
1016 bool overflow = __builtin_add_overflow(lhs, rhs, &full_res);
1017 *res = zig_wrap_i48(full_res, bits);
1018 return overflow || full_res < zig_minInt_i(48, bits) || full_res > zig_maxInt_i(48, bits);
1019#else
1020 int64_t full_res;
1021 bool overflow = zig_addo_i64(&full_res, lhs, rhs, bits);
1022 *res = (int48_t)full_res;
1023 return overflow;
1024#endif
1025}
1026#endif
1027
912static inline bool zig_subo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8_t bits) {1028static inline bool zig_subo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8_t bits) {
913#if zig_has_builtin(sub_overflow) || defined(zig_gcc)1029#if zig_has_builtin(sub_overflow) || defined(zig_gcc)
914 uint32_t full_res;1030 uint32_t full_res;
...@@ -933,6 +1049,7 @@ static inline bool zig_subo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t...@@ -933,6 +1049,7 @@ static inline bool zig_subo_i32(int32_t *res, int32_t lhs, int32_t rhs, uint8_t
933 return overflow || full_res < zig_minInt_i(32, bits) || full_res > zig_maxInt_i(32, bits);1049 return overflow || full_res < zig_minInt_i(32, bits) || full_res > zig_maxInt_i(32, bits);
934}1050}
9351051
1052
936static inline bool zig_subo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8_t bits) {1053static inline bool zig_subo_u64(uint64_t *res, uint64_t lhs, uint64_t rhs, uint8_t bits) {
937#if zig_has_builtin(sub_overflow) || defined(zig_gcc)1054#if zig_has_builtin(sub_overflow) || defined(zig_gcc)
938 uint64_t full_res;1055 uint64_t full_res;
...@@ -1013,6 +1130,66 @@ static inline bool zig_subo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t...@@ -1013,6 +1130,66 @@ static inline bool zig_subo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t
1013#endif1130#endif
1014}1131}
10151132
1133#if defined(zig_ez80)
1134static inline bool zig_subo_u24(uint24_t *res, uint24_t lhs, uint24_t rhs, uint8_t bits) {
1135#if zig_has_builtin(sub_overflow) || defined(zig_gcc)
1136 uint24_t full_res;
1137 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
1138 *res = zig_wrap_u24(full_res, bits);
1139 return overflow || full_res < zig_minInt_u(24, bits) || full_res > zig_maxInt_u(24, bits);
1140#else
1141 uint32_t full_res;
1142 bool overflow = zig_subo_u32(&full_res, lhs, rhs, bits);
1143 *res = (uint24_t)full_res;
1144 return overflow;
1145#endif
1146}
1147
1148static inline bool zig_subo_i24(int24_t *res, int24_t lhs, int24_t rhs, uint8_t bits) {
1149#if zig_has_builtin(sub_overflow) || defined(zig_gcc)
1150 int24_t full_res;
1151 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
1152 *res = zig_wrap_i24(full_res, bits);
1153 return overflow || full_res < zig_minInt_i(24, bits) || full_res > zig_maxInt_i(24, bits);
1154#else
1155 int32_t full_res;
1156 bool overflow = zig_subo_i32(&full_res, lhs, rhs, bits);
1157 *res = (int24_t)full_res;
1158 return overflow;
1159#endif
1160}
1161#endif
1162
1163#if defined(zig_ez80)
1164static inline bool zig_subo_u48(uint48_t *res, uint48_t lhs, uint48_t rhs, uint8_t bits) {
1165#if zig_has_builtin(sub_overflow) || defined(zig_gcc)
1166 uint48_t full_res;
1167 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
1168 *res = zig_wrap_u48(full_res, bits);
1169 return overflow || full_res < zig_minInt_u(48, bits) || full_res > zig_maxInt_u(48, bits);
1170#else
1171 uint64_t full_res;
1172 bool overflow = zig_subo_u64(&full_res, lhs, rhs, bits);
1173 *res = (uint48_t)full_res;
1174 return overflow;
1175#endif
1176}
1177
1178static inline bool zig_subo_i48(int48_t *res, int48_t lhs, int48_t rhs, uint8_t bits) {
1179#if zig_has_builtin(sub_overflow) || defined(zig_gcc)
1180 int48_t full_res;
1181 bool overflow = __builtin_sub_overflow(lhs, rhs, &full_res);
1182 *res = zig_wrap_i48(full_res, bits);
1183 return overflow || full_res < zig_minInt_i(48, bits) || full_res > zig_maxInt_i(48, bits);
1184#else
1185 int64_t full_res;
1186 bool overflow = zig_subo_i64(&full_res, lhs, rhs, bits);
1187 *res = (int48_t)full_res;
1188 return overflow;
1189#endif
1190}
1191#endif
1192
1016static inline bool zig_mulo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8_t bits) {1193static inline bool zig_mulo_u32(uint32_t *res, uint32_t lhs, uint32_t rhs, uint8_t bits) {
1017#if zig_has_builtin(mul_overflow) || defined(zig_gcc)1194#if zig_has_builtin(mul_overflow) || defined(zig_gcc)
1018 uint32_t full_res;1195 uint32_t full_res;
...@@ -1121,6 +1298,66 @@ static inline bool zig_mulo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t...@@ -1121,6 +1298,66 @@ static inline bool zig_mulo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t
1121#endif1298#endif
1122}1299}
11231300
1301#if defined(zig_ez80)
1302static inline bool zig_mulo_u24(uint24_t *res, uint24_t lhs, uint24_t rhs, uint8_t bits) {
1303#if zig_has_builtin(mul_overflow) || defined(zig_gcc)
1304 uint24_t full_res;
1305 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
1306 *res = zig_wrap_u24(full_res, bits);
1307 return overflow || full_res < zig_minInt_u(24, bits) || full_res > zig_maxInt_u(24, bits);
1308#else
1309 uint32_t full_res;
1310 bool overflow = zig_mulo_u32(&full_res, lhs, rhs, bits);
1311 *res = (uint24_t)full_res;
1312 return overflow;
1313#endif
1314}
1315
1316static inline bool zig_mulo_i24(int24_t *res, int24_t lhs, int24_t rhs, uint8_t bits) {
1317#if zig_has_builtin(mul_overflow) || defined(zig_gcc)
1318 int24_t full_res;
1319 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
1320 *res = zig_wrap_i24(full_res, bits);
1321 return overflow || full_res < zig_minInt_i(24, bits) || full_res > zig_maxInt_i(24, bits);
1322#else
1323 int32_t full_res;
1324 bool overflow = zig_mulo_i32(&full_res, lhs, rhs, bits);
1325 *res = (int24_t)full_res;
1326 return overflow;
1327#endif
1328}
1329#endif
1330
1331#if defined(zig_ez80)
1332static inline bool zig_mulo_u48(uint48_t *res, uint48_t lhs, uint48_t rhs, uint8_t bits) {
1333#if zig_has_builtin(mul_overflow) || defined(zig_gcc)
1334 uint48_t full_res;
1335 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
1336 *res = zig_wrap_u48(full_res, bits);
1337 return overflow || full_res < zig_minInt_u(48, bits) || full_res > zig_maxInt_u(48, bits);
1338#else
1339 uint64_t full_res;
1340 bool overflow = zig_mulo_u64(&full_res, lhs, rhs, bits);
1341 *res = (uint48_t)full_res;
1342 return overflow;
1343#endif
1344}
1345
1346static inline bool zig_mulo_i48(int48_t *res, int48_t lhs, int48_t rhs, uint8_t bits) {
1347#if zig_has_builtin(mul_overflow) || defined(zig_gcc)
1348 int48_t full_res;
1349 bool overflow = __builtin_mul_overflow(lhs, rhs, &full_res);
1350 *res = zig_wrap_i48(full_res, bits);
1351 return overflow || full_res < zig_minInt_i(48, bits) || full_res > zig_maxInt_i(48, bits);
1352#else
1353 int64_t full_res;
1354 bool overflow = zig_mulo_i64(&full_res, lhs, rhs, bits);
1355 *res = (int48_t)full_res;
1356 return overflow;
1357#endif
1358}
1359#endif
1360
1124#define zig_int_builtins(w) \1361#define zig_int_builtins(w) \
1125 static inline bool zig_shlo_u##w(uint##w##_t *res, uint##w##_t lhs, uint8_t rhs, uint8_t bits) { \1362 static inline bool zig_shlo_u##w(uint##w##_t *res, uint##w##_t lhs, uint8_t rhs, uint8_t bits) { \
1126 *res = zig_shlw_u##w(lhs, rhs, bits); \1363 *res = zig_shlw_u##w(lhs, rhs, bits); \
...@@ -1180,7 +1417,13 @@ static inline bool zig_mulo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t...@@ -1180,7 +1417,13 @@ static inline bool zig_mulo_i16(int16_t *res, int16_t lhs, int16_t rhs, uint8_t
1180 }1417 }
1181zig_int_builtins(8)1418zig_int_builtins(8)
1182zig_int_builtins(16)1419zig_int_builtins(16)
1420#if defined(zig_ez80)
1421zig_int_builtins(24)
1422#endif
1183zig_int_builtins(32)1423zig_int_builtins(32)
1424#if defined(zig_ez80)
1425zig_int_builtins(48)
1426#endif
1184zig_int_builtins(64)1427zig_int_builtins(64)
11851428
1186#define zig_builtin8(name, val) __builtin_##name(val)1429#define zig_builtin8(name, val) __builtin_##name(val)
...@@ -1189,6 +1432,11 @@ typedef unsigned int zig_Builtin8;...@@ -1189,6 +1432,11 @@ typedef unsigned int zig_Builtin8;
1189#define zig_builtin16(name, val) __builtin_##name(val)1432#define zig_builtin16(name, val) __builtin_##name(val)
1190typedef unsigned int zig_Builtin16;1433typedef unsigned int zig_Builtin16;
11911434
1435#if defined(zig_ez80)
1436#define zig_builtin24(name, val) __builtin_##name(val)
1437typedef unsigned int zig_Builtin24;
1438#endif
1439
1192#if INT_MIN <= INT32_MIN1440#if INT_MIN <= INT32_MIN
1193#define zig_builtin32(name, val) __builtin_##name(val)1441#define zig_builtin32(name, val) __builtin_##name(val)
1194typedef unsigned int zig_Builtin32;1442typedef unsigned int zig_Builtin32;
...@@ -1197,6 +1445,11 @@ typedef unsigned int zig_Builtin32;...@@ -1197,6 +1445,11 @@ typedef unsigned int zig_Builtin32;
1197typedef unsigned long zig_Builtin32;1445typedef unsigned long zig_Builtin32;
1198#endif1446#endif
11991447
1448#if defined(zig_ez80)
1449#define zig_builtin48(name, val) __builtin_##name(val)
1450typedef unsigned long long zig_Builtin48;
1451#endif
1452
1200#if INT_MIN <= INT64_MIN1453#if INT_MIN <= INT64_MIN
1201#define zig_builtin64(name, val) __builtin_##name(val)1454#define zig_builtin64(name, val) __builtin_##name(val)
1202typedef unsigned int zig_Builtin64;1455typedef unsigned int zig_Builtin64;
...@@ -1231,6 +1484,23 @@ static inline int16_t zig_byte_swap_i16(int16_t val, uint8_t bits) {...@@ -1231,6 +1484,23 @@ static inline int16_t zig_byte_swap_i16(int16_t val, uint8_t bits) {
1231 return zig_wrap_i16((int16_t)zig_byte_swap_u16((uint16_t)val, bits), bits);1484 return zig_wrap_i16((int16_t)zig_byte_swap_u16((uint16_t)val, bits), bits);
1232}1485}
12331486
1487#if defined(zig_ez80)
1488static inline uint16_t zig_byte_swap_u24(uint24_t val, uint8_t bits) {
1489 uint24_t full_res;
1490#if zig_has_builtin(bswap24) || defined(zig_gcc)
1491 full_res = __builtin_bswap24(val);
1492#else
1493 full_res = (uint24_t)zig_byte_swap_u8((uint8_t)(val >> 0), 8) << 16 |
1494 (uint24_t)zig_byte_swap_u16((uint16_t)(val >> 8), 16) >> 0;
1495#endif
1496 return zig_wrap_u24(full_res >> (24 - bits), bits);
1497}
1498
1499static inline int16_t zig_byte_swap_i24(int24_t val, uint8_t bits) {
1500 return zig_wrap_i24((int24_t)zig_byte_swap_u24((uint24_t)val, bits), bits);
1501}
1502#endif
1503
1234static inline uint32_t zig_byte_swap_u32(uint32_t val, uint8_t bits) {1504static inline uint32_t zig_byte_swap_u32(uint32_t val, uint8_t bits) {
1235 uint32_t full_res;1505 uint32_t full_res;
1236#if zig_has_builtin(bswap32) || defined(zig_gcc)1506#if zig_has_builtin(bswap32) || defined(zig_gcc)
...@@ -1246,6 +1516,23 @@ static inline int32_t zig_byte_swap_i32(int32_t val, uint8_t bits) {...@@ -1246,6 +1516,23 @@ static inline int32_t zig_byte_swap_i32(int32_t val, uint8_t bits) {
1246 return zig_wrap_i32((int32_t)zig_byte_swap_u32((uint32_t)val, bits), bits);1516 return zig_wrap_i32((int32_t)zig_byte_swap_u32((uint32_t)val, bits), bits);
1247}1517}
12481518
1519#if defined(zig_ez80)
1520static inline uint32_t zig_byte_swap_u48(uint48_t val, uint8_t bits) {
1521 uint48_t full_res;
1522#if zig_has_builtin(bswap48) || defined(zig_gcc)
1523 full_res = __builtin_bswap48(val);
1524#else
1525 full_res = (uint48_t)zig_byte_swap_u24((uint24_t)(val >> 0), 24) << 24 |
1526 (uint48_t)zig_byte_swap_u24((uint24_t)(val >> 24), 24) >> 0;
1527#endif
1528 return zig_wrap_u48(full_res >> (48 - bits), bits);
1529}
1530
1531static inline int32_t zig_byte_swap_i48(int48_t val, uint8_t bits) {
1532 return zig_wrap_i48((int48_t)zig_byte_swap_u48((uint48_t)val, bits), bits);
1533}
1534#endif
1535
1249static inline uint64_t zig_byte_swap_u64(uint64_t val, uint8_t bits) {1536static inline uint64_t zig_byte_swap_u64(uint64_t val, uint8_t bits) {
1250 uint64_t full_res;1537 uint64_t full_res;
1251#if zig_has_builtin(bswap64) || defined(zig_gcc)1538#if zig_has_builtin(bswap64) || defined(zig_gcc)
...@@ -1294,6 +1581,23 @@ static inline int16_t zig_bit_reverse_i16(int16_t val, uint8_t bits) {...@@ -1294,6 +1581,23 @@ static inline int16_t zig_bit_reverse_i16(int16_t val, uint8_t bits) {
1294 return zig_wrap_i16((int16_t)zig_bit_reverse_u16((uint16_t)val, bits), bits);1581 return zig_wrap_i16((int16_t)zig_bit_reverse_u16((uint16_t)val, bits), bits);
1295}1582}
12961583
1584#if defined(zig_ez80)
1585static inline uint24_t zig_bit_reverse_u24(uint24_t val, uint8_t bits) {
1586 uint24_t full_res;
1587#if zig_has_builtin(bitreverse24)
1588 full_res = __builtin_bitreverse24(val);
1589#else
1590 full_res = (uint24_t)zig_bit_reverse_u8((uint8_t)(val >> 0), 8) << 16 |
1591 (uint24_t)zig_bit_reverse_u16((uint16_t)(val >> 8), 16) >> 0;
1592#endif
1593 return zig_wrap_u24(full_res >> (24 - bits), bits);
1594}
1595
1596static inline int24_t zig_bit_reverse_i24(int24_t val, uint8_t bits) {
1597 return zig_wrap_i24((int24_t)zig_bit_reverse_u24((uint24_t)val, bits), bits);
1598}
1599#endif
1600
1297static inline uint32_t zig_bit_reverse_u32(uint32_t val, uint8_t bits) {1601static inline uint32_t zig_bit_reverse_u32(uint32_t val, uint8_t bits) {
1298 uint32_t full_res;1602 uint32_t full_res;
1299#if zig_has_builtin(bitreverse32)1603#if zig_has_builtin(bitreverse32)
...@@ -1309,6 +1613,23 @@ static inline int32_t zig_bit_reverse_i32(int32_t val, uint8_t bits) {...@@ -1309,6 +1613,23 @@ static inline int32_t zig_bit_reverse_i32(int32_t val, uint8_t bits) {
1309 return zig_wrap_i32((int32_t)zig_bit_reverse_u32((uint32_t)val, bits), bits);1613 return zig_wrap_i32((int32_t)zig_bit_reverse_u32((uint32_t)val, bits), bits);
1310}1614}
13111615
1616#if defined(zig_ez80)
1617static inline uint32_t zig_bit_reverse_u48(uint48_t val, uint8_t bits) {
1618 uint48_t full_res;
1619#if zig_has_builtin(bitreverse48)
1620 full_res = __builtin_bitreverse48(val);
1621#else
1622 full_res = (uint48_t)zig_bit_reverse_u24((uint24_t)(val >> 0), 24) << 24 |
1623 (uint48_t)zig_bit_reverse_u24((uint24_t)(val >> 24), 24) >> 0;
1624#endif
1625 return zig_wrap_u32(full_res >> (48 - bits), bits);
1626}
1627
1628static inline int32_t zig_bit_reverse_i48(int48_t val, uint8_t bits) {
1629 return zig_wrap_i48((int48_t)zig_bit_reverse_u48((uint48_t)val, bits), bits);
1630}
1631#endif
1632
1312static inline uint64_t zig_bit_reverse_u64(uint64_t val, uint8_t bits) {1633static inline uint64_t zig_bit_reverse_u64(uint64_t val, uint8_t bits) {
1313 uint64_t full_res;1634 uint64_t full_res;
1314#if zig_has_builtin(bitreverse64)1635#if zig_has_builtin(bitreverse64)
...@@ -1350,7 +1671,13 @@ static inline int64_t zig_bit_reverse_i64(int64_t val, uint8_t bits) {...@@ -1350,7 +1671,13 @@ static inline int64_t zig_bit_reverse_i64(int64_t val, uint8_t bits) {
1350#endif1671#endif
1351zig_builtin_popcount(8)1672zig_builtin_popcount(8)
1352zig_builtin_popcount(16)1673zig_builtin_popcount(16)
1674#if defined(zig_ez80)
1675zig_builtin_popcount(24)
1676#endif
1353zig_builtin_popcount(32)1677zig_builtin_popcount(32)
1678#if defined(zig_ez80)
1679zig_builtin_popcount(48)
1680#endif
1354zig_builtin_popcount(64)1681zig_builtin_popcount(64)
13551682
1356#define zig_builtin_ctz_common(w) \1683#define zig_builtin_ctz_common(w) \
...@@ -1375,7 +1702,13 @@ zig_builtin_popcount(64)...@@ -1375,7 +1702,13 @@ zig_builtin_popcount(64)
1375#endif1702#endif
1376zig_builtin_ctz(8)1703zig_builtin_ctz(8)
1377zig_builtin_ctz(16)1704zig_builtin_ctz(16)
1705#if defined(zig_ez80)
1706zig_builtin_ctz(24)
1707#endif
1378zig_builtin_ctz(32)1708zig_builtin_ctz(32)
1709#if defined(zig_ez80)
1710zig_builtin_ctz(48)
1711#endif
1379zig_builtin_ctz(64)1712zig_builtin_ctz(64)
13801713
1381#define zig_builtin_clz_common(w) \1714#define zig_builtin_clz_common(w) \
...@@ -1400,7 +1733,13 @@ zig_builtin_ctz(64)...@@ -1400,7 +1733,13 @@ zig_builtin_ctz(64)
1400#endif1733#endif
1401zig_builtin_clz(8)1734zig_builtin_clz(8)
1402zig_builtin_clz(16)1735zig_builtin_clz(16)
1736#if defined(zig_ez80)
1737zig_builtin_clz(24)
1738#endif
1403zig_builtin_clz(32)1739zig_builtin_clz(32)
1740#if defined(zig_ez80)
1741zig_builtin_clz(48)
1742#endif
1404zig_builtin_clz(64)1743zig_builtin_clz(64)
14051744
1406/* ======================== 128-bit Integer Support ========================= */1745/* ======================== 128-bit Integer Support ========================= */
...@@ -1981,6 +2320,20 @@ static inline zig_i128 zig_bit_reverse_i128(zig_i128 val, uint8_t bits) {...@@ -1981,6 +2320,20 @@ static inline zig_i128 zig_bit_reverse_i128(zig_i128 val, uint8_t bits) {
1981 return zig_bitCast_i128(zig_bit_reverse_u128(zig_bitCast_u128(val), bits));2320 return zig_bitCast_i128(zig_bit_reverse_u128(zig_bitCast_u128(val), bits));
1982}2321}
19832322
2323#if zig_has_int128
2324#define zig_switch_int128(operand) switch (operand)
2325#define zig_switch_prong_begin_int128()
2326#define zig_switch_case_int128(Type, operand, value) case value:
2327#define zig_switch_prong_end_int128()
2328#define zig_switch_default_int128() default:
2329#else // zig_has_int128
2330#define zig_switch_int128(operand)
2331#define zig_switch_prong_begin_int128() if (0
2332#define zig_switch_case_int128(Type, operand, value) || (zig_cmp_##Type(operand, value) == 0)
2333#define zig_switch_prong_end_int128() )
2334#define zig_switch_default_int128()
2335#endif // zig_has_int128
2336
1984/* ========================== Big Integer Support =========================== */2337/* ========================== Big Integer Support =========================== */
19852338
1986static inline uint16_t zig_int_bytes(uint16_t bits) {2339static inline uint16_t zig_int_bytes(uint16_t bits) {
stage1/zig1.wasm
Binary files a/stage1/zig1.wasm and b/stage1/zig1.wasm differ