From 70d641fbecf2ce54fd3578890c94888fad254238 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Sun, 17 Aug 2014 19:20:38 +0000 Subject: [PATCH] ARM: correct toggling behaviour This was a thinko. The intent was to flip the explicit bits that need toggling rather than all bits. This would result in incorrect behaviour (which now is tested). Thanks to Nico Weber for pointing this out! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215846 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/AsmParser/ARMAsmParser.cpp | 14 ++++++-------- test/MC/ARM/directive-arch_extension-toggle.s | 8 ++++++++ 2 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 test/MC/ARM/directive-arch_extension-toggle.s diff --git a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index e4b59aedb3a..db6dfe235aa 100644 --- a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -9580,14 +9580,12 @@ bool ARMAsmParser::parseDirectiveArchExtension(SMLoc L) { return false; } - bool ToggleFeatures = EnableFeature - ? (~STI.getFeatureBits() & Extension.Features) - : ( STI.getFeatureBits() & Extension.Features); - if (ToggleFeatures) { - unsigned Features = - ComputeAvailableFeatures(STI.ToggleFeature(Extension.Features)); - setAvailableFeatures(Features); - } + unsigned ToggleFeatures = EnableFeature + ? (~STI.getFeatureBits() & Extension.Features) + : ( STI.getFeatureBits() & Extension.Features); + unsigned Features = + ComputeAvailableFeatures(STI.ToggleFeature(ToggleFeatures)); + setAvailableFeatures(Features); return false; } diff --git a/test/MC/ARM/directive-arch_extension-toggle.s b/test/MC/ARM/directive-arch_extension-toggle.s new file mode 100644 index 00000000000..c3fb901cad4 --- /dev/null +++ b/test/MC/ARM/directive-arch_extension-toggle.s @@ -0,0 +1,8 @@ +@ RUN: llvm-mc -triple armv7-eabi -mattr hwdiv -filetype asm -o /dev/null %s + + .syntax unified + .thumb + + udiv r0, r1, r2 + .arch_extension idiv + udiv r0, r1, r2 -- 2.34.1