summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base/gnu_vector.exp
diff options
context:
space:
mode:
authorKen Werner <ken.werner@de.ibm.com>2010-08-11 16:48:26 +0000
committerKen Werner <ken.werner@de.ibm.com>2010-08-11 16:48:26 +0000
commit7346b668d73fe13b9b07b805379ff0e03d3aef5e (patch)
treeeb5fbe1c80b3888b5cff8410b6a7de90699b36f7 /gdb/testsuite/gdb.base/gnu_vector.exp
parent3e4c12352587411b09071bd92002d481cebb8f1d (diff)
downloadbinutils-gdb-7346b668d73fe13b9b07b805379ff0e03d3aef5e.tar.gz
gdb/ChangeLog:* gdb/valarith.c (vector_binop): New function.(scalar_binop): Likewise.(value_binop): Call scalar_binop or vector_binop depending on the types.* gdb/eval.c (ptrmath_type_p): Return 0 in case of TYPE_VECTOR.(evaluate_subexp_with_coercion): Add vector check to not convert vectorsto pointers.* gdb/value.c (coerce_array): Add vector check to not coerce vectors.testsuite/ChangeLog:* gdb.base/Makefile.in (EXECUTABLES): Add gnu_vector.* gdb.base/gnu_vector.c: New File.* gdb.base/gnu_vector.exp: Likewise.
Diffstat (limited to 'gdb/testsuite/gdb.base/gnu_vector.exp')
-rw-r--r--gdb/testsuite/gdb.base/gnu_vector.exp94
1 files changed, 94 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/gnu_vector.exp b/gdb/testsuite/gdb.base/gnu_vector.exp
new file mode 100644
index 00000000000..b2f1dab684a
--- /dev/null
+++ b/gdb/testsuite/gdb.base/gnu_vector.exp
@@ -0,0 +1,94 @@
+# Copyright 2010 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 <http://www.gnu.org/licenses/>. */
+#
+# Contributed by Ken Werner <ken.werner@de.ibm.com>.
+#
+# Tests GDBs support for GNU vectors.
+# http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html
+
+if $tracelevel {
+ strace $tracelevel
+}
+
+set testfile "gnu_vector"
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+
+if [get_compiler_info ${binfile}] {
+ return -1
+}
+
+# Check if our compiler is a GCC that suppports the vector extension
+if { ![test_compiler_info gcc-4-*] } {
+ setup_xfail "*-*-*"
+ fail "This compiler can not handle GNU vectors"
+ return 0
+}
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug}] } {
+ return -1
+}
+
+if { ![runto main] } {
+ fail "runto main"
+ return -1
+}
+
+# Test binary operators on integer vector types
+gdb_test "print i4a" "\\\$$decimal = \\{2, 4, 8, 16\\}"
+gdb_test "print i4b" "\\\$$decimal = \\{1, 2, 8, 4\\}"
+# Arithmetic operators
+gdb_test "print i4a + i4b" "\\\$$decimal = \\{3, 6, 16, 20\\}"
+gdb_test "print i4a - i4b" "\\\$$decimal = \\{1, 2, 0, 12\\}"
+gdb_test "print i4a * i4b" "\\\$$decimal = \\{2, 8, 64, 64\\}"
+gdb_test "print i4a / i4b" "\\\$$decimal = \\{2, 2, 1, 4\\}"
+gdb_test "print i4a % i4b" "\\\$$decimal = \\{0, 0, 0, 0\\}"
+# Bitwise operators
+gdb_test "print i4a & i4b" "\\\$$decimal = \\{0, 0, 8, 0\\}"
+gdb_test "print i4a | i4b" "\\\$$decimal = \\{3, 6, 8, 20\\}"
+gdb_test "print i4a ^ i4b" "\\\$$decimal = \\{3, 6, 0, 20\\}"
+# Shift operators
+gdb_test "print i4a << i4b" "\\\$$decimal = \\{4, 16, 2048, 256\\}"
+gdb_test "print i4a >> i4b" "\\\$$decimal = \\{1, 1, 0, 1\\}"
+
+# Test binary operators on floating point vector types
+gdb_test "print f4a" "\\\$$decimal = \\{2, 4, 8, 16\\}"
+gdb_test "print f4b" "\\\$$decimal = \\{1, 2, 8, 4\\}"
+# Arithmetic operators
+gdb_test "print f4a + f4b" "\\\$$decimal = \\{3, 6, 16, 20\\}"
+gdb_test "print f4a - f4b" "\\\$$decimal = \\{1, 2, 0, 12\\}"
+gdb_test "print f4a * f4b" "\\\$$decimal = \\{2, 8, 64, 64\\}"
+gdb_test "print f4a / f4b" "\\\$$decimal = \\{2, 2, 1, 4\\}"
+
+# Test error conditions
+gdb_test "print i4a + 1" "Vector operations are only supported among vectors"
+gdb_test "print 1 + f4a" "Vector operations are only supported among vectors"
+gdb_test "print i4a + d2" "Cannot perform operation on vectors with different types"
+gdb_test "print d2 + i4a" "Cannot perform operation on vectors with different types"
+gdb_test "print f4a + ll2" "Cannot perform operation on vectors with different types"
+gdb_test "print ll2 + f4a" "Cannot perform operation on vectors with different types"
+gdb_test "print i2 + ll2" "Cannot perform operation on vectors with different types"
+gdb_test "print ll2 + i2" "Cannot perform operation on vectors with different types"
+gdb_test "print i4a + ll2" "Cannot perform operation on vectors with different types"
+gdb_test "print ll2 + i4a" "Cannot perform operation on vectors with different types"
+gdb_test "print f4a + d2" "Cannot perform operation on vectors with different types"
+gdb_test "print d2 + f4a" "Cannot perform operation on vectors with different types"
+gdb_test "print ui4 + i4a" "Cannot perform operation on vectors with different types"
+gdb_test "print i4a + ui4" "Cannot perform operation on vectors with different types"
+gdb_test "print i4a + i2" "Cannot perform operation on vectors with different sizes"
+gdb_test "print i2 + i4a" "Cannot perform operation on vectors with different sizes"
+gdb_test "print f4a + f2" "Cannot perform operation on vectors with different sizes"
+gdb_test "print f2 + f4a" "Cannot perform operation on vectors with different sizes"
+