11 ms·
Both clang and gcc do actually generate TBZ/TBNZ for checking a bool: https://godbolt.org/z/K6evhaxGT https://godbolt.org/z/K6evhaxGT
by dzaima 1mo ago
Both clang and gcc do actually generate TBZ/TBNZ for checking a bool: https://godbolt.org/z/K6evhaxGT https://godbolt.org/z/K6evhaxGT
- dzaima 1mo agoSome stats on an aarch64 binary of my current main project (1.6MB .text, 6600 symbols as per whatever "nm the-binary | wc -l" includes, from "objdump -d the-binary"): 19546 /tbn?z/ 18029 /tbn?z.*, #0x0/ (but this includes boolean checks) 224 /tbn?z.*, #0x1f/ (i.e. 32-bit x<0) 1139 /tbn?z.*, #0x3f/ (i.e. 64-bit x<0) 154 other immediates Said project doesn't do fixed bitfields much (there are some, but a chunk of those test multiple bits) so unsurprisingly not much. (I could imagine that the kernel has significantly more, but it's an edge-case (though perhaps an important one) of being basically massive amounts of fixed configurable glue)
- camel-cdr 1mo agoDid a quick grep over object files of a half build defconfig kernel: total: 15510 #0: 3720 #31: 2247 #1: 1349 #21: 1208 #2: 810 #3: 524 #8: 493 ...
- dzaima 1mo agoThat is quite a good bit more evenly-spread (the "..." is 5159 instrs). Wonder what's up with bit 21; if whatever uses it so much is repositionable (and not an aarch64-specific thing), could save like 2KB on x86-64 via putting it in the low 8 bits instead.