2004-05-02 Paul Gilliam <pgilliam@us.ibm.com>
authorPaul Gilliam <pgilliam@us.ibm.com>
Tue, 3 May 2005 00:41:49 +0000 (00:41 +0000)
committerPaul Gilliam <pgilliam@us.ibm.com>
Tue, 3 May 2005 00:41:49 +0000 (00:41 +0000)
        * lib/gdb.exp (skip_altivec_tests): New function, based on
        check_vmx_hw_available from the GCC testsuite.
        * lib/gdb.arch/altivec-abi.exp: Use skip_altivec_tests.
        * lib/gdb.arch/altivec-regs.exp: Likewise.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.arch/altivec-abi.exp
gdb/testsuite/gdb.arch/altivec-regs.exp
gdb/testsuite/lib/gdb.exp

index 7ccee46..87baff6 100644 (file)
@@ -1,3 +1,10 @@
+2004-05-02  Paul Gilliam  <pgilliam@us.ibm.com>
+
+        * lib/gdb.exp (skip_altivec_tests): New function, based on
+        check_vmx_hw_available from the GCC testsuite.
+        * lib/gdb.arch/altivec-abi.exp: Use skip_altivec_tests.
+        * lib/gdb.arch/altivec-regs.exp: Likewise.
+
 2005-05-02  Jim Blandy  <jimb@redhat.com>
 
        * gdb.base/auxv.exp: Call 'untested' and return -1 instead of
index 6b22c9a..91b625a 100644 (file)
@@ -32,8 +32,9 @@ if $tracelevel then {
 set prms_id 0
 set bug_id 0
 
-if ![istarget "powerpc-*altivec"] then {
+if {![istarget "powerpc*"] || [skip_altivec_tests]} then {
     verbose "Skipping altivec abi tests."
+    verbose -log "Skipping altivec abi tests."
     return
 }
 
index a1330d0..52833a7 100644 (file)
@@ -32,8 +32,9 @@ if $tracelevel then {
 set prms_id 0
 set bug_id 0
 
-if ![istarget "powerpc-*altivec"] then {
+if {![istarget "powerpc*"] || [skip_altivec_tests]} then {
     verbose "Skipping altivec register tests."
+    verbose -log "Skipping altivec register tests."
     return
 }
 
index ce9d6f1..c587c87 100644 (file)
@@ -1142,6 +1142,94 @@ proc skip_fortran_tests {} {
     return 0
 }
 
+# Run a test on the target to see if it supports vmx hardware.  Return 0 if so, 
+# 1 if it does not.  Based on 'check_vmx_hw_available' from the GCC testsuite.
+
+proc skip_altivec_tests {} {
+    global skip_vmx_tests_saved
+    global srcdir subdir gdb_prompt
+
+    # Use the cached value, if it exists.
+    set me "skip_altivec_tests"
+    if [info exists skip_vmx_tests_saved] {
+        verbose "$me:  returning saved $skip_vmx_tests_saved" 2
+        return $skip_vmx_tests_saved
+    }
+
+    # Some simulators are known to not support VMX instructions.
+    if { [istarget powerpc-*-eabi] || [istarget powerpc*-*-eabispe] } {
+        verbose "$me:  target known to not support VMX, returning 1" 2
+        return [set $skip_vmx_tests_saved 1]
+    }
+
+    # Make sure we have a compiler that understands altivec.
+    set compile_flags {debug additional_flags=-w}
+    if [get_compiler_info not-used] {
+       warning "Could not get compiler info"
+       return 1
+    }
+    if [test_compiler_info gcc*] {
+        set compile_flags "$compile_flags additional_flags=-maltivec"
+    } elseif [test_compiler_info xlc*] {
+        set compile_flags "$compile_flags additional_flags=-qaltivec"
+    } else {
+        verbose "Could not compile with altivec support, returning 1" 2
+        return 1
+    }
+
+    # 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 "$me:  compiling testfile $src" 2
+    set lines [gdb_compile $src $exe executable $compile_flags]
+    file delete $src
+
+    if ![string match "" $lines] then {
+        verbose "$me:  testfile compilation failed, returning 1" 2
+        return [set skip_vmx_tests_saved 1]
+    }
+
+    # No error message, compilation succeeded so now run it via gdb.
+
+    gdb_exit
+    gdb_start
+    gdb_reinitialize_dir $srcdir/$subdir
+    gdb_load "$exe"
+    gdb_run_cmd
+    gdb_expect {
+        -re ".*Illegal instruction.*${gdb_prompt} $" {
+            verbose -log "\n$me altivec hardware not detected" 
+            set skip_vmx_tests_saved 1
+        }
+        -re ".*Program exited normally.*${gdb_prompt} $" {
+            verbose -log "\n$me: altivec hardware detected" 
+            set skip_vmx_tests_saved 0
+        }
+        default {
+          warning "\n$me: default case taken"
+            set skip_vmx_tests_saved 1
+        }
+    }
+    gdb_exit
+    remote_file build delete $exe
+
+    verbose "$me:  returning $skip_vmx_tests_saved" 2
+    return $skip_vmx_tests_saved
+}
+
 # Skip all the tests in the file if you are not on an hppa running
 # hpux target.