Hi,

added builtins and code generation for vec_extract and vec_insert. Please review.

--
Anton

Index: include/clang/Basic/BuiltinsPPC.def
===================================================================
--- include/clang/Basic/BuiltinsPPC.def (revision 114249)
+++ include/clang/Basic/BuiltinsPPC.def (working copy)
@@ -204,6 +204,15 @@
 BUILTIN(__builtin_altivec_vcmpgtuw_p, "iiV4UiV4Ui", "")
 BUILTIN(__builtin_altivec_vcmpgtfp_p, "iiV4fV4f", "")
 
+// extensions
+BUILTIN(__builtin_altivec_extractb, "cV16ci", "")
+BUILTIN(__builtin_altivec_extracth, "sV8si", "")
+BUILTIN(__builtin_altivec_extractw, "iV4ii", "")
+
+BUILTIN(__builtin_altivec_insertb, "V16ccV16ci", "")
+BUILTIN(__builtin_altivec_inserth, "V8ssV8si", "")
+BUILTIN(__builtin_altivec_insertw, "V4iiV4ii", "")
+
 // FIXME: Obviously incomplete.
 
 #undef BUILTIN
Index: lib/CodeGen/CGBuiltin.cpp
===================================================================
--- lib/CodeGen/CGBuiltin.cpp   (revision 114249)
+++ lib/CodeGen/CGBuiltin.cpp   (working copy)
@@ -2177,6 +2177,22 @@
     llvm::Function *F = CGM.getIntrinsic(ID);
     return Builder.CreateCall(F, &Ops[0], &Ops[0] + Ops.size(), "");
   }
+
+  // vec_extract
+  case PPC::BI__builtin_altivec_extractb:
+  case PPC::BI__builtin_altivec_extracth:
+  case PPC::BI__builtin_altivec_extractw:
+  {
+    return Builder.CreateExtractElement(Ops[0], Ops[1], "");
   }
+
+  // vec_insert
+  case PPC::BI__builtin_altivec_insertb:
+  case PPC::BI__builtin_altivec_inserth:
+  case PPC::BI__builtin_altivec_insertw:
+  {
+    return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "");
+  }
+  }
   return 0;
 }
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to