# Copyright 2010-2020 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] } {
    fail "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
	}
    }
}
