| Index: gcc/gcc/testsuite/gcc.target/mips/mips.exp
|
| diff --git a/gcc/gcc/testsuite/gcc.target/mips/mips.exp b/gcc/gcc/testsuite/gcc.target/mips/mips.exp
|
| index 7befff5a1fae50a54163d7adf30c5b4d4268791d..02e031cd15c9741cc1b7826bef1b4f37e3eea61a 100644
|
| --- a/gcc/gcc/testsuite/gcc.target/mips/mips.exp
|
| +++ b/gcc/gcc/testsuite/gcc.target/mips/mips.exp
|
| @@ -137,13 +137,6 @@
|
| # For example, "isa_rev>=1" selects a MIPS32 or MIPS64 processor,
|
| # "isa=4" selects a MIPS IV processor, and so on.
|
| #
|
| -# If certain processor-specific extensions are not applicable to the
|
| -# test you can list them as !CPU in the isa or isa_rev options. For
|
| -# example, isa=64!octeon enforces MIPS64 while avoiding octeon. You
|
| -# can also use ! without an ISA value. For example
|
| -# isa=!octeon!loongson2e disables octeon and loongson2e if otherwise
|
| -# you would compile for one of them.
|
| -#
|
| # There are also the following special pseudo-options:
|
| #
|
| # isa=loongson
|
| @@ -152,6 +145,10 @@
|
| # addressing=absolute
|
| # force absolute addresses to be used
|
| #
|
| +# forbid_cpu=REGEXP
|
| +# forbid processors that match the given regexp; choose a
|
| +# generic ISA instead.
|
| +#
|
| #
|
| # In summary:
|
| #
|
| @@ -183,7 +180,36 @@
|
| # "-mips32r2" or "-mips64r2".
|
| #
|
| # (6) If you need to disable processor-specific extensions use
|
| -# isa=!CPU instead of forcing a generic ISA.
|
| +# forbid_cpu=REGEXP instead of forcing a generic ISA.
|
| +#
|
| +#
|
| +# Terminology
|
| +#
|
| +# Option group or just group:
|
| +# See comment before mips_option_groups.
|
| +#
|
| +# Test options:
|
| +# The options specified in dg-options.
|
| +#
|
| +# Explicit options:
|
| +# The options that were either passed to runtest as "multilib" options
|
| +# (e.g. -mips4 in --target_board=mips-sim-idt/-mips4) or specified as
|
| +# test options. Note that options in parenthesis (i.e. (-mips16)) are
|
| +# not explicit and can be omitted depending on the base options.
|
| +#
|
| +# Base options:
|
| +# Options that are on by default without being specified in dg-options,
|
| +# e.g. -march=mips64r2 for mipsisa64r2-elf or because they've been
|
| +# passed to runtest as "multilib" options.
|
| +#
|
| +# Option array:
|
| +# Many functions in this file work with option arrays. These are
|
| +# two-dimensional Tcl arrays where the first dimension can have three
|
| +# values: option, explicit_p or test_option_p. The second dimension is
|
| +# the name of the option group. "option" contains the name of the
|
| +# option that is in effect from this group. If no option is active it
|
| +# contains the empty string. The flags "explicit_p" and "test_option_p"
|
| +# are set for explicit and test options.
|
|
|
| # Exit immediately if this isn't a MIPS target.
|
| if ![istarget mips*-*-*] {
|
| @@ -194,8 +220,8 @@ if ![istarget mips*-*-*] {
|
| load_lib gcc-dg.exp
|
|
|
| # A list of GROUP REGEXP pairs. Each GROUP represents a logical group of
|
| -# options from which only option should be chosen. REGEXP matches all the
|
| -# options in that group; it is implicitly wrapped in "^(...)$".
|
| +# options from which only one option should be chosen. REGEXP matches all
|
| +# the options in that group; it is implicitly wrapped in "^(...)$".
|
| set mips_option_groups {
|
| abi "-mabi=.*"
|
| addressing "addressing=.*"
|
| @@ -203,6 +229,7 @@ set mips_option_groups {
|
| dump_pattern "-dp"
|
| endianness "-E(L|B)|-me(l|b)"
|
| float "-m(hard|soft)-float"
|
| + forbid_cpu "forbid_cpu=.*"
|
| fp "-mfp(32|64)"
|
| gp "-mgp(32|64)"
|
| long "-mlong(32|64)"
|
| @@ -234,6 +261,9 @@ foreach option {
|
| shared
|
| smartmips
|
| sym32
|
| + synci
|
| + relax-pic-calls
|
| + mcount-ra-address
|
| } {
|
| lappend mips_option_groups $option "-m(no-|)$option"
|
| }
|
| @@ -243,6 +273,7 @@ foreach option {
|
| branch-cost
|
| code-readable
|
| r10k-cache-barrier
|
| + tune
|
| } {
|
| lappend mips_option_groups $option "-m$option=.*"
|
| }
|
| @@ -441,7 +472,7 @@ proc mips_option { upstatus group } {
|
| return $status(option,$group)
|
| }
|
|
|
| -# If the default options for this test run include an option in group GROUP,
|
| +# If the base options for this test run include an option in group GROUP,
|
| # return that option, otherwise return "".
|
| proc mips_original_option { group } {
|
| global mips_base_options
|
| @@ -449,8 +480,8 @@ proc mips_original_option { group } {
|
| return [mips_option mips_base_options $group]
|
| }
|
|
|
| -# Return true if the test described up UPSTATUS requires a specific
|
| -# option in group GROUP.
|
| +# Return true if the test described by UPSTATUS requires a specific
|
| +# option in group GROUP. UPSTATUS describes the option status.
|
| proc mips_test_option_p { upstatus group } {
|
| upvar $upstatus status
|
|
|
| @@ -744,6 +775,8 @@ proc mips-dg-finish {} {
|
| # | |
|
| # -mno-sym32 -msym32
|
| # | |
|
| +# -mrelax-pic-calls -mno-relax-pic-calls
|
| +# | |
|
| # -fpic -fno-pic
|
| # | |
|
| # -mshared -mno-shared
|
| @@ -804,6 +837,9 @@ proc mips-dg-options { args } {
|
| mips_option_dependency options "-mips3d" "-mpaired-single"
|
| mips_option_dependency options "-mpaired-single" "-mfp64"
|
| mips_option_dependency options "-mfp64" "-mhard-float"
|
| + mips_option_dependency options "-mrelax-pic-calls" "-mno-plt"
|
| + mips_option_dependency options "-mrelax-pic-calls" "-mabicalls"
|
| + mips_option_dependency options "-mrelax-pic-calls" "-mexplicit-relocs"
|
| mips_option_dependency options "-fpic" "-mshared"
|
| mips_option_dependency options "-mshared" "-mno-plt"
|
| mips_option_dependency options "-mno-plt" "addressing=unknown"
|
| @@ -825,60 +861,47 @@ proc mips-dg-options { args } {
|
| }
|
| }
|
|
|
| + # See whether forbid_cpu forces us to choose a new architecture.
|
| + set arch [mips_option mips_base_options arch]
|
| + set force_generic_isa_p [expr {
|
| + [regexp "forbid_cpu=(.*)" [mips_option options forbid_cpu] dummy spec]
|
| + && [regexp -- "^-march=$spec\$" $arch]
|
| + }]
|
| +
|
| # Interpret the special "isa" and "isa_rev" options. If we have
|
| # a choice of a 32-bit or a 64-bit architecture, prefer to keep
|
| # the -mgp setting the same.
|
| set spec [mips_option options arch]
|
| if { [regexp {^[^-]} $spec] } {
|
| - set arch [mips_option mips_base_options arch]
|
| if { [string equal $spec "isa=loongson"] } {
|
| if { ![regexp {^-march=loongson} $arch] } {
|
| set arch "-march=loongson2f"
|
| }
|
| } else {
|
| - # With ! and = the ISA value is optional.
|
| - if { ![regexp {^(isa(?:|_rev))(=|<=|>=)([0-9]*)((?:![^!]+)*)$} \
|
| - $spec dummy prop relation value nocpus]
|
| - || ($value eq ""
|
| - && ($relation ne "="
|
| - || $nocpus eq ""))} {
|
| + if { ![regexp {^(isa(?:|_rev))(=|<=|>=)([0-9]*)$} \
|
| + $spec dummy prop relation value nocpus] } {
|
| error "Unrecognized isa specification: $spec"
|
| }
|
| - if { $value ne "" } {
|
| - set current [mips_arch_info $arch $prop]
|
| - if { ($current < $value && ![string equal $relation "<="])
|
| - || ($current > $value && ![string equal $relation ">="])
|
| - || ([mips_have_test_option_p options "-mgp64"]
|
| - && [mips_32bit_arch_p $arch]) } {
|
| - # The current setting is out of range; it cannot
|
| - # possibly be used. Find a replacement that can.
|
| - if { [string equal $prop "isa"] } {
|
| - set arch "-mips$value"
|
| - } elseif { $value == 0 } {
|
| - set arch "-mips4"
|
| + set current [mips_arch_info $arch $prop]
|
| + if { $force_generic_isa_p
|
| + || ($current < $value && ![string equal $relation "<="])
|
| + || ($current > $value && ![string equal $relation ">="])
|
| + || ([mips_have_test_option_p options "-mgp64"]
|
| + && [mips_32bit_arch_p $arch]) } {
|
| + # The current setting is out of range; it cannot
|
| + # possibly be used. Find a replacement that can.
|
| + if { [string equal $prop "isa"] } {
|
| + set arch "-mips$value"
|
| + } elseif { $value == 0 } {
|
| + set arch "-mips4"
|
| + } else {
|
| + if { [mips_have_option_p options "-mgp32"] } {
|
| + set arch "-mips32"
|
| } else {
|
| - if { [mips_have_option_p options "-mgp32"] } {
|
| - set arch "-mips32"
|
| - } else {
|
| - set arch "-mips64"
|
| - }
|
| - if { $value > 1 } {
|
| - append arch "r$value"
|
| - }
|
| + set arch "-mips64"
|
| }
|
| - }
|
| - }
|
| - # If we haven't switched to a generic ISA based on the
|
| - # isa* value, do it here if the processor-specific
|
| - # extension is not allowed.
|
| - if { $nocpus ne ""
|
| - && $arch eq [mips_option mips_base_options arch] } {
|
| - set cpu [regsub -- {-march=} $arch ""]
|
| - if { [regexp "!$cpu!" "$nocpus!"] } {
|
| - set isa_rev [mips_arch_info $arch isa_rev]
|
| - set arch "-mips[mips_arch_info $arch isa]"
|
| - if { $isa_rev > 1 } {
|
| - append arch "r$isa_rev"
|
| + if { $value > 1 } {
|
| + append arch "r$value"
|
| }
|
| }
|
| }
|
| @@ -963,6 +986,14 @@ proc mips-dg-options { args } {
|
| } else {
|
| mips_make_test_option options "-mips64r$isa_rev"
|
| }
|
| + # Otherwise, if the current choice of architecture is unacceptable,
|
| + # choose the equivalent generic architecture.
|
| + } elseif { $force_generic_isa_p } {
|
| + set arch "-mips[mips_arch_info $arch isa]"
|
| + if { $isa_rev > 1 } {
|
| + append arch "r$isa_rev"
|
| + }
|
| + mips_make_test_option options $arch
|
| }
|
| unset arch
|
| unset isa
|
| @@ -1109,6 +1140,7 @@ proc mips-dg-options { args } {
|
|
|
| # Add all options to the dg variable.
|
| set options(explicit_p,addressing) 0
|
| + set options(explicit_p,forbid_cpu) 0
|
| foreach { group regexp } $mips_option_groups {
|
| if { $options(explicit_p,$group) } {
|
| append extra_tool_flags " " $options(option,$group)
|
|
|