# Copyright 2010-2021 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

standard_testfile .c

# If supported by the compiler, "-mcpu=native" or "-march=native"
# should enable the highest available vector ABI.  Try both, then try
# without a CPU option.  If all variants fail, assume that the
# compiler can not handle GNU vectors.

proc do_compile { {opts {}} } {
    global srcdir subdir srcfile binfile
    set ccopts {debug quiet}
    foreach opt $opts {lappend ccopts "additional_flags=$opt"}
    gdb_compile "${srcdir}/${subdir}/${srcfile}" "$binfile" executable $ccopts
}

if { [do_compile {-mcpu=native}] != ""
     && [do_compile {-mcpu=native -Wno-psabi}] != ""
     && [do_compile {-march=native}] != ""
     && [do_compile] != ""} {
	untested "compiler can't handle vector_size attribute?"
	return -1
}

clean_restart ${binfile}

if { ![runto_main] } {
    return -1
}

# Get endianess for the scalar->vector casts
set endian [get_endianness]

# Test printing of character vector types
gdb_test "print c4" "\\\$$decimal = \\{1, 2, 3, 4\\}"
gdb_test "print c4\[2\]" "\\\$$decimal = 3"

# Test 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\\}"
gdb_test "print i4a++" "\\\$$decimal = \\{2, 4, 8, 16\\}"
gdb_test "print ++i4a" "\\\$$decimal = \\{4, 6, 10, 18\\}"
gdb_test "print i4a--" "\\\$$decimal = \\{4, 6, 10, 18\\}"
gdb_test "print --i4a" "\\\$$decimal = \\{2, 4, 8, 16\\}"
gdb_test "print +i4a" "\\\$$decimal = \\{2, 4, 8, 16\\}"
gdb_test "print -i4a" "\\\$$decimal = \\{-2, -4, -8, -16\\}"

# 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\\}"
gdb_test "print ~i4a" "\\\$$decimal = \\{-3, -5, -9, -17\\}"
# Shift operators
gdb_test "print i4a << i4b" "\\\$$decimal = \\{4, 16, 2048, 256\\}"
gdb_test "print i4a >> i4b" "\\\$$decimal = \\{1, 1, 0, 1\\}"

# Test 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\\}"
gdb_test "print +f4a" "\\\$$decimal = \\{2, 4, 8, 16\\}"
gdb_test "print -f4a" "\\\$$decimal = \\{-2, -4, -8, -16\\}"

# When casting to vector the input type must have the same length as
# the total length of the vector.
gdb_test "print (char4) 0x01010101" "\\\$$decimal = \\{1, 1, 1, 1\\}"
gdb_test "print (int2) lla" "\\\$$decimal = \\{1, 1\\}"

# Check that "whatis" doesn't peel off the destination type's typedef
# by mistake, in expressions that involve a cast to typedef type.
gdb_test "whatis (char4) 0x01010101" "type = char4"
gdb_test "whatis (int2) lla" "type = int2"
# Check that OTOH "ptype" does peel off the destination type's
# typedef.
gdb_test "ptype (char4) 0x01010101" \
    "type = char __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
gdb_test "ptype (int2) lla" \
    "type = int __attribute__ \\(\\(vector_size\\(2\\)\\)\\)"

if { ![string compare $endian big] } then {
    gdb_test "print (char4) ia" "\\\$$decimal = \\{0, 0, 0, 2\\}"
} else {
    gdb_test "print (char4) ia" "\\\$$decimal = \\{2, 0, 0, 0\\}"
}

gdb_test "print (int2) 1" "can only cast scalar to vector of same size"
gdb_test "print (longlong2) 2" "can only cast scalar to vector of same size"
gdb_test "print (float2) 3" "can only cast scalar to vector of same size"
gdb_test "print (double2) 4" "can only cast scalar to vector of same size"
gdb_test "print (uint4) ia" "can only cast scalar to vector of same size"
gdb_test "print (int4) -3" "can only cast scalar to vector of same size"
gdb_test "print (float4) 4" "can only cast scalar to vector of same size"

gdb_test "print i4b = ia" "can only cast scalar to vector of same size"
gdb_test "print i4a = 3" "can only cast scalar to vector of same size"
gdb_test "print f4a = fb" "can only cast scalar to vector of same size"
gdb_test "print f4b = 2" "can only cast scalar to vector of same size"

gdb_test "print c4 + lla" "conversion of scalar to vector involves truncation"
gdb_test "print i4a + lla" "conversion of scalar to vector involves truncation"
gdb_test "print lla + c4" "conversion of scalar to vector involves truncation"
gdb_test "print lla + i4a" "conversion of scalar to vector involves truncation"

gdb_test "print c4 + ib" "\\\$$decimal = \\{2, 3, 4, 5\\}"
gdb_test "print i4a + ib" "\\\$$decimal = \\{3, 5, 9, 17\\}"
gdb_test "print i4a + 1" "\\\$$decimal = \\{3, 5, 9, 17\\}"
gdb_test "print 1 + i4a" "\\\$$decimal = \\{3, 5, 9, 17\\}"
gdb_test "print fa - f4b" "\\\$$decimal = \\{1, 0, -6, -2\\}"
gdb_test "print 2 - f4b" "\\\$$decimal = \\{1, 0, -6, -2\\}"
gdb_test "print f4a * fb" "\\\$$decimal = \\{2, 4, 8, 16\\}"
gdb_test "print f4a * 1" "\\\$$decimal = \\{2, 4, 8, 16\\}"
gdb_test "print ia / i4b" "\\\$$decimal = \\{2, 1, 0, 0\\}"
gdb_test "print 2 / i4b" "\\\$$decimal = \\{2, 1, 0, 0\\}"
gdb_test "print i4a % ib" "\\\$$decimal = \\{0, 0, 0, 0\\}"
gdb_test "print i4a % 1" "\\\$$decimal = \\{0, 0, 0, 0\\}"
gdb_test "print ia & i4b" "\\\$$decimal = \\{0, 2, 0, 0\\}"
gdb_test "print 2 & i4b" "\\\$$decimal = \\{0, 2, 0, 0\\}"
gdb_test "print i4a | ib" "\\\$$decimal = \\{3, 5, 9, 17\\}"
gdb_test "print i4a | 1" "\\\$$decimal = \\{3, 5, 9, 17\\}"
gdb_test "print ia ^ i4b" "\\\$$decimal = \\{3, 0, 10, 6\\}"
gdb_test "print 2 ^ i4b" "\\\$$decimal = \\{3, 0, 10, 6\\}"
gdb_test "print i4a << ib" "\\\$$decimal = \\{4, 8, 16, 32\\}"
gdb_test "print i4a << 1" "\\\$$decimal = \\{4, 8, 16, 32\\}"
gdb_test "print i4a >> ib" "\\\$$decimal = \\{1, 2, 4, 8\\}"
gdb_test "print i4a >> 1" "\\\$$decimal = \\{1, 2, 4, 8\\}"

gdb_test "print i4a = \{2, 4, 8, 16\}" "\\\$$decimal = \\{2, 4, 8, 16\\}"
gdb_test "print i4a <<= ib" "\\\$$decimal = \\{4, 8, 16, 32\\}"

# Test some error scenarios
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 types"
gdb_test "print i2 + i4a" "Cannot perform operation on vectors with different types"
gdb_test "print f4a + f2" "Cannot perform operation on vectors with different types"
gdb_test "print f2 + f4a" "Cannot perform operation on vectors with different types"

gdb_test "print (double2) f2" "Cannot convert between vector values of different sizes"
gdb_test "print (int4) c4" "Cannot convert between vector values of different sizes"
gdb_test "print (char4) i4a" "Cannot convert between vector values of different sizes"

# Test ptype/whatis on vector types/vars.
gdb_test "ptype c4" "type = char __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
gdb_test "whatis c4" "type = char4"

gdb_test "ptype char4" "type = char __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
gdb_test "whatis char4" "type = char __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"

gdb_test "ptype i4a" "type = int __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
gdb_test "whatis i4a" "type = int4"

gdb_test "ptype int4" "type = int __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
gdb_test "whatis int4" "type = int __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"

gdb_test "ptype f4b" "type = float __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
gdb_test "whatis f4b" "type = float4"

gdb_test "ptype float4" "type = float __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
gdb_test "whatis float4" "type = float __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"

gdb_test "ptype union_with_vector_1" "type = union {\r\n\[\t \]+int i;\r\n\[\t \]+char cv __attribute__ \\(\\(vector_size\\(4\\)\\)\\);\r\n}"
gdb_test "whatis union_with_vector_1" {type = union {...}}

gdb_test "ptype struct_with_vector_1" "type = struct {\r\n\[\t \]+int i;\r\n\[\t \]+char cv __attribute__ \\(\\(vector_size\\(4\\)\\)\\);\r\n\[\t \]+float4 f4;\r\n}"
gdb_test "whatis struct_with_vector_1" {type = struct {...}}

# Test inferior function calls with vector arguments and/or vector
# return values.
if { [istarget "i?86-*-*"] || [istarget "x86_64-*-*" ] } {
    # These platforms don't support infcalls with vector arguments
    # and/or vector return values, so skip the remaining tests.
    # See also PR exp/18537.
    unsupported "skip remaining vector ABI tests on this arch"
    return
}
gdb_test "print add_some_intvecs(i4a, i4b, 3 * i4a)" "= \\{17, 34, 72, 132\\}" \
    "call add_some_intvecs"
gdb_test "print add_many_charvecs(c4, c4, c4, c4, c4, c4, c4, c4, c4, c4)" \
    "= \\{10, 20, 30, 40\\}" "call add_many_charvecs"
gdb_test "print add_various_floatvecs(2, f4a, f4b)" "= \\{3, 6, 16, 20\\}" \
    "call add_various_floatvecs"
gdb_test "print add_structvecs(i2, (struct just_int2)\{2*i2\}, (struct two_int2)\{3*i2, 4*i2\})" \
    "= \\{i = \\{10, 20\\}\\}" "call add_structvecs"
gdb_test "print add_singlevecs((char1) \{6\}, (int1) \{12\}, (double1) \{24\})" "= \\{42\\}" \
    "call add_singlevecs"

# Test "finish" from vector-valued function.
gdb_breakpoint "add_some_intvecs"
gdb_continue "add_some_intvecs"
set test "finish shows vector return value"
gdb_test_multiple "finish" $test {
    -re "Value returned is .* = \\{10, 20, 48, 72\\}.*$gdb_prompt $" {
	pass $test
    }
    -re "Value returned has type: .* Cannot determine contents.*$gdb_prompt $" {
	kfail "gdb/8549" $test
    }
}

gdb_continue "add_some_intvecs"
gdb_test "up" ""
gdb_test "p res" "\\{10, 20, 48, 72\\}.*"
gdb_test "down" ""


# Test "return" from vector-valued function.
set test "return from vector-valued function"
set should_kfail 0
gdb_test_multiple "return (int4) \{4, 2, 7, 6\}" $test {
    -re "#0 .* main .*$gdb_prompt $" {
	pass $test
    }
    -re "The location .* is unknown.\r\n.* return value .* will be ignored.\r\n" {
	# This happens, e.g., on s390x unless using the vector ABI.
	set should_kfail 1
	exp_continue
    }
    -re "Make add_some_intvecs return now. .y or n. $" {
	send_gdb "y\n"
	exp_continue
    }
}

gdb_test "next" ""
set test "verify vector return value"
gdb_test_multiple "p res" $test {
    -re ".*= \\{4, 2, 7, 6\\}\r\n.*$gdb_prompt $" {
	pass $test
    }
    -re ".*= \\{.*\\}\r\n.*$gdb_prompt $" {
	if { $should_kfail } {
	    # GDB had not actually set the return value, likely due to
	    # PR 8549.  So accept any return value and emit a KFAIL.
	    kfail "gdb/8549" $test
	} else {
	    fail $test
	}
    }
}
