]> granicus.if.org Git - clang/commitdiff
Add a couple of missing vsx load and store intrinsics.
authorEric Christopher <echristo@gmail.com>
Tue, 12 Apr 2016 21:08:54 +0000 (21:08 +0000)
committerEric Christopher <echristo@gmail.com>
Tue, 12 Apr 2016 21:08:54 +0000 (21:08 +0000)
Patch by Jing Yu!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@266122 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Headers/altivec.h
test/CodeGen/builtins-ppc-vsx.c

index 050876500861f0da8de20967770d93386da5f421..179fcdfcf1f2a584c800544bdaa4f32921672ac5 100644 (file)
@@ -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) {
index 21a24a2c8946c6672766151350b335d3d44e2ba4..b6d0fcb4ff61d3b096b7ece033944eabeb7f91ef 100644 (file)
@@ -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;
@@ -333,6 +335,10 @@ void test1() {
 
   res_vf = vec_vsx_ld (0, &vf);
 // 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);
@@ -411,6 +417,10 @@ void test1() {
 
   vec_vsx_st(vf, 0, &res_vf);
 // 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);