diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-12-01 04:34:50 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-12-01 04:34:50 +0000 |
commit | 08efe365cc491ad289132cb9e286382eb0493753 (patch) | |
tree | 5dea8c7268c616008cdefdf83b429154f33c2fdb /include/clang/Basic | |
parent | 343f2c6d0a7ff1c7fb3aea48e8c2eaa3373c1bcc (diff) | |
download | clang-08efe365cc491ad289132cb9e286382eb0493753.tar.gz |
Merging r195942:
------------------------------------------------------------------------
r195942 | haoliu | 2013-11-28 18:13:17 -0800 (Thu, 28 Nov 2013) | 3 lines
Fix the problem that the range check for scalar narrow shift is too wide.
E.g. the immediate value of vshrns_n_s16 is [1,16], which should be [1,8].
------------------------------------------------------------------------
git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_34@196022 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/clang/Basic')
-rw-r--r-- | include/clang/Basic/arm_neon.td | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/include/clang/Basic/arm_neon.td b/include/clang/Basic/arm_neon.td index 9158972954..a658f8e1c1 100644 --- a/include/clang/Basic/arm_neon.td +++ b/include/clang/Basic/arm_neon.td @@ -133,6 +133,7 @@ class Inst <string n, string p, string t, Op o> { Op Operand = o; bit isShift = 0; bit isScalarShift = 0; + bit isScalarNarrowShift = 0; bit isVCVT_N = 0; bit isA64 = 0; bit isCrypto = 0; @@ -1055,14 +1056,16 @@ def SCALAR_SRI_N: SInst<"vsri_n", "sssi", "SlSUl">; // Shift Left And Insert (Immediate) def SCALAR_SLI_N: SInst<"vsli_n", "sssi", "SlSUl">; -// Signed/Unsigned Saturating Shift Right Narrow (Immediate) -def SCALAR_SQSHRN_N: SInst<"vqshrn_n", "zsi", "SsSiSlSUsSUiSUl">; -// Signed/Unsigned Saturating Rounded Shift Right Narrow (Immediate) -def SCALAR_SQRSHRN_N: SInst<"vqrshrn_n", "zsi", "SsSiSlSUsSUiSUl">; -// Signed Saturating Shift Right Unsigned Narrow (Immediate) -def SCALAR_SQSHRUN_N: SInst<"vqshrun_n", "zsi", "SsSiSl">; -// Signed Saturating Rounded Shift Right Unsigned Narrow (Immediate) -def SCALAR_SQRSHRUN_N: SInst<"vqrshrun_n", "zsi", "SsSiSl">; +let isScalarNarrowShift = 1 in { + // Signed/Unsigned Saturating Shift Right Narrow (Immediate) + def SCALAR_SQSHRN_N: SInst<"vqshrn_n", "zsi", "SsSiSlSUsSUiSUl">; + // Signed/Unsigned Saturating Rounded Shift Right Narrow (Immediate) + def SCALAR_SQRSHRN_N: SInst<"vqrshrn_n", "zsi", "SsSiSlSUsSUiSUl">; + // Signed Saturating Shift Right Unsigned Narrow (Immediate) + def SCALAR_SQSHRUN_N: SInst<"vqshrun_n", "zsi", "SsSiSl">; + // Signed Saturating Rounded Shift Right Unsigned Narrow (Immediate) + def SCALAR_SQRSHRUN_N: SInst<"vqrshrun_n", "zsi", "SsSiSl">; +} //////////////////////////////////////////////////////////////////////////////// // Scalar Signed/Unsigned Fixed-point Convert To Floating-Point (Immediate) |