Last active
February 3, 2026 09:42
-
-
Save m1lkweed/a783b705d17dea6ea2bb5068cb42c7fe to your computer and use it in GitHub Desktop.
Structs to help with bit manipulation of bytes, integers, and integer vectors
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #ifdef __clang__ | |
| #define vector_attr_clang_or_gcc_with_fallback(a, b) [[clang::ext_vector_type((a))]] | |
| #elifdef __GNUC__ | |
| #define vector_attr_clang_or_gcc_with_fallback(a, b) [[gnu::vector_size((b))]] | |
| #else | |
| #define vector_attr_clang_or_gcc_with_fallback(a, b) [(a)] | |
| #endif | |
| typedef union{ | |
| unsigned _BitInt(8) byte; | |
| uint8_t as_u8; | |
| int8_t as_i8; | |
| struct{bool bit_0:1, bit_1:1, bit_2:1, bit_3:1, bit_4:1, bit_5:1, bit_6:1, bit_7:1;}; | |
| struct{bool lsb:1, :1, :1, :1, :1, :1, :1, msb:1;}; | |
| struct{bool val_1:1, val_2:1, val_4:1, val_8:1, val_16:1, val_32:1, val_64:1, val_128:1;}; | |
| struct{unsigned _BitInt(4) lo_nybble:4, hi_nybble:4;}; | |
| }byte; | |
| typedef union{ | |
| unsigned _BitInt(16) word; | |
| uint16_t as_u16; | |
| int16_t as_i16; | |
| struct{bool bit_0:1, bit_1:1, bit_2:1, bit_3:1, bit_4:1, bit_5:1, bit_6:1, bit_7:1, bit_8:1, bit_9:1, bit_10:1, bit_11:1, bit_12:1, bit_13:1, bit_14:1, bit_15:1;}; | |
| struct{bool lsb:1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, msb:1;}; | |
| struct{bool val_1:1, val_2:1, val_4:1, val_8:1, val_16:1, val_32:1, val_64:1, val_128:1, val_256:1, val_512:1, val_1024:1, val_2048:1, val_4096:1, val_8192:1, val_16384:1, val_32768:1;}; | |
| struct{unsigned _BitInt(4) lo_nybble:4, :4, :4, hi_nybble:4;}; | |
| struct{byte lo_byte, hi_byte;}; | |
| byte bytes[2]; | |
| }word; | |
| typedef union{ | |
| unsigned _BitInt(32) dword; | |
| uint32_t as_u32; | |
| int32_t as_i32; | |
| struct{bool bit_0:1, bit_1:1, bit_2:1, bit_3:1, bit_4:1, bit_5:1, bit_6:1, bit_7:1, bit_8:1, bit_9:1, bit_10:1, bit_11:1, bit_12:1, bit_13:1, bit_14:1, bit_15:1, bit_16:1, bit_17:1, bit_18:1, bit_19:1, bit_21:1, bit_22:1, bit_23:1, bit_24:1, bit_25:1, bit_26:1, bit_27:1, bit_28:1, bit_29:1, bit_30:1, bit_31:1;}; | |
| struct{bool lsb:1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, msb:1;}; | |
| struct{bool val_1:1, val_2:1, val_4:1, val_8:1, val_16:1, val_32:1, val_64:1, val_128:1, val_256:1, val_512:1, val_1024:1, val_2048:1, val_4096:1, val_8192:1, val_16384:1, val_32768:1, val_65536:1, val_131072:1, val_262144:1, val_524288:1, val_1048576:1, val_2097152:1, val_4194304:1, val_8388608:1, val_16777216:1, val_33554432:1, val_67108864:1, val_134217728:1, val_268435456:1, val_536870912:1, val_1073741824:1, val_2147483648:1;}; | |
| struct{unsigned _BitInt(4) lo_nybble:4, :4, :4, :4, :4, :4, :4, hi_nybble:4;}; | |
| struct{byte lo_byte; uint8_t:8, :8; byte hi_byte;}; | |
| struct{word lo_word, hi_word;}; | |
| byte bytes[4]; | |
| word words[2]; | |
| }dword; | |
| typedef union{ | |
| unsigned _BitInt(64) qword; | |
| uint64_t as_u64; | |
| int64_t as_i64; | |
| struct{bool bit_0:1, bit_1:1, bit_2:1, bit_3:1, bit_4:1, bit_5:1, bit_6:1, bit_7:1, bit_8:1, bit_9:1, bit_10:1, bit_11:1, bit_12:1, bit_13:1, bit_14:1, bit_15:1, bit_16:1, bit_17:1, bit_18:1, bit_19:1, bit_20:1, bit_21:1, bit_22:1, bit_23:1, bit_24:1, bit_25:1, bit_26:1, bit_27:1, bit_28:1, bit_29:1, bit_30:1, bit_31:1, bit_32:1, bit_33:1, bit_34:1, bit_35:1, bit_36:1, bit_37:1, bit_38:1, bit_39:1, bit_40:1, bit_41:1, bit_42:1, bit_43:1, bit_44:1, bit_45:1, bit_46:1, bit_47:1, bit_48:1, bit_49:1, bit_50:1, bit_51:1, bit_52:1, bit_53:1, bit_54:1, bit_55:1, bit_56:1, bit_57:1, bit_58:1, bit_59:1, bit_60:1, bit_61:1, bit_62:1, bit_63:1;}; | |
| struct{bool lsb:1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, msb:1;}; | |
| struct{bool val_1:1, val_2:1, val_4:1, val_8:1, val_16:1, val_32:1, val_64:1, val_128:1, val_256:1, val_512:1, val_1024:1, val_2048:1, val_4096:1, val_8192:1, val_16384:1, val_32768:1, val_65536:1, val_131072:1, val_262144:1, val_524288:1, val_1048576:1, val_2097152:1, val_4194304:1, val_8388608:1, val_16777216:1, val_33554432:1, val_67108864:1, val_134217728:1, val_268435456:1, val_536870912:1, val_1073741824:1, val_2147483648:1, val_4294967296:1, val_8589934592:1, val_17179869184:1, val_34359738368:1, val_68719476736:1, val_137438953472:1, val_274877906944:1, val_549755813888:1, val_1099511627776:1, val_2199023255552:1, val_4398046511104:1, val_8796093022208:1, val_17592186044416:1, val_35184372088832:1, val_70368744177664:1, val_140737488355328:1, val_281474976710656:1, val_562949953421312:1, val_1125899906842624:1, val_2251799813685248:1, val_4503599627370496:1, val_9007199254740992:1, val_18014398509481984:1, val_36028797018963968:1, val_72057594037927936:1, val_144115188075855872:1, val_288230376151711744:1, val_576460752303423488:1, val_1152921504606846976:1, val_2305843009213693952:1, val_4611686018427387904:1, val_9223372036854775808:1;}; | |
| struct{unsigned _BitInt(4) lo_nybble:4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, hi_nybble:4;}; | |
| struct{byte lo_byte; uint8_t:8, :8, :8, :8, :8, :8; byte hi_byte;}; | |
| struct{word lo_word; uint16_t:16, :16; word hi_word;}; | |
| struct{dword lo_dword, hi_dword;}; | |
| byte bytes[8]; | |
| word words[4]; | |
| dword dwords[2]; | |
| }qword; | |
| typedef union{ | |
| unsigned _BitInt(128) qword; | |
| unsigned __int128 as_u128; | |
| __int128 as_i128; | |
| struct{bool bit_0:1, bit_1:1, bit_2:1, bit_3:1, bit_4:1, bit_5:1, bit_6:1, bit_7:1, bit_8:1, bit_9:1, bit_10:1, bit_11:1, bit_12:1, bit_13:1, bit_14:1, bit_15:1, bit_16:1, bit_17:1, bit_18:1, bit_19:1, bit_20:1, bit_21:1, bit_22:1, bit_23:1, bit_24:1, bit_25:1, bit_26:1, bit_27:1, bit_28:1, bit_29:1, bit_30:1, bit_31:1, bit_32:1, bit_33:1, bit_34:1, bit_35:1, bit_36:1, bit_37:1, bit_38:1, bit_39:1, bit_40:1, bit_41:1, bit_42:1, bit_43:1, bit_44:1, bit_45:1, bit_46:1, bit_47:1, bit_48:1, bit_49:1, bit_50:1, bit_51:1, bit_52:1, bit_53:1, bit_54:1, bit_55:1, bit_56:1, bit_57:1, bit_58:1, bit_59:1, bit_60:1, bit_61:1, bit_62:1, bit_63:1, bit_64:1, bit_65:1, bit_66:1, bit_67:1, bit_68:1, bit_69:1, bit_70:1, bit_71:1, bit_72:1, bit_73:1, bit_74:1, bit_75:1, bit_76:1, bit_77:1, bit_78:1, bit_79:1, bit_80:1, bit_81:1, bit_82:1, bit_83:1, bit_84:1, bit_85:1, bit_86:1, bit_87:1, bit_88:1, bit_89:1, bit_90:1, bit_91:1, bit_92:1, bit_93:1, bit_94:1, bit_95:1, bit_96:1, bit_97:1, bit_98:1, bit_99:1, bit_100:1, bit_101:1, bit_102:1, bit_103:1, bit_104:1, bit_105:1, bit_106:1, bit_107:1, bit_108:1, bit_109:1, bit_110:1, bit_111:1, bit_112:1, bit_113:1, bit_114:1, bit_115:1, bit_116:1, bit_117:1, bit_118:1, bit_119:1, bit_120:1, bit_121:1, bit_122:1, bit_123:1, bit_124:1, bit_125:1, bit_126:1, bit_127:1;}; | |
| struct{bool lsb:1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, msb:1;}; | |
| struct{bool val_1:1, val_2:1, val_4:1, val_8:1, val_16:1, val_32:1, val_64:1, val_128:1, val_256:1, val_512:1, val_1024:1, val_2048:1, val_4096:1, val_8192:1, val_16384:1, val_32768:1, val_65536:1, val_131072:1, val_262144:1, val_524288:1, val_1048576:1, val_2097152:1, val_4194304:1, val_8388608:1, val_16777216:1, val_33554432:1, val_67108864:1, val_134217728:1, val_268435456:1, val_536870912:1, val_1073741824:1, val_2147483648:1, val_4294967296:1, val_8589934592:1, val_17179869184:1, val_34359738368:1, val_68719476736:1, val_137438953472:1, val_274877906944:1, val_549755813888:1, val_1099511627776:1, val_2199023255552:1, val_4398046511104:1, val_8796093022208:1, val_17592186044416:1, val_35184372088832:1, val_70368744177664:1, val_140737488355328:1, val_281474976710656:1, val_562949953421312:1, val_1125899906842624:1, val_2251799813685248:1, val_4503599627370496:1, val_9007199254740992:1, val_18014398509481984:1, val_36028797018963968:1, val_72057594037927936:1, val_144115188075855872:1, val_288230376151711744:1, val_576460752303423488:1, val_1152921504606846976:1, val_2305843009213693952:1, val_4611686018427387904:1, val_9223372036854775808:1, val_18446744073709551616:1, val_36893488147419103232:1, val_73786976294838206464:1, val_147573952589676412928:1, val_295147905179352825856:1, val_590295810358705651712:1, val_1180591620717411303424:1, val_2361183241434822606848:1, val_4722366482869645213696:1, val_9444732965739290427392:1, val_18889465931478580854784:1, val_37778931862957161709568:1, val_75557863725914323419136:1, val_151115727451828646838272:1, val_302231454903657293676544:1, val_604462909807314587353088:1, val_1208925819614629174706176:1, val_2417851639229258349412352:1, val_4835703278458516698824704:1, val_9671406556917033397649408:1, val_19342813113834066795298816:1, val_38685626227668133590597632:1, val_77371252455336267181195264:1, val_154742504910672534362390528:1, val_309485009821345068724781056:1, val_618970019642690137449562112:1, val_1237940039285380274899124224:1, val_2475880078570760549798248448:1, val_4951760157141521099596496896:1, val_9903520314283042199192993792:1, val_19807040628566084398385987584:1, val_39614081257132168796771975168:1, val_79228162514264337593543950336:1, val_158456325028528675187087900672:1, val_316912650057057350374175801344:1, val_633825300114114700748351602688:1, val_1267650600228229401496703205376:1, val_2535301200456458802993406410752:1, val_5070602400912917605986812821504:1, val_10141204801825835211973625643008:1, val_20282409603651670423947251286016:1, val_40564819207303340847894502572032:1, val_81129638414606681695789005144064:1, val_162259276829213363391578010288128:1, val_324518553658426726783156020576256:1, val_649037107316853453566312041152512:1, val_1298074214633706907132624082305024:1, val_2596148429267413814265248164610048:1, val_5192296858534827628530496329220096:1, val_10384593717069655257060992658440192:1, val_20769187434139310514121985316880384:1, val_41538374868278621028243970633760768:1, val_83076749736557242056487941267521536:1, val_166153499473114484112975882535043072:1, val_332306998946228968225951765070086144:1, val_664613997892457936451903530140172288:1, val_1329227995784915872903807060280344576:1, val_2658455991569831745807614120560689152:1, val_5316911983139663491615228241121378304:1, val_10633823966279326983230456482242756608:1, val_21267647932558653966460912964485513216:1, val_42535295865117307932921825928971026432:1, val_85070591730234615865843651857942052864:1;}; | |
| struct{unsigned _BitInt(4) lo_nybble:4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, hi_nybble:4;}; | |
| struct{byte lo_byte; uint8_t:8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8; byte hi_byte;}; | |
| struct{word lo_word; uint16_t:16, :16, :16, :16; word hi_word;}; | |
| struct{dword lo_dword; uint32_t:32, :32;dword hi_dword;}; | |
| struct{dword lo_qword, hi_qword;}; | |
| byte bytes[16]; | |
| word words[8]; | |
| dword dwords[4]; | |
| qword qwords[2]; | |
| uint8_t as_vec16u8 vector_attr_clang_or_gcc_with_fallback(16, 16); | |
| int8_t as_vec16i8 vector_attr_clang_or_gcc_with_fallback(16, 16); | |
| uint16_t as_vec8u16 vector_attr_clang_or_gcc_with_fallback(8, 16); | |
| int16_t as_vec8i16 vector_attr_clang_or_gcc_with_fallback(8, 16); | |
| uint32_t as_vec4u32 vector_attr_clang_or_gcc_with_fallback(4, 16); | |
| int32_t as_vec4i32 vector_attr_clang_or_gcc_with_fallback(4, 16); | |
| uint64_t as_vec2u64 vector_attr_clang_or_gcc_with_fallback(2, 16); | |
| int64_t as_vec2i64 vector_attr_clang_or_gcc_with_fallback(2, 16); | |
| __m128i as_m128i; | |
| }oword; | |
| typedef union{ | |
| unsigned _BitInt(256) yword; | |
| struct{bool bit_0:1, bit_1:1, bit_2:1, bit_3:1, bit_4:1, bit_5:1, bit_6:1, bit_7:1, bit_8:1, bit_9:1, bit_10:1, bit_11:1, bit_12:1, bit_13:1, bit_14:1, bit_15:1, bit_16:1, bit_17:1, bit_18:1, bit_19:1, bit_20:1, bit_21:1, bit_22:1, bit_23:1, bit_24:1, bit_25:1, bit_26:1, bit_27:1, bit_28:1, bit_29:1, bit_30:1, bit_31:1, bit_32:1, bit_33:1, bit_34:1, bit_35:1, bit_36:1, bit_37:1, bit_38:1, bit_39:1, bit_40:1, bit_41:1, bit_42:1, bit_43:1, bit_44:1, bit_45:1, bit_46:1, bit_47:1, bit_48:1, bit_49:1, bit_50:1, bit_51:1, bit_52:1, bit_53:1, bit_54:1, bit_55:1, bit_56:1, bit_57:1, bit_58:1, bit_59:1, bit_60:1, bit_61:1, bit_62:1, bit_63:1, bit_64:1, bit_65:1, bit_66:1, bit_67:1, bit_68:1, bit_69:1, bit_70:1, bit_71:1, bit_72:1, bit_73:1, bit_74:1, bit_75:1, bit_76:1, bit_77:1, bit_78:1, bit_79:1, bit_80:1, bit_81:1, bit_82:1, bit_83:1, bit_84:1, bit_85:1, bit_86:1, bit_87:1, bit_88:1, bit_89:1, bit_90:1, bit_91:1, bit_92:1, bit_93:1, bit_94:1, bit_95:1, bit_96:1, bit_97:1, bit_98:1, bit_99:1, bit_100:1, bit_101:1, bit_102:1, bit_103:1, bit_104:1, bit_105:1, bit_106:1, bit_107:1, bit_108:1, bit_109:1, bit_110:1, bit_111:1, bit_112:1, bit_113:1, bit_114:1, bit_115:1, bit_116:1, bit_117:1, bit_118:1, bit_119:1, bit_120:1, bit_121:1, bit_122:1, bit_123:1, bit_124:1, bit_125:1, bit_126:1, bit_127:1, bit_128:1, bit_129:1, bit_130:1, bit_131:1, bit_132:1, bit_133:1, bit_134:1, bit_135:1, bit_136:1, bit_137:1, bit_138:1, bit_139:1, bit_140:1, bit_141:1, bit_142:1, bit_143:1, bit_144:1, bit_145:1, bit_146:1, bit_147:1, bit_148:1, bit_149:1, bit_150:1, bit_151:1, bit_152:1, bit_153:1, bit_154:1, bit_155:1, bit_156:1, bit_157:1, bit_158:1, bit_159:1, bit_160:1, bit_161:1, bit_162:1, bit_163:1, bit_164:1, bit_165:1, bit_166:1, bit_167:1, bit_168:1, bit_169:1, bit_170:1, bit_171:1, bit_172:1, bit_173:1, bit_174:1, bit_175:1, bit_176:1, bit_177:1, bit_178:1, bit_179:1, bit_180:1, bit_181:1, bit_182:1, bit_183:1, bit_184:1, bit_185:1, bit_186:1, bit_187:1, bit_188:1, bit_189:1, bit_190:1, bit_191:1, bit_192:1, bit_193:1, bit_194:1, bit_195:1, bit_196:1, bit_197:1, bit_198:1, bit_199:1, bit_200:1, bit_201:1, bit_202:1, bit_203:1, bit_204:1, bit_205:1, bit_206:1, bit_207:1, bit_208:1, bit_209:1, bit_210:1, bit_211:1, bit_212:1, bit_213:1, bit_214:1, bit_215:1, bit_216:1, bit_217:1, bit_218:1, bit_219:1, bit_220:1, bit_221:1, bit_222:1, bit_223:1, bit_224:1, bit_225:1, bit_226:1, bit_227:1, bit_228:1, bit_229:1, bit_230:1, bit_231:1, bit_232:1, bit_233:1, bit_234:1, bit_235:1, bit_236:1, bit_237:1, bit_238:1, bit_239:1, bit_240:1, bit_241:1, bit_242:1, bit_243:1, bit_244:1, bit_245:1, bit_246:1, bit_247:1, bit_248:1, bit_249:1, bit_250:1, bit_251:1, bit_252:1, bit_253:1, bit_254:1, bit_255:1;}; | |
| struct{bool lsb:1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, msb:1;}; | |
| struct{unsigned _BitInt(4) lo_nybble:4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, hi_nybble:4;}; | |
| struct{byte lo_byte; uint8_t:8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8; byte hi_byte;}; | |
| struct{word lo_word; uint16_t:16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16; word hi_word;}; | |
| struct{dword lo_dword; uint32_t:32, :32, :32, :32, :32, :32;dword hi_dword;}; | |
| struct{dword lo_qword; uint64_t:64, :64; dword hi_qword;}; | |
| struct{oword lo_oword, hi_oword;}; | |
| byte bytes[32]; | |
| word words[16]; | |
| dword dwords[8]; | |
| qword qwords[4]; | |
| oword owords[2]; | |
| uint8_t as_vec32u8 vector_attr_clang_or_gcc_with_fallback(32, 32); | |
| int8_t as_vec32i8 vector_attr_clang_or_gcc_with_fallback(32, 32); | |
| uint16_t as_vec16u16 vector_attr_clang_or_gcc_with_fallback(16, 32); | |
| int16_t as_vec16i16 vector_attr_clang_or_gcc_with_fallback(16, 32); | |
| uint32_t as_vec8u32 vector_attr_clang_or_gcc_with_fallback(8, 32); | |
| int32_t as_vec8i32 vector_attr_clang_or_gcc_with_fallback(8, 32); | |
| uint64_t as_vec4u64 vector_attr_clang_or_gcc_with_fallback(4, 32); | |
| int64_t as_vec4i64 vector_attr_clang_or_gcc_with_fallback(4, 32); | |
| unsigned __int128 as_vec2u128 vector_attr_clang_or_gcc_with_fallback(2, 32); | |
| __int128 as_vec2i128 vector_attr_clang_or_gcc_with_fallback(2, 32); | |
| __m256i as_m256i; | |
| }yword; | |
| typedef union{ | |
| unsigned _BitInt(512) yword; | |
| struct{bool bit_0:1, bit_1:1, bit_2:1, bit_3:1, bit_4:1, bit_5:1, bit_6:1, bit_7:1, bit_8:1, bit_9:1, bit_10:1, bit_11:1, bit_12:1, bit_13:1, bit_14:1, bit_15:1, bit_16:1, bit_17:1, bit_18:1, bit_19:1, bit_20:1, bit_21:1, bit_22:1, bit_23:1, bit_24:1, bit_25:1, bit_26:1, bit_27:1, bit_28:1, bit_29:1, bit_30:1, bit_31:1, bit_32:1, bit_33:1, bit_34:1, bit_35:1, bit_36:1, bit_37:1, bit_38:1, bit_39:1, bit_40:1, bit_41:1, bit_42:1, bit_43:1, bit_44:1, bit_45:1, bit_46:1, bit_47:1, bit_48:1, bit_49:1, bit_50:1, bit_51:1, bit_52:1, bit_53:1, bit_54:1, bit_55:1, bit_56:1, bit_57:1, bit_58:1, bit_59:1, bit_60:1, bit_61:1, bit_62:1, bit_63:1, bit_64:1, bit_65:1, bit_66:1, bit_67:1, bit_68:1, bit_69:1, bit_70:1, bit_71:1, bit_72:1, bit_73:1, bit_74:1, bit_75:1, bit_76:1, bit_77:1, bit_78:1, bit_79:1, bit_80:1, bit_81:1, bit_82:1, bit_83:1, bit_84:1, bit_85:1, bit_86:1, bit_87:1, bit_88:1, bit_89:1, bit_90:1, bit_91:1, bit_92:1, bit_93:1, bit_94:1, bit_95:1, bit_96:1, bit_97:1, bit_98:1, bit_99:1, bit_100:1, bit_101:1, bit_102:1, bit_103:1, bit_104:1, bit_105:1, bit_106:1, bit_107:1, bit_108:1, bit_109:1, bit_110:1, bit_111:1, bit_112:1, bit_113:1, bit_114:1, bit_115:1, bit_116:1, bit_117:1, bit_118:1, bit_119:1, bit_120:1, bit_121:1, bit_122:1, bit_123:1, bit_124:1, bit_125:1, bit_126:1, bit_127:1, bit_128:1, bit_129:1, bit_130:1, bit_131:1, bit_132:1, bit_133:1, bit_134:1, bit_135:1, bit_136:1, bit_137:1, bit_138:1, bit_139:1, bit_140:1, bit_141:1, bit_142:1, bit_143:1, bit_144:1, bit_145:1, bit_146:1, bit_147:1, bit_148:1, bit_149:1, bit_150:1, bit_151:1, bit_152:1, bit_153:1, bit_154:1, bit_155:1, bit_156:1, bit_157:1, bit_158:1, bit_159:1, bit_160:1, bit_161:1, bit_162:1, bit_163:1, bit_164:1, bit_165:1, bit_166:1, bit_167:1, bit_168:1, bit_169:1, bit_170:1, bit_171:1, bit_172:1, bit_173:1, bit_174:1, bit_175:1, bit_176:1, bit_177:1, bit_178:1, bit_179:1, bit_180:1, bit_181:1, bit_182:1, bit_183:1, bit_184:1, bit_185:1, bit_186:1, bit_187:1, bit_188:1, bit_189:1, bit_190:1, bit_191:1, bit_192:1, bit_193:1, bit_194:1, bit_195:1, bit_196:1, bit_197:1, bit_198:1, bit_199:1, bit_200:1, bit_201:1, bit_202:1, bit_203:1, bit_204:1, bit_205:1, bit_206:1, bit_207:1, bit_208:1, bit_209:1, bit_210:1, bit_211:1, bit_212:1, bit_213:1, bit_214:1, bit_215:1, bit_216:1, bit_217:1, bit_218:1, bit_219:1, bit_220:1, bit_221:1, bit_222:1, bit_223:1, bit_224:1, bit_225:1, bit_226:1, bit_227:1, bit_228:1, bit_229:1, bit_230:1, bit_231:1, bit_232:1, bit_233:1, bit_234:1, bit_235:1, bit_236:1, bit_237:1, bit_238:1, bit_239:1, bit_240:1, bit_241:1, bit_242:1, bit_243:1, bit_244:1, bit_245:1, bit_246:1, bit_247:1, bit_248:1, bit_249:1, bit_250:1, bit_251:1, bit_252:1, bit_253:1, bit_254:1, bit_255:1, bit_256:1, bit_257:1, bit_258:1, bit_259:1, bit_260:1, bit_261:1, bit_262:1, bit_263:1, bit_264:1, bit_265:1, bit_266:1, bit_267:1, bit_268:1, bit_269:1, bit_270:1, bit_271:1, bit_272:1, bit_273:1, bit_274:1, bit_275:1, bit_276:1, bit_277:1, bit_278:1, bit_279:1, bit_280:1, bit_281:1, bit_282:1, bit_283:1, bit_284:1, bit_285:1, bit_286:1, bit_287:1, bit_288:1, bit_289:1, bit_290:1, bit_291:1, bit_292:1, bit_293:1, bit_294:1, bit_295:1, bit_296:1, bit_297:1, bit_298:1, bit_299:1, bit_300:1, bit_301:1, bit_302:1, bit_303:1, bit_304:1, bit_305:1, bit_306:1, bit_307:1, bit_308:1, bit_309:1, bit_310:1, bit_311:1, bit_312:1, bit_313:1, bit_314:1, bit_315:1, bit_316:1, bit_317:1, bit_318:1, bit_319:1, bit_320:1, bit_321:1, bit_322:1, bit_323:1, bit_324:1, bit_325:1, bit_326:1, bit_327:1, bit_328:1, bit_329:1, bit_330:1, bit_331:1, bit_332:1, bit_333:1, bit_334:1, bit_335:1, bit_336:1, bit_337:1, bit_338:1, bit_339:1, bit_340:1, bit_341:1, bit_342:1, bit_343:1, bit_344:1, bit_345:1, bit_346:1, bit_347:1, bit_348:1, bit_349:1, bit_350:1, bit_351:1, bit_352:1, bit_353:1, bit_354:1, bit_355:1, bit_356:1, bit_357:1, bit_358:1, bit_359:1, bit_360:1, bit_361:1, bit_362:1, bit_363:1, bit_364:1, bit_365:1, bit_366:1, bit_367:1, bit_368:1, bit_369:1, bit_370:1, bit_371:1, bit_372:1, bit_373:1, bit_374:1, bit_375:1, bit_376:1, bit_377:1, bit_378:1, bit_379:1, bit_380:1, bit_381:1, bit_382:1, bit_383:1, bit_384:1, bit_385:1, bit_386:1, bit_387:1, bit_388:1, bit_389:1, bit_390:1, bit_391:1, bit_392:1, bit_393:1, bit_394:1, bit_395:1, bit_396:1, bit_397:1, bit_398:1, bit_399:1, bit_400:1, bit_401:1, bit_402:1, bit_403:1, bit_404:1, bit_405:1, bit_406:1, bit_407:1, bit_408:1, bit_409:1, bit_410:1, bit_411:1, bit_412:1, bit_413:1, bit_414:1, bit_415:1, bit_416:1, bit_417:1, bit_418:1, bit_419:1, bit_420:1, bit_421:1, bit_422:1, bit_423:1, bit_424:1, bit_425:1, bit_426:1, bit_427:1, bit_428:1, bit_429:1, bit_430:1, bit_431:1, bit_432:1, bit_433:1, bit_434:1, bit_435:1, bit_436:1, bit_437:1, bit_438:1, bit_439:1, bit_440:1, bit_441:1, bit_442:1, bit_443:1, bit_444:1, bit_445:1, bit_446:1, bit_447:1, bit_448:1, bit_449:1, bit_450:1, bit_451:1, bit_452:1, bit_453:1, bit_454:1, bit_455:1, bit_456:1, bit_457:1, bit_458:1, bit_459:1, bit_460:1, bit_461:1, bit_462:1, bit_463:1, bit_464:1, bit_465:1, bit_466:1, bit_467:1, bit_468:1, bit_469:1, bit_470:1, bit_471:1, bit_472:1, bit_473:1, bit_474:1, bit_475:1, bit_476:1, bit_477:1, bit_478:1, bit_479:1, bit_480:1, bit_481:1, bit_482:1, bit_483:1, bit_484:1, bit_485:1, bit_486:1, bit_487:1, bit_488:1, bit_489:1, bit_490:1, bit_491:1, bit_492:1, bit_493:1, bit_494:1, bit_495:1, bit_496:1, bit_497:1, bit_498:1, bit_499:1, bit_500:1, bit_501:1, bit_502:1, bit_503:1, bit_504:1, bit_505:1, bit_506:1, bit_507:1, bit_508:1, bit_509:1, bit_510:1, bit_511:1;}; | |
| struct{bool lsb:1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, :1, msb:1;}; | |
| struct{unsigned _BitInt(4) lo_nybble:4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, :4, hi_nybble:4;}; | |
| struct{byte lo_byte; uint8_t:8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8, :8; byte hi_byte;}; | |
| struct{word lo_word; uint16_t:16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16, :16; word hi_word;}; | |
| struct{dword lo_dword; uint32_t:32, :32, :32, :32, :32, :32, :32, :32, :32, :32, :32, :32, :32, :32;dword hi_dword;}; | |
| struct{dword lo_qword; uint64_t:64, :64, :64, :64, :64, :64; dword hi_qword;}; | |
| struct{oword lo_oword; unsigned __int128:128, :128; oword hi_oword;}; | |
| struct{yword lo_yword, hi_yword;}; | |
| byte bytes[64]; | |
| word words[32]; | |
| dword dwords[16]; | |
| qword qwords[8]; | |
| oword owords[4]; | |
| yword ywords[2]; | |
| uint8_t as_vec64u8 vector_attr_clang_or_gcc_with_fallback(64, 64); | |
| int8_t as_vec64i8 vector_attr_clang_or_gcc_with_fallback(64, 64); | |
| uint16_t as_vec32u16 vector_attr_clang_or_gcc_with_fallback(32, 64); | |
| int16_t as_vec32i16 vector_attr_clang_or_gcc_with_fallback(32, 64); | |
| uint32_t as_vec16u32 vector_attr_clang_or_gcc_with_fallback(16, 64); | |
| int32_t as_vec16i32 vector_attr_clang_or_gcc_with_fallback(16, 64); | |
| uint64_t as_vec8u64 vector_attr_clang_or_gcc_with_fallback(8, 64); | |
| int64_t as_vec8i64 vector_attr_clang_or_gcc_with_fallback(8, 64); | |
| unsigned __int128 as_vec4u128 vector_attr_clang_or_gcc_with_fallback(4, 64); | |
| __int128 as_vec4i128 vector_attr_clang_or_gcc_with_fallback(4, 64); | |
| #ifdef __clang__ | |
| unsigned _BitInt(256) as_vec2u256 [[clang::ext_vector_type(2)]]; | |
| _BitInt(256) as_vec2i256 [[clang::ext_vector_type(2)]]; | |
| #endif | |
| __m512i as_m512i; | |
| }zword; | |
| _Static_assert(sizeof(byte) == 1); | |
| _Static_assert(sizeof(word) == 2); | |
| _Static_assert(sizeof(dword) == 4); | |
| _Static_assert(sizeof(qword) == 8); | |
| _Static_assert(sizeof(oword) == 16); | |
| _Static_assert(sizeof(yword) == 32); | |
| _Static_assert(sizeof(zword) == 64); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment