On 02/04/2020 17:52, Tamar Christina wrote: > Hi All, > > It is currently impossible to use fp16 on any architecture higher than > Armv8.3-a > due to a bug in options canonization. This bug results in the fp16 flag not > being emitted in the assembly when it should have been. > > This is caused by a complicated architectural requirement at Armv8.4-a. On > Armv8.2-a and Armv8.3-a fp16fml is an optional extension and turning it on > turns > on both fp and fp16. However starting with Armv8.4-a fp16fml is mandatory if > fp16 is available, otherwise it's optional. > > In short this means that to enable fp16fml the smallest option that needs to > passed to the assembler is Armv8.4-a+fp16. > > The fix in this patch takes into account that an option may be on by default > in > an architecture, but that not all the bits required to use it are on by > default > in an architecture. In such cases the difference between the two are still > emitted to the assembler. > > Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. > > Ok for trunk? and backport to GCC 8 and 9 after some stew. > > Thanks, > Tamar > > gcc/ChangeLog: > > 2020-04-02 Tamar Christina <tamar.christ...@arm.com> > > PR target/94396 > * common/config/aarch64/aarch64-common.c > (aarch64_get_extension_string_for_isa_flags): Handle default flags. > > gcc/testsuite/ChangeLog: > > 2020-04-02 Tamar Christina <tamar.christ...@arm.com> > > PR target/94396 > * gcc.target/aarch64/options_set_11.c: New test. > * gcc.target/aarch64/options_set_12.c: New test. > * gcc.target/aarch64/options_set_13.c: New test. > * gcc.target/aarch64/options_set_14.c: New test. > * gcc.target/aarch64/options_set_15.c: New test. > * gcc.target/aarch64/options_set_16.c: New test. > * gcc.target/aarch64/options_set_17.c: New test. > * gcc.target/aarch64/options_set_18.c: New test. > * gcc.target/aarch64/options_set_19.c: New test. > * gcc.target/aarch64/options_set_20.c: New test. > * gcc.target/aarch64/options_set_21.c: New test. > * gcc.target/aarch64/options_set_22.c: New test. > * gcc.target/aarch64/options_set_23.c: New test. > * gcc.target/aarch64/options_set_24.c: New test. > * gcc.target/aarch64/options_set_25.c: New test. > * gcc.target/aarch64/options_set_26.c: New test. >
OK. R. PS. It's canonicalize, not canonize (this is not saintly code ;-). R.