diff options
author | Tony Jiang <jtony@ca.ibm.com> | 2017-01-11 20:59:42 +0000 |
---|---|---|
committer | Tony Jiang <jtony@ca.ibm.com> | 2017-01-11 20:59:42 +0000 |
commit | 974e4c78999ad00af0505a9bf50b7432b219f717 (patch) | |
tree | 457f2551e77e75a4543769a1b76f56c2b539ae11 /clang/lib | |
parent | 83962656557bdea5499ec022094fd6c60c1db389 (diff) | |
download | bcm5719-llvm-974e4c78999ad00af0505a9bf50b7432b219f717.tar.gz bcm5719-llvm-974e4c78999ad00af0505a9bf50b7432b219f717.zip |
[PowerPC] Fix the wrong implementation of builtin vec_rlnm.
llvm-svn: 291702
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Headers/altivec.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/clang/lib/Headers/altivec.h b/clang/lib/Headers/altivec.h index a8618816d5b..a01d9d837ad 100644 --- a/clang/lib/Headers/altivec.h +++ b/clang/lib/Headers/altivec.h @@ -7664,13 +7664,15 @@ vec_rlmi(vector unsigned long long __a, vector unsigned long long __b, static __inline__ vector unsigned int __ATTRS_o_ai vec_rlnm(vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) { - return __builtin_altivec_vrlwnm(__a, __b) & __c; + vector unsigned int OneByte = { 0x8, 0x8, 0x8, 0x8 }; + return __builtin_altivec_vrlwnm(__a, ((__c << OneByte) | __b)); } static __inline__ vector unsigned long long __ATTRS_o_ai vec_rlnm(vector unsigned long long __a, vector unsigned long long __b, vector unsigned long long __c) { - return __builtin_altivec_vrldnm(__a, __b) & __c; + vector unsigned long long OneByte = { 0x8, 0x8 }; + return __builtin_altivec_vrldnm(__a, ((__c << OneByte) | __b)); } #endif |