Created by: khuey
Instructions with {sae} overload the EVEX.b bit to mean suppress-all(-floating-point)-exceptions. Instructions with {er} (which requires {sae}) further overload the EVEX.L/LL bits to specify one of four static embedded rounding modes: {rn-sae}, {rd-sae}, {ru-sae}, {rz-sae} (round nearest, round down, round up, and round zero respectively). When {er} is supported that variant is limited to a single fixed width of registers, though not always ZMM (e.g. the various *SS/*SD instructions).
{sae} and {er} are applicable only to reg/reg forms of instructions. For instructions that support both broadcast forms and {sae} (both of which are controlled by EVEX.b=1) it is the modrm byte that chooses the meaning of EVEX.b (by choosing whether this is a reg/reg or reg/mem instruction). Instructions that support both grow a new entry in the MOD_EXT table to distinguish the two forms. Instructions that only support broadcast or {sae}/{er} use the appropriate slot in the EVEX_Wb_EXT table. Some mechanical support (allowing evex_Wb_extensions to contain MOD_EXT entries and allowing fixed width TYPE_H and TYPE_V entries) is also required.
There's no API for manipulating these flags in this patch. I've merely added decoding support for them. This is enough to decode the relevant instructions that are currently ifdefed out in the binutils tests, though enabling those tests also requires fixing #4566 which I haven't done here.