There's no mention of what the bits of GNU_PROPERTY_X86_FEATURE_1_AND
actually mean (i.e. GNU_PROPERTY_X86_FEATURE_1_IBT et al are missing).
How this is different from GNU_PROPERTY_X86_FEATURE_2_USED also
doesn't become clear. (I additionally wonder in how far the apparently
purely informational GNU_PROPERTY_X86_*_USED are of actual practical
use.)
I further view the wording in the general descriptions ("have the
feature") as problematic wrt the subsequent use in *_USED and
*_NEEDED. What does "have the feature" mean there?
The "property missing" being folded with "bit is zero" also isn't
really satisfactory, as it renders the "bit is zero" case pretty
useless. If all contributing objects have a property, a bit being zero
ought to firmly mean "feature not used".
As expressed earlier (when discussing the gas implementation and its
shortcomings) I view GNU_PROPERTY_X86_FEATURE_2_{X,Y,Z}MM's descriptions
in particular as insufficient. It needs to be spelled out which of the
flags need setting for use of e.g. 128-bit VADDPS, including the
consideration of using the VEX encoding on 512-bit-capable hardware. It
further needs spelling out which of the flags, if any, should become
set for use of e.g. the memory form of VFPCLASS* (besides
GNU_PROPERTY_X86_FEATURE_2_MASK). This similarly applies to e.g. the
memory form of CVTPI2PD wrt GNU_PROPERTY_X86_FEATURE_2_MMX.
Further it wants clarifying which of GNU_PROPERTY_X86_FEATURE_2_{X87,MMX}
{,F}EMMS are expected to turn on.
I may have missed further special cases. Yet any ambiguity the spec
leaves will make it impossible to judge whether a particular behavior
(by any of the tools involved) is correct or buggy.
Finally I think that it isn't a good idea to mix register use indicators
with indicators of use of FXSR and XSAVE*.
Jan