binutils-gdb/gdb/testsuite/gdb.arch/x86-avx512bf16.exp

75 lines
2.4 KiB
Plaintext
Raw Normal View History

# Copyright 2020-2021 Free Software Foundation, Inc.
Add bfloat16 support for AVX512 register view. This adds support for the bfloat16 datatype, which can be seen as a short version of FP32, skipping the least significant 16 bits of the mantissa. Since the datatype is currently only supported by the AVX512 registers, the printing of bfloat16 values is only supported for xmm, ymm and zmm registers. gdb/ChangeLog: 2020-09-11 Moritz Riesterer <moritz.riesterer@intel.com> Felix Willgerodt <Felix.Willgerodt@intel.com> * gdbarch.sh: Added bfloat16 type. * gdbarch.c: Regenerated. * gdbarch.h: Regenerated. * gdbtypes.c (floatformats_bfloat16): New struct. (gdbtypes_post_init): Add builtin_bfloat16. * gdbtypes.h (struct builtin_type) <builtin_bfloat16>: New member. (floatformats_bfloat16): New struct. * i386-tdep.c (i386_zmm_type): Add field "v32_bfloat16" (i386_ymm_type): Add field "v16_bfloat16" (i386_gdbarch_init): Add set_gdbarch_bfloat16_format. * target-descriptions.c (make_gdb_type): Add case TDESC_TYPE_BFLOAT16. * gdbsupport/tdesc.cc (tdesc_predefined_types): New member bfloat16. * gdbsupport/tdesc.h (tdesc_type_kind): New member TDESC_TYPE_BFLOAT16. * features/i386/64bit-avx512.xml: Add bfloat16 type. * features/i386/64bit-avx512.c: Regenerated. * features/i386/64bit-sse.xml: Add bfloat16 type. * features/i386/64bit-sse.c: Regenerated. gdb/testsuite/ChangeLog: 2020-09-11 Moritz Riesterer <moritz.riesterer@intel.com> Felix Willgerodt <Felix.Willgerodt@intel.com> * x86-avx512bf16.c: New file. * x86-avx512bf16.exp: Likewise. * lib/gdb.exp (skip_avx512bf16_tests): New function.
2020-09-10 20:29:53 +08:00
# 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/>.
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@gnu.org
# Test bfloat16 support in AVX512 registers
if { [skip_avx512bf16_tests] } {
unsupported "target does not support AVX512BF16"
return -1
}
standard_testfile
if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
return -1
}
if { ![runto_main] } {
unsupported "could not run to main"
return -1
}
# Test xmm
set line1 [gdb_get_line_number "first breakpoint here"]
gdb_breakpoint $line1
gdb_continue_to_breakpoint "line1" ".*$srcfile:$line1.*"
gdb_test "print \$xmm0.v8_bfloat16" \
"= \\{0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875\\}"
gdb_test "print \$xmm6.v8_bfloat16" \
"= \\{3, 3.125, 3.25, 3.375, 3.5, 3.625, 3.75, 3.875\\}"
# Test ymm
set line2 [gdb_get_line_number "second breakpoint here"]
gdb_breakpoint $line2
gdb_continue_to_breakpoint "line2" ".*$srcfile:$line2.*"
gdb_test "print \$ymm0.v16_bfloat16\[1\]" "= 8.25"
gdb_test "print \$ymm6.v16_bfloat16\[1\]" "= 20.25"
# Test zmm
set line3 [gdb_get_line_number "third breakpoint here"]
gdb_breakpoint $line3
gdb_continue_to_breakpoint "line3" ".*$srcfile:$line3.*"
gdb_test "print \$zmm0.v32_bfloat16\[1\]" "= 20.5"
gdb_test "print \$zmm6.v32_bfloat16\[1\]" "= 68.5"
# Test setting of bfloat values
gdb_test_no_output "set var \$xmm0.v8_bfloat16\[0\] = 32.25" \
"set %xmm0.v8_bfloat16\[0\]"
gdb_test_no_output "set var \$ymm8.v16_bfloat16\[1\] = 33.5" \
"set %ymm8.v16_bfloat16\[1\]"
gdb_test_no_output "set var \$zmm16.v32_bfloat16\[2\] = 22.75" \
"set %zmm16.v32_bfloat16\[2\]"
gdb_test "p \$xmm0.v8_bfloat16\[0\]" "= 32.25"
gdb_test "p \$ymm8.v16_bfloat16\[1\]" "= 33.5"
gdb_test "p \$zmm16.v32_bfloat16\[2\]" "= 22.75"