# Copyright (C) 2008-2023 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # # Test the vsr registers print values in float128 bit format. # require {istarget "powerpc*"} allow_vsx_tests standard_testfile set compile_flags {debug nowarnings quiet} if [test_compiler_info gcc*] { set compile_flags "$compile_flags additional_flags=-maltivec additional_flags=-mabi=altivec" } elseif [test_compiler_info xlc*] { set compile_flags "$compile_flags additional_flags=-qaltivec" } else { warning "unknown compiler" return -1 } if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable $compile_flags] != "" } { untested "failed to compile" return -1 } gdb_start gdb_reinitialize_dir $srcdir/$subdir gdb_load ${binfile} # Run to `main' where we begin our tests. if {![runto_main]} { return 0 } set endianness [get_endianness] # Data sets used throughout the test set vector_field ".*float128 = -2.25,.*" # The vsx registers now contain a 128-bit floating point field. The following tests # setting a vsr register with a 128-bit floating point value and then printing the # register contents using the float format to verify the value is correctly printed # as a 128-bit value. # the following corresponds to a 128-bit float value of -2.25 if {$endianness == "big"} { gdb_test_no_output "set \$vs1.v4_int32\[3\] = 0x0" gdb_test_no_output "set \$vs1.v4_int32\[2\] = 0x0" gdb_test_no_output "set \$vs1.v4_int32\[1\] = 0x0" gdb_test_no_output "set \$vs1.v4_int32\[0\] = 0xc0002000" } else { gdb_test_no_output "set \$vs1.v4_int32\[0\] = 0x0" gdb_test_no_output "set \$vs1.v4_int32\[1\] = 0x0" gdb_test_no_output "set \$vs1.v4_int32\[2\] = 0x0" gdb_test_no_output "set \$vs1.v4_int32\[3\] = 0xc0002000" } # check the contents of the register gdb_test "p/f \$vs1" "$vector_field" gdb_exit