This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] test for altivec h/w on PowerPC


(ping!)

It's been a while.

ok to commit?

-=# Paul #=-

On Wednesday 09 March 2005 16:38, Paul Gilliam wrote:
> Ok, I have made all the requested chanages and tested it on powerpc with
> and with out altivec.
>
> NOTE: this patch depends on a previous patch so that gdb.arch/altivec-*.exp
> can compile their test programs.   The previous patch is here:
> http://sources.redhat.com/ml/gdb-patches/2005-03/msg00157.html
>
> 2005-03-09  Paul Gilliam <pgilliam@us.ibm.com>
>
>         * lib/gdb.exp: New proc 'skip_altivec_tests'
>         * gdb.arch/altivec-abi.exp, gdb.arch/altivec-regs.exp: Use the new
> proc.
>
> Index: gdb.arch/altivec-abi.exp
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/gdb.arch/altivec-abi.exp,v
> retrieving revision 1.3
> diff -c -3 -p -r1.3 altivec-abi.exp
> *** gdb.arch/altivec-abi.exp	20 Jan 2003 15:40:07 -0000	1.3
> --- gdb.arch/altivec-abi.exp	10 Mar 2005 00:19:27 -0000
> *************** if $tracelevel then {
> *** 32,39 ****
>   set prms_id 0
>   set bug_id 0
>
> ! if ![istarget "powerpc-*altivec"] then {
>       verbose "Skipping altivec abi tests."
>       return
>   }
>
> --- 32,40 ----
>   set prms_id 0
>   set bug_id 0
>
> ! if {![istarget "powerpc*"] || [skip_altivec_tests]} then {
>       verbose "Skipping altivec abi tests."
> +     verbose -log "Skipping altivec abi tests."
>       return
>   }
>
> Index: gdb.arch/altivec-regs.exp
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/gdb.arch/altivec-regs.exp,v
> retrieving revision 1.2
> diff -c -3 -p -r1.2 altivec-regs.exp
> *** gdb.arch/altivec-regs.exp	20 Jan 2003 15:40:07 -0000	1.2
> --- gdb.arch/altivec-regs.exp	10 Mar 2005 00:19:27 -0000
> *************** if $tracelevel then {
> *** 32,39 ****
>   set prms_id 0
>   set bug_id 0
>
> ! if ![istarget "powerpc-*altivec"] then {
>       verbose "Skipping altivec register tests."
>       return
>   }
>
> --- 32,40 ----
>   set prms_id 0
>   set bug_id 0
>
> ! if {![istarget "powerpc*"] || [skip_altivec_tests]} then {
>       verbose "Skipping altivec register tests."
> +     verbose -log "Skipping altivec register tests."
>       return
>   }
>
> Index: lib/gdb.exp
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v
> retrieving revision 1.58
> diff -c -3 -p -r1.58 gdb.exp
> *** lib/gdb.exp	10 Sep 2004 01:04:59 -0000	1.58
> --- lib/gdb.exp	10 Mar 2005 00:19:28 -0000
> *************** proc skip_fortran_tests {} {
> *** 1142,1147 ****
> --- 1142,1235 ----
>       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 ${binfile}] {
> +        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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]