aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <apinski@marvell.com>2023-05-07 01:38:17 +0000
committerAndrew Pinski <apinski@marvell.com>2023-05-07 15:24:39 +0000
commita1a9ce2441df0675540faee8476523164e12578b (patch)
tree4ae60695dd65f3be066515c9e82fe05c7dbd4589
parent681ba2f7681f295a102cd63ffd5ce2b86a5f706e (diff)
downloadgcc-a1a9ce2441df0675540faee8476523164e12578b.zip
gcc-a1a9ce2441df0675540faee8476523164e12578b.tar.gz
gcc-a1a9ce2441df0675540faee8476523164e12578b.tar.bz2
Fix aarch64/109762: push_options/push_options does not work sometimes
aarch64_isa_flags (and aarch64_asm_isa_flags) are both aarch64_feature_flags (uint64_t) but since r12-8000-g14814e20161d, they are saved/restored as unsigned long. This does not make a difference for LP64 targets but on ILP32 and LLP64IL32 targets, it means it does not get restored correctly. This patch changes over to use aarch64_feature_flags instead of unsigned long. Committed as obvious after a bootstrap/test. gcc/ChangeLog: PR target/109762 * config/aarch64/aarch64-builtins.cc (aarch64_simd_switcher::aarch64_simd_switcher): Change argument type to aarch64_feature_flags. * config/aarch64/aarch64-protos.h (aarch64_simd_switcher): Change constructor argument type to aarch64_feature_flags. Change m_old_asm_isa_flags to be aarch64_feature_flags.
-rw-r--r--gcc/config/aarch64/aarch64-builtins.cc2
-rw-r--r--gcc/config/aarch64/aarch64-protos.h4
2 files changed, 3 insertions, 3 deletions
diff --git a/gcc/config/aarch64/aarch64-builtins.cc b/gcc/config/aarch64/aarch64-builtins.cc
index 94ad364..cb6aae3 100644
--- a/gcc/config/aarch64/aarch64-builtins.cc
+++ b/gcc/config/aarch64/aarch64-builtins.cc
@@ -1547,7 +1547,7 @@ aarch64_scalar_builtin_type_p (aarch64_simd_type t)
/* Enable AARCH64_FL_* flags EXTRA_FLAGS on top of the base Advanced SIMD
set. */
-aarch64_simd_switcher::aarch64_simd_switcher (unsigned int extra_flags)
+aarch64_simd_switcher::aarch64_simd_switcher (aarch64_feature_flags extra_flags)
: m_old_asm_isa_flags (aarch64_asm_isa_flags),
m_old_general_regs_only (TARGET_GENERAL_REGS_ONLY)
{
diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h
index 4904d19..b138494 100644
--- a/gcc/config/aarch64/aarch64-protos.h
+++ b/gcc/config/aarch64/aarch64-protos.h
@@ -733,11 +733,11 @@ const unsigned int AARCH64_BUILTIN_CLASS = (1 << AARCH64_BUILTIN_SHIFT) - 1;
class aarch64_simd_switcher
{
public:
- aarch64_simd_switcher (unsigned int extra_flags = 0);
+ aarch64_simd_switcher (aarch64_feature_flags extra_flags = 0);
~aarch64_simd_switcher ();
private:
- unsigned long m_old_asm_isa_flags;
+ aarch64_feature_flags m_old_asm_isa_flags;
bool m_old_general_regs_only;
};