On Mon, Sep 19, 2022 at 10:57:25AM +0200, Richard Biener wrote: > For even more uglification and avoiding of the cache effect mentioned below > we could squeeze the 4 bits into the union members, at least on 64bit > platforms > (probably not on 32bit ones) ...
Maybe, but it would limit the offsets we can represent at least: The union is union { _Unwind_Word reg; _Unwind_Sword offset; const unsigned char *exp; } loc; I guess reg is always pretty small (< 153 or so on most targets), so we could squeeze the 4 bits in there, offset would need to be multiplied by 16 because we can't rely on all offsets being multiples of 16, and exp could be through performing aligned allocations for the expression. That said, while it could save a few bytes and the cache effects, on the other side, we'd need to clear more bytes. On x86_64 the size would be 240 bytes instead of 264 bytes, but we'd need to clear those 240 bytes instead of 120 (ok, unless we want to store just the bytes containing the 4 bits but then it would be even more stores). Jakub