target-supports.exp (check_vmx_hw_available): New.
authorJanis Johnson <janis187@us.ibm.com>
Fri, 28 May 2004 22:31:44 +0000 (22:31 +0000)
committerJanis Johnson <janis@gcc.gnu.org>
Fri, 28 May 2004 22:31:44 +0000 (22:31 +0000)
2004-05-28  Janis Johnson  <janis187@us.ibm.com>

* lib/target-supports.exp (check_vmx_hw_available): New.
* gcc.dg/vmx/vmx.exp: Use it to determine default action.

From-SVN: r82390

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vmx/vmx.exp
gcc/testsuite/lib/target-supports.exp

index 7c42703a810b6972ff925d0ac47728391b05a485..53b52bf058f3a87582c28f036cb6b084225c32b2 100644 (file)
@@ -1,4 +1,7 @@
-2004-05-28  Janis Johnson  <janis187@us.ibm.com
+2004-05-28  Janis Johnson  <janis187@us.ibm.com>
+
+       * lib/target-supports.exp (check_vmx_hw_available): New.
+       * gcc.dg/vmx/vmx.exp: Use it to determine default action.
 
        * lib/target-supports.exp (check_alias_available,
        check_iconv_available, check_named_sections_available): Use
index aa376b1d71d40f4f63e38f00b7558f61fc9c33eb..f1b761c7a2a6c90e93258863b3ee8eefa36b4961 100644 (file)
@@ -19,9 +19,9 @@
 # Load support procs.
 load_lib gcc-dg.exp
 
-# Only run this test on PowerPC targets with Altivec support.
-# For now, that's powerpc*-*-*altivec*.  FIXME: generalize.
-if {![istarget powerpc*-*-*altivec*]} {
+# Skip these tests for non-PowerPC targets and for Aix, where AltiVec
+# is not yet supported.
+if {![istarget powerpc*-*-*] || [istarget powerpc*-*-aix*]} {
     return
 }
 
@@ -33,10 +33,15 @@ if ![info exists DEFAULT_VMXCFLAGS] then {
     set DEFAULT_VMXCFLAGS "-maltivec -mabi=altivec -std=gnu99"
 }
 
-# Default action in this directory is 'run'.
+# If the target system supports AltiVec instructions, the default action
+# for a test is 'run', otherwise it's 'compile'.
 global dg-do-what-default
 set save-dg-do-what-default ${dg-do-what-default}
-set dg-do-what-default run
+if { [check_vmx_hw_available ] } {
+  set dg-do-what-default run
+} else {
+  set dg-do-what-default compile
+}
 
 # Initialize `dg'.
 dg-init
index aefba1d890c7d51cd151554461e66d24ed31133f..aee7016bf8708c0cd80ce4c6ce38053db473dd9e 100644 (file)
@@ -280,3 +280,60 @@ proc check_named_sections_available { } {
     verbose "check_named_sections_available  returning $answer" 2
     return $answer
 }
+
+# Return 1 if the target supports executing AltiVec instructions, 0
+# otherwise.  Cache the result.
+
+proc check_vmx_hw_available { } {
+    global vmx_hw_available_saved
+    global tool
+
+    if [info exists vmx_hw_available_saved] {
+       verbose "check_hw_available  returning saved $vmx_hw_available_saved" 2
+    } else {
+       set vmx_hw_available_saved 0
+
+       # Some simulators are known to not support VMX instructions.
+       if { [istarget powerpc-*-eabi] || [istarget powerpc*-*-eabispe] } {
+           verbose "check_hw_available  returning 0" 2
+           return $vmx_hw_available_saved
+       }
+
+       # Set up, compile, and execute a test program containing VMX
+       # instructions.  Include the current process ID in the file
+       # names to prevent conflicts with invocations for multiple
+       # testsuites.
+       set src vmx[pid].c
+       set exe vmx[pid].x
+
+       set f [open $src "w"]
+       puts $f "int main() {"
+       puts $f "#ifdef __MACH__"
+       puts $f "  asm volatile (\"vor v0,v0,v0\");"
+       puts $f "#else"
+       puts $f "  asm volatile (\"vor 0,0,0\");"
+       puts $f "#endif"
+       puts $f "  return 0; }"
+       close $f
+
+       verbose "check_vmx_hw_available  compiling testfile $src" 2
+       set lines [${tool}_target_compile $src $exe executable ""]
+       file delete $src
+
+       if [string match "" $lines] then {
+           # No error message, compilation succeeded.
+           set result [${tool}_load "./$exe" "" ""]
+           set status [lindex $result 0]
+           remote_file build delete $exe
+           verbose "check_vmx_hw_available testfile status is <$status>" 2
+
+           if { $status == "pass" } then {
+               set vmx_hw_available_saved 1
+           }
+       } else {
+           verbose "check_vmx_hw_availalble testfile compilation failed" 2
+       }
+    }
+
+    return $vmx_hw_available_saved
+}