On Mon, 2008-04-28 at 07:47 -0700, Mark Mitchell wrote: > Joel Sherrill wrote: > > >> 1. Make these tests say something about what capability they require, > >> with a dg-require directive, and then write autoconf-style tests run by > >> the testsuite to determine whether the current compiler has that > >> capability. For example, add a "dg-require-hard-float" directive, and > >> probe the compiler to see whether it can generate hard float, given all > >> the options in play.
Defining proc check_effective_target_whatever makes it possible to use "dg-require-effective-target whatever", or combinations of whatever with other effective targets. The proc can compile, and optionally run, a configuration test with the current set of options. I suppose it could even be used before and after dg-options to make sure that the test files compiled with those options will be compatible with support files compiled without those options, as in /* { dg-require-effective-target hard_float } */ /* { dg-options "-O2 -mcpu=405" } */ /* { dg-require-effective-target hard_float && ppc405 } */ > > That will not work on at least the *-rtems* configurations. > > We use one multilib'ed toolset configuration to support > > all variants within a family. So for the PowerPC, we actually > > do have support for [4567]xx, [58]xxx, etc. m68k includes > > coldfire, etc. > > There's no reason that we can't probe once per multilib. There are > already probes like that in the testsuite. The autoconfy-ness just > needs to be per-multilib. Right, the effective-target tests are usually run per-multilib. > > I think this would work. If you ended up with compiler > > settings that didn't match what the test required, then > > it could exit. How should it exit in this case? > > Just by doing "return 0;" from "main". > > > For the case we have been looking at, -mcpu=405 results > > in __PPC405__ being defined. If you are writing a CPU model > > specific test, you should know what the macro generated is. > > > > #if !defined(__PPC405__) > > XXX -- ?? what to do? > > #endif > > Here: > > #if !defined(__PPC405__) > int main() { return 0; } > #else > /* The real test goes here. */ > #endif > > > Would this work on the scan tests which look for particular > > assembly instructions? > > Probably not. Though, I suppose: > > #if !defined(__PPC405__) > asm("haha here is a 405 insn"); > #else > /* The real test goes here. */ > #endif > > might... It's easier, though, to just skip the test. Janis