forked from riscvarchive/riscv-binutils-gdb
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
gdb: Enable finish command and inferior calls for _Float16 on amd64 a…
…nd i386. Values of type _Float16 and _Float16 _Complex can now be used on CPUs with AVX512-FP16 support. Return values of those types are located in XMM0. Compiler support for gcc and clang is in progress, see e.g.: https://gcc.gnu.org/pipermail/gcc-patches/2021-July/574117.html gdb/ChangeLog: 2021-07-21 Felix Willgerodt <[email protected]> * amd64-tdep.c (amd64_classify): Classify _Float16 and _Float16 _Complex as AMD64_SSE. * i386-tdep.c (i386_extract_return_value): Read _Float16 and _Float16 _Complex from xmm0. gdb/testsuite/ChangeLog: 2021-07-21 Felix Willgerodt <[email protected]> * gdb.arch/x86-avx512fp16-abi.c: New file. * gdb.arch/x86-avx512fp16-abi.exp: New file.
- Loading branch information
1 parent
8661f70
commit 0b99a66
Showing
4 changed files
with
115 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
/* Test program for _Float16 parameters and return values. | ||
Copyright 2021 Free Software Foundation, Inc. | ||
This file is part of GDB. | ||
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/>. */ | ||
#include <complex.h> | ||
|
||
_Float16 | ||
square (_Float16 num) { | ||
return num * num; /* BP1. */ | ||
} | ||
|
||
_Float16 _Complex | ||
plus (_Float16 _Complex num) { | ||
return num + (2.5 + 0.5I); /* BP2. */ | ||
} | ||
|
||
int | ||
main () | ||
{ | ||
_Float16 a = square (1.25); | ||
_Float16 _Complex b = 6.25 + I; | ||
_Float16 _Complex ret = plus (b); /* BP3. */ | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
# Copyright 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/>. | ||
|
||
# Test support for _Float16 parameters and return values. | ||
|
||
if { [skip_avx512fp16_tests] } { | ||
unsupported "target does not support AVX512fp16" | ||
return -1 | ||
} | ||
|
||
standard_testfile | ||
|
||
if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ | ||
{debug additional_flags="-mavx512fp16"}] } { | ||
return -1 | ||
} | ||
|
||
if { ![runto_main] } { | ||
unsupported "could not run to main" | ||
return -1 | ||
} | ||
|
||
gdb_test "p square(2.2)" "= 4\\.8359" | ||
|
||
set line1 [gdb_get_line_number "BP1"] | ||
set line2 [gdb_get_line_number "BP2"] | ||
set line3 [gdb_get_line_number "BP3"] | ||
gdb_breakpoint $line1 | ||
gdb_breakpoint $line3 | ||
|
||
gdb_continue_to_breakpoint "line1" ".*$srcfile:$line1.*" | ||
|
||
with_test_prefix "real" { | ||
gdb_test "p num" "= 1\\.25" | ||
gdb_test "ptype num" "type = _Float16" | ||
gdb_test "finish" "Value returned is.*= 1\\.5625" | ||
} | ||
|
||
gdb_continue_to_breakpoint "line3" ".*$srcfile:$line3.*" | ||
gdb_test "p plus(b)" "= 8\\.75 \\+ 1\\.5i" | ||
|
||
gdb_breakpoint $line2 | ||
gdb_continue_to_breakpoint "line2" ".*$srcfile:$line2.*" | ||
|
||
with_test_prefix "complex" { | ||
gdb_test "p num" "= 6\\.25 \\+ 1i" | ||
gdb_test "ptype num" "type = complex _Float16" | ||
gdb_test "finish" "Value returned is.*= 8\\.75 \\+ 1\\.5i" | ||
} | ||
|
||
gdb_continue_to_end |