diff options
author | xiezhiheng <xiezhiheng@huawei.com> | 2020-08-04 17:25:29 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2020-08-04 17:25:29 +0100 |
commit | 35ffd4d16d7e3dbba297da788414a673530b7817 (patch) | |
tree | 8ec44198f2df8d0e3202d962730c9a2b579cc471 | |
parent | 57dd9f3bfca8bb752c630431dc033c761e2ad382 (diff) | |
download | gcc-35ffd4d16d7e3dbba297da788414a673530b7817.zip gcc-35ffd4d16d7e3dbba297da788414a673530b7817.tar.gz gcc-35ffd4d16d7e3dbba297da788414a673530b7817.tar.bz2 |
AArch64: Use FLOAT_MODE_P macro and add FLAG_AUTO_FP [PR94442]
Since all FP intrinsics are set by FLAG_FP by default, but not all FP intrinsics
raise FP exceptions or read FPCR register. So we add a global flag FLAG_AUTO_FP
to suppress the flag FLAG_FP.
2020-08-04 Zhiheng Xie <xiezhiheng@huawei.com>
gcc/ChangeLog:
* config/aarch64/aarch64-builtins.c (aarch64_call_properties):
Use FLOAT_MODE_P macro instead of enumerating all floating-point
modes and add global flag FLAG_AUTO_FP.
-rw-r--r-- | gcc/config/aarch64/aarch64-builtins.c | 26 |
1 files changed, 6 insertions, 20 deletions
diff --git a/gcc/config/aarch64/aarch64-builtins.c b/gcc/config/aarch64/aarch64-builtins.c index 892ef94..4f33dd9 100644 --- a/gcc/config/aarch64/aarch64-builtins.c +++ b/gcc/config/aarch64/aarch64-builtins.c @@ -125,6 +125,10 @@ const unsigned int FLAG_READ_MEMORY = 1U << 2; const unsigned int FLAG_PREFETCH_MEMORY = 1U << 3; const unsigned int FLAG_WRITE_MEMORY = 1U << 4; +/* Not all FP intrinsics raise FP exceptions or read FPCR register, + use this flag to suppress it. */ +const unsigned int FLAG_AUTO_FP = 1U << 5; + const unsigned int FLAG_FP = FLAG_READ_FPCR | FLAG_RAISE_FP_EXCEPTIONS; const unsigned int FLAG_ALL = FLAG_READ_FPCR | FLAG_RAISE_FP_EXCEPTIONS | FLAG_READ_MEMORY | FLAG_PREFETCH_MEMORY | FLAG_WRITE_MEMORY; @@ -900,27 +904,9 @@ static unsigned int aarch64_call_properties (aarch64_simd_builtin_datum *d) { unsigned int flags = d->flags; - switch (d->mode) - { - /* Floating-point. */ - case E_BFmode: - case E_V4BFmode: - case E_V8BFmode: - case E_HFmode: - case E_V4HFmode: - case E_V8HFmode: - case E_SFmode: - case E_V2SFmode: - case E_V4SFmode: - case E_DFmode: - case E_V1DFmode: - case E_V2DFmode: - flags |= FLAG_FP; - break; - default: - break; - } + if (!(flags & FLAG_AUTO_FP) && FLOAT_MODE_P (d->mode)) + flags |= FLAG_FP; /* -fno-trapping-math means that we can assume any FP exceptions are not user-visible. */ |