Hi Carl, On Thu, Mar 12, 2020 at 09:57:06AM -0700, Carl Love wrote: > > From the GCC manual: > > > > -mmfcrf p4 2.01 > > -mpopcntb p5 2.02 > > -mfprnd p5+ 2.04 ("info gcc" says 2.03, that's wrong? But the > > ISA > > says this is 2.02 even? Now what!) > > -mcmpb p6 2.05 > > -mpopcntd p7 2.06 > > > > (and there are more, in fact). > > <snip> > > > It would be better if you disallowed this option combination? Don't > > allow an options that says ISA X insns are allowed, but ISA Y insns > > are > > not, with Y < X. In this case X is 2.06 and Y is 2.02 or 2.03 or > > 2.04. > > My fix was very specific to the builtin and the command line argument > as pointed out in the bug report. > > Sounds like you are implying we should take a much more general > approach to checking the command line args against the ISA level. Such > a test would need to go somewhere else not in the builtin expansion > call. We may want a routine that just does these checks which can then > be called from the appropriate place. Let me go look at the GCC manual > and see about what all needs testing.
Yes, but only for this fprnd vs. 2.06 (vsx) situation. Like we already have: if (TARGET_DIRECT_MOVE && !TARGET_VSX) { if (rs6000_isa_flags_explicit & OPTION_MASK_DIRECT_MOVE) error ("%qs requires %qs", "-mdirect-move", "-mvsx"); rs6000_isa_flags &= ~OPTION_MASK_DIRECT_MOVE; } (and many other cases there), we could do this there as well (so, don't allow -mvsx (maybe via a -mcpu= etc.) at the same time as -mno-fprnd). Do you see problems with that? Segher