diff options
| author | Eric Christopher <echristo@gmail.com> | 2016-04-12 21:08:54 +0000 |
|---|---|---|
| committer | Eric Christopher <echristo@gmail.com> | 2016-04-12 21:08:54 +0000 |
| commit | d5c75eed44e1231125935af5bf81067434c6f763 (patch) | |
| tree | daa0568d65910e7e50925c6ececa9bb6ba81dbf6 | |
| parent | 173ee84530ece36de821a00db1ecee1070323f52 (diff) | |
| download | bcm5719-llvm-d5c75eed44e1231125935af5bf81067434c6f763.tar.gz bcm5719-llvm-d5c75eed44e1231125935af5bf81067434c6f763.zip | |
Add a couple of missing vsx load and store intrinsics.
Patch by Jing Yu!
llvm-svn: 266122
| -rw-r--r-- | clang/lib/Headers/altivec.h | 10 | ||||
| -rw-r--r-- | clang/test/CodeGen/builtins-ppc-vsx.c | 10 |
2 files changed, 20 insertions, 0 deletions
diff --git a/clang/lib/Headers/altivec.h b/clang/lib/Headers/altivec.h index 05087650086..179fcdfcf1f 100644 --- a/clang/lib/Headers/altivec.h +++ b/clang/lib/Headers/altivec.h @@ -10283,6 +10283,11 @@ vec_vsx_ld(int __a, const vector float *__b) { return (vector float)__builtin_vsx_lxvw4x(__a, __b); } +static __inline__ vector float __ATTRS_o_ai vec_vsx_ld(int __a, + const float *__b) { + return (vector float)__builtin_vsx_lxvw4x(__a, __b); +} + static __inline__ vector signed long long __ATTRS_o_ai vec_vsx_ld(int __a, const vector signed long long *__b) { return (vector signed long long)__builtin_vsx_lxvd2x(__a, __b); @@ -10374,6 +10379,11 @@ static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b, __builtin_vsx_stxvw4x((vector int)__a, __b, __c); } +static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b, + float *__c) { + __builtin_vsx_stxvw4x((vector int)__a, __b, __c); +} + static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed long long __a, int __b, vector signed long long *__c) { diff --git a/clang/test/CodeGen/builtins-ppc-vsx.c b/clang/test/CodeGen/builtins-ppc-vsx.c index 21a24a2c894..b6d0fcb4ff6 100644 --- a/clang/test/CodeGen/builtins-ppc-vsx.c +++ b/clang/test/CodeGen/builtins-ppc-vsx.c @@ -18,6 +18,7 @@ vector signed long long vsll = { 255LL, -937LL }; vector unsigned long long vull = { 1447LL, 2894LL }; vector signed short vss = { -1, 2, -3, 4, -5, 6, -7, 8 }; vector unsigned short vus = { 0, 1, 2, 3, 4, 5, 6, 7 }; +float f = 12.34; double d = 23.4; signed char sc = -128; unsigned char uc = 1; @@ -38,6 +39,7 @@ vector bool char res_vbc; vector signed char res_vsc; vector unsigned char res_vuc; +float res_f; double res_d; signed int res_si; unsigned int res_ui; @@ -335,6 +337,10 @@ void test1() { // CHECK: @llvm.ppc.vsx.lxvw4x // CHECK-LE: @llvm.ppc.vsx.lxvw4x + res_vf = vec_vsx_ld (0, &f); +// CHECK: @llvm.ppc.vsx.lxvw4x +// CHECK-LE: @llvm.ppc.vsx.lxvw4x + res_vsll = vec_vsx_ld(0, &vsll); // CHECK: @llvm.ppc.vsx.lxvd2x // CHECK-LE: @llvm.ppc.vsx.lxvd2x @@ -413,6 +419,10 @@ void test1() { // CHECK: @llvm.ppc.vsx.stxvw4x // CHECK-LE: @llvm.ppc.vsx.stxvw4x + vec_vsx_st(vf, 0, &res_f); +// CHECK: @llvm.ppc.vsx.stxvw4x +// CHECK-LE: @llvm.ppc.vsx.stxvw4x + vec_vsx_st(vsll, 0, &res_vsll); // CHECK: @llvm.ppc.vsx.stxvd2x // CHECK-LE: @llvm.ppc.vsx.stxvd2x |

