]> granicus.if.org Git - clang/commitdiff
More accurate BuiltinsARM.def
authorNate Begeman <natebegeman@mac.com>
Wed, 9 Jun 2010 05:30:26 +0000 (05:30 +0000)
committerNate Begeman <natebegeman@mac.com>
Wed, 9 Jun 2010 05:30:26 +0000 (05:30 +0000)
vget_lane support

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

include/clang/Basic/BuiltinsARM.def
lib/CodeGen/CGBuiltin.cpp

index b168ac75a523644afc8120abf42e3a5b867708eb..338d0c1d0c20e52c2064c79afa84d9ef17301e87 100644 (file)
@@ -34,14 +34,14 @@ BUILTIN(__builtin_neon_vaddl_v, "V16cV8cV8ci", "n")
 BUILTIN(__builtin_neon_vaddw_v, "V16cV16cV8ci", "n")
 BUILTIN(__builtin_neon_vbsl_v, "V8cV8cV8cV8ci", "n")
 BUILTIN(__builtin_neon_vbslq_v, "V16cV16cV16cV16ci", "n")
-BUILTIN(__builtin_neon_vcage_v, "V2iV8cV8ci", "n")
-BUILTIN(__builtin_neon_vcageq_v, "V4iV16cV16ci", "n")
-BUILTIN(__builtin_neon_vcagt_v, "V2iV8cV8ci", "n")
-BUILTIN(__builtin_neon_vcagtq_v, "V4iV16cV16ci", "n")
-BUILTIN(__builtin_neon_vcale_v, "V2iV8cV8ci", "n")
-BUILTIN(__builtin_neon_vcaleq_v, "V4iV16cV16ci", "n")
-BUILTIN(__builtin_neon_vcalt_v, "V2iV8cV8ci", "n")
-BUILTIN(__builtin_neon_vcaltq_v, "V4iV16cV16ci", "n")
+BUILTIN(__builtin_neon_vcage_v, "V8cV8cV8ci", "n")
+BUILTIN(__builtin_neon_vcageq_v, "V16cV16cV16ci", "n")
+BUILTIN(__builtin_neon_vcagt_v, "V8cV8cV8ci", "n")
+BUILTIN(__builtin_neon_vcagtq_v, "V16cV16cV16ci", "n")
+BUILTIN(__builtin_neon_vcale_v, "V8cV8cV8ci", "n")
+BUILTIN(__builtin_neon_vcaleq_v, "V16cV16cV16ci", "n")
+BUILTIN(__builtin_neon_vcalt_v, "V8cV8cV8ci", "n")
+BUILTIN(__builtin_neon_vcaltq_v, "V16cV16cV16ci", "n")
 BUILTIN(__builtin_neon_vcls_v, "V8cV8ci", "n")
 BUILTIN(__builtin_neon_vclsq_v, "V16cV16ci", "n")
 BUILTIN(__builtin_neon_vclz_v, "V8cV8ci", "n")
@@ -54,26 +54,26 @@ BUILTIN(__builtin_neon_vcvtq_f32_v, "V4fV16ci", "n")
 BUILTIN(__builtin_neon_vcvt_f32_f16, "V16cV8ci", "n")
 BUILTIN(__builtin_neon_vcvt_n_f32_v, "V2fV8cii", "n")
 BUILTIN(__builtin_neon_vcvtq_n_f32_v, "V4fV16cii", "n")
-BUILTIN(__builtin_neon_vcvt_n_s32_v, "V2iV8cii", "n")
-BUILTIN(__builtin_neon_vcvtq_n_s32_v, "V4iV16cii", "n")
-BUILTIN(__builtin_neon_vcvt_n_u32_v, "V2iV8cii", "n")
-BUILTIN(__builtin_neon_vcvtq_n_u32_v, "V4iV16cii", "n")
-BUILTIN(__builtin_neon_vcvt_s32_v, "V2iV8ci", "n")
-BUILTIN(__builtin_neon_vcvtq_s32_v, "V4iV16ci", "n")
-BUILTIN(__builtin_neon_vcvt_u32_v, "V2iV8ci", "n")
-BUILTIN(__builtin_neon_vcvtq_u32_v, "V4iV16ci", "n")
+BUILTIN(__builtin_neon_vcvt_n_s32_v, "V8cV8cii", "n")
+BUILTIN(__builtin_neon_vcvtq_n_s32_v, "V16cV16cii", "n")
+BUILTIN(__builtin_neon_vcvt_n_u32_v, "V8cV8cii", "n")
+BUILTIN(__builtin_neon_vcvtq_n_u32_v, "V16cV16cii", "n")
+BUILTIN(__builtin_neon_vcvt_s32_v, "V8cV8ci", "n")
+BUILTIN(__builtin_neon_vcvtq_s32_v, "V16cV16ci", "n")
+BUILTIN(__builtin_neon_vcvt_u32_v, "V8cV8ci", "n")
+BUILTIN(__builtin_neon_vcvtq_u32_v, "V16cV16ci", "n")
 BUILTIN(__builtin_neon_vext_v, "V8cV8cV8cii", "n")
 BUILTIN(__builtin_neon_vextq_v, "V16cV16cV16cii", "n")
 BUILTIN(__builtin_neon_vget_lane_i8, "UcV8ci", "n")
-BUILTIN(__builtin_neon_vget_lane_i16, "UsV8ci", "n")
-BUILTIN(__builtin_neon_vget_lane_i32, "UiV8ci", "n")
-BUILTIN(__builtin_neon_vget_lane_f32, "fV8ci", "n")
+BUILTIN(__builtin_neon_vget_lane_i16, "UsV4si", "n")
+BUILTIN(__builtin_neon_vget_lane_i32, "UiV2ii", "n")
+BUILTIN(__builtin_neon_vget_lane_f32, "fV2fi", "n")
 BUILTIN(__builtin_neon_vgetq_lane_i8, "UcV16ci", "n")
-BUILTIN(__builtin_neon_vgetq_lane_i16, "UsV16ci", "n")
-BUILTIN(__builtin_neon_vgetq_lane_i32, "UiV16ci", "n")
-BUILTIN(__builtin_neon_vgetq_lane_f32, "fV16ci", "n")
-BUILTIN(__builtin_neon_vget_lane_i64, "ULLiV8ci", "n")
-BUILTIN(__builtin_neon_vgetq_lane_i64, "ULLiV16ci", "n")
+BUILTIN(__builtin_neon_vgetq_lane_i16, "UsV8si", "n")
+BUILTIN(__builtin_neon_vgetq_lane_i32, "UiV4ii", "n")
+BUILTIN(__builtin_neon_vgetq_lane_f32, "fV4fi", "n")
+BUILTIN(__builtin_neon_vget_lane_i64, "ULLiV1LLii", "n")
+BUILTIN(__builtin_neon_vgetq_lane_i64, "ULLiV2LLii", "n")
 BUILTIN(__builtin_neon_vhadd_v, "V8cV8cV8ci", "n")
 BUILTIN(__builtin_neon_vhaddq_v, "V16cV16cV16ci", "n")
 BUILTIN(__builtin_neon_vhsub_v, "V8cV8cV8ci", "n")
@@ -111,12 +111,12 @@ BUILTIN(__builtin_neon_vmlal_n_u16, "V16cV16cV8cUs", "n")
 BUILTIN(__builtin_neon_vmlal_n_u32, "V16cV16cV8cUi", "n")
 BUILTIN(__builtin_neon_vmla_lane_v, "V8cV8cV8cV8cii", "n")
 BUILTIN(__builtin_neon_vmlaq_lane_v, "V16cV16cV16cV16cii", "n")
-BUILTIN(__builtin_neon_vmla_n_i16, "V8cV8cV8cUs", "n")
-BUILTIN(__builtin_neon_vmla_n_i32, "V8cV8cV8cUi", "n")
-BUILTIN(__builtin_neon_vmla_n_f32, "V8cV8cV8cf", "n")
-BUILTIN(__builtin_neon_vmlaq_n_i16, "V16cV16cV16cUs", "n")
-BUILTIN(__builtin_neon_vmlaq_n_i32, "V16cV16cV16cUi", "n")
-BUILTIN(__builtin_neon_vmlaq_n_f32, "V16cV16cV16cf", "n")
+BUILTIN(__builtin_neon_vmla_n_i16, "V4sV4sV4sUs", "n")
+BUILTIN(__builtin_neon_vmla_n_i32, "V2iV2iV2iUi", "n")
+BUILTIN(__builtin_neon_vmla_n_f32, "V2fV2fV2ff", "n")
+BUILTIN(__builtin_neon_vmlaq_n_i16, "V8sV8sV8sUs", "n")
+BUILTIN(__builtin_neon_vmlaq_n_i32, "V4iV4iV4iUi", "n")
+BUILTIN(__builtin_neon_vmlaq_n_f32, "V4fV4fV4ff", "n")
 BUILTIN(__builtin_neon_vmlsl_v, "V16cV16cV8cV8ci", "n")
 BUILTIN(__builtin_neon_vmlsl_lane_v, "V16cV16cV8cV8cii", "n")
 BUILTIN(__builtin_neon_vmlsl_n_s16, "V16cV16cV8cs", "n")
@@ -125,36 +125,36 @@ BUILTIN(__builtin_neon_vmlsl_n_u16, "V16cV16cV8cUs", "n")
 BUILTIN(__builtin_neon_vmlsl_n_u32, "V16cV16cV8cUi", "n")
 BUILTIN(__builtin_neon_vmls_lane_v, "V8cV8cV8cV8cii", "n")
 BUILTIN(__builtin_neon_vmlsq_lane_v, "V16cV16cV16cV16cii", "n")
-BUILTIN(__builtin_neon_vmls_n_i16, "V8cV8cV8cUs", "n")
-BUILTIN(__builtin_neon_vmls_n_i32, "V8cV8cV8cUi", "n")
-BUILTIN(__builtin_neon_vmls_n_f32, "V8cV8cV8cf", "n")
-BUILTIN(__builtin_neon_vmlsq_n_i16, "V16cV16cV16cUs", "n")
-BUILTIN(__builtin_neon_vmlsq_n_i32, "V16cV16cV16cUi", "n")
-BUILTIN(__builtin_neon_vmlsq_n_f32, "V16cV16cV16cf", "n")
+BUILTIN(__builtin_neon_vmls_n_i16, "V4sV4sV4sUs", "n")
+BUILTIN(__builtin_neon_vmls_n_i32, "V2iV2iV2iUi", "n")
+BUILTIN(__builtin_neon_vmls_n_f32, "V2fV2fV2ff", "n")
+BUILTIN(__builtin_neon_vmlsq_n_i16, "V8sV8sV8sUs", "n")
+BUILTIN(__builtin_neon_vmlsq_n_i32, "V4iV4iV4iUi", "n")
+BUILTIN(__builtin_neon_vmlsq_n_f32, "V4fV4fV4ff", "n")
 BUILTIN(__builtin_neon_vmovl_v, "V16cV8ci", "n")
 BUILTIN(__builtin_neon_vmovn_v, "V8cV16ci", "n")
 BUILTIN(__builtin_neon_vmov_n_i8, "V8cUc", "n")
-BUILTIN(__builtin_neon_vmov_n_i16, "V8cUs", "n")
-BUILTIN(__builtin_neon_vmov_n_i32, "V8cUi", "n")
-BUILTIN(__builtin_neon_vmov_n_f32, "V8cf", "n")
+BUILTIN(__builtin_neon_vmov_n_i16, "V4sUs", "n")
+BUILTIN(__builtin_neon_vmov_n_i32, "V2iUi", "n")
+BUILTIN(__builtin_neon_vmov_n_f32, "V2ff", "n")
 BUILTIN(__builtin_neon_vmovq_n_i8, "V16cUc", "n")
-BUILTIN(__builtin_neon_vmovq_n_i16, "V16cUs", "n")
-BUILTIN(__builtin_neon_vmovq_n_i32, "V16cUi", "n")
-BUILTIN(__builtin_neon_vmovq_n_f32, "V16cf", "n")
-BUILTIN(__builtin_neon_vmov_n_i64, "V8cULLi", "n")
-BUILTIN(__builtin_neon_vmovq_n_i64, "V16cULLi", "n")
+BUILTIN(__builtin_neon_vmovq_n_i16, "V8sUs", "n")
+BUILTIN(__builtin_neon_vmovq_n_i32, "V4iUi", "n")
+BUILTIN(__builtin_neon_vmovq_n_f32, "V4ff", "n")
+BUILTIN(__builtin_neon_vmov_n_i64, "V1LLiULLi", "n")
+BUILTIN(__builtin_neon_vmovq_n_i64, "V2LLiULLi", "n")
 BUILTIN(__builtin_neon_vmull_v, "V16cV8cV8ci", "n")
 BUILTIN(__builtin_neon_vmull_lane_v, "V16cV8cV8cii", "n")
 BUILTIN(__builtin_neon_vmull_n_s16, "V16cV8cs", "n")
 BUILTIN(__builtin_neon_vmull_n_s32, "V16cV8ci", "n")
 BUILTIN(__builtin_neon_vmull_n_u16, "V16cV8cUs", "n")
 BUILTIN(__builtin_neon_vmull_n_u32, "V16cV8cUi", "n")
-BUILTIN(__builtin_neon_vmul_n_i16, "V8cV8cUs", "n")
-BUILTIN(__builtin_neon_vmul_n_i32, "V8cV8cUi", "n")
-BUILTIN(__builtin_neon_vmul_n_f32, "V8cV8cf", "n")
-BUILTIN(__builtin_neon_vmulq_n_i16, "V16cV16cUs", "n")
-BUILTIN(__builtin_neon_vmulq_n_i32, "V16cV16cUi", "n")
-BUILTIN(__builtin_neon_vmulq_n_f32, "V16cV16cf", "n")
+BUILTIN(__builtin_neon_vmul_n_i16, "V4sV4sUs", "n")
+BUILTIN(__builtin_neon_vmul_n_i32, "V2iV2iUi", "n")
+BUILTIN(__builtin_neon_vmul_n_f32, "V2fV2ff", "n")
+BUILTIN(__builtin_neon_vmulq_n_i16, "V8sV8sUs", "n")
+BUILTIN(__builtin_neon_vmulq_n_i32, "V4iV4iUi", "n")
+BUILTIN(__builtin_neon_vmulq_n_f32, "V4fV4ff", "n")
 BUILTIN(__builtin_neon_vpadal_v, "V8cV8cV8ci", "n")
 BUILTIN(__builtin_neon_vpadalq_v, "V16cV16cV16ci", "n")
 BUILTIN(__builtin_neon_vpadd_v, "V8cV8cV8ci", "n")
@@ -201,15 +201,15 @@ BUILTIN(__builtin_neon_vqrdmulhq_n_s32, "V16cV16ci", "n")
 BUILTIN(__builtin_neon_vqrshl_v, "V8cV8cV8ci", "n")
 BUILTIN(__builtin_neon_vqrshlq_v, "V16cV16cV16ci", "n")
 BUILTIN(__builtin_neon_vqrshrn_n_v, "V8cV16cii", "n")
-BUILTIN(__builtin_neon_vqrshrun_n_v, "V2iV16cii", "n")
+BUILTIN(__builtin_neon_vqrshrun_n_v, "V8cV16cii", "n")
 BUILTIN(__builtin_neon_vqshl_v, "V8cV8cV8ci", "n")
 BUILTIN(__builtin_neon_vqshlq_v, "V16cV16cV16ci", "n")
-BUILTIN(__builtin_neon_vqshlu_n_v, "V2iV8cii", "n")
-BUILTIN(__builtin_neon_vqshluq_n_v, "V4iV16cii", "n")
+BUILTIN(__builtin_neon_vqshlu_n_v, "V8cV8cii", "n")
+BUILTIN(__builtin_neon_vqshluq_n_v, "V16cV16cii", "n")
 BUILTIN(__builtin_neon_vqshl_n_v, "V8cV8cii", "n")
 BUILTIN(__builtin_neon_vqshlq_n_v, "V16cV16cii", "n")
 BUILTIN(__builtin_neon_vqshrn_n_v, "V8cV16cii", "n")
-BUILTIN(__builtin_neon_vqshrun_n_v, "V2iV16cii", "n")
+BUILTIN(__builtin_neon_vqshrun_n_v, "V8cV16cii", "n")
 BUILTIN(__builtin_neon_vqsub_v, "V8cV8cV8ci", "n")
 BUILTIN(__builtin_neon_vqsubq_v, "V16cV16cV16ci", "n")
 BUILTIN(__builtin_neon_vraddhn_v, "V8cV16cV16ci", "n")
@@ -238,15 +238,15 @@ BUILTIN(__builtin_neon_vrsra_n_v, "V8cV8cV8cii", "n")
 BUILTIN(__builtin_neon_vrsraq_n_v, "V16cV16cV16cii", "n")
 BUILTIN(__builtin_neon_vrsubhn_v, "V8cV16cV16ci", "n")
 BUILTIN(__builtin_neon_vset_lane_i8, "V8cUcV8ci", "n")
-BUILTIN(__builtin_neon_vset_lane_i16, "V8cUsV8ci", "n")
-BUILTIN(__builtin_neon_vset_lane_i32, "V8cUiV8ci", "n")
-BUILTIN(__builtin_neon_vset_lane_f32, "V8cfV8ci", "n")
+BUILTIN(__builtin_neon_vset_lane_i16, "V4sUsV4si", "n")
+BUILTIN(__builtin_neon_vset_lane_i32, "V2iUiV2ii", "n")
+BUILTIN(__builtin_neon_vset_lane_f32, "V2ffV2fi", "n")
 BUILTIN(__builtin_neon_vsetq_lane_i8, "V16cUcV16ci", "n")
-BUILTIN(__builtin_neon_vsetq_lane_i16, "V16cUsV16ci", "n")
-BUILTIN(__builtin_neon_vsetq_lane_i32, "V16cUiV16ci", "n")
-BUILTIN(__builtin_neon_vsetq_lane_f32, "V16cfV16ci", "n")
-BUILTIN(__builtin_neon_vset_lane_i64, "V8cULLiV8ci", "n")
-BUILTIN(__builtin_neon_vsetq_lane_i64, "V16cULLiV16ci", "n")
+BUILTIN(__builtin_neon_vsetq_lane_i16, "V8sUsV8si", "n")
+BUILTIN(__builtin_neon_vsetq_lane_i32, "V4iUiV4ii", "n")
+BUILTIN(__builtin_neon_vsetq_lane_f32, "V4ffV4fi", "n")
+BUILTIN(__builtin_neon_vset_lane_i64, "V1LLiULLiV1LLii", "n")
+BUILTIN(__builtin_neon_vsetq_lane_i64, "V2LLiULLiV2LLii", "n")
 BUILTIN(__builtin_neon_vshl_v, "V8cV8cV8ci", "n")
 BUILTIN(__builtin_neon_vshlq_v, "V16cV16cV16ci", "n")
 BUILTIN(__builtin_neon_vshll_n_v, "V16cV8cii", "n")
@@ -290,8 +290,8 @@ BUILTIN(__builtin_neon_vtbx3_v, "V8cV8cV8cV8cV8cV8ci", "n")
 BUILTIN(__builtin_neon_vtbx4_v, "V8cV8cV8cV8cV8cV8cV8ci", "n")
 BUILTIN(__builtin_neon_vtrn_v, "V16cV8cV8ci", "n")
 BUILTIN(__builtin_neon_vtrnq_v, "V32cV16cV16ci", "n")
-BUILTIN(__builtin_neon_vtst_v, "V2iV8cV8ci", "n")
-BUILTIN(__builtin_neon_vtstq_v, "V4iV16cV16ci", "n")
+BUILTIN(__builtin_neon_vtst_v, "V8cV8cV8ci", "n")
+BUILTIN(__builtin_neon_vtstq_v, "V16cV16cV16ci", "n")
 BUILTIN(__builtin_neon_vuzp_v, "V16cV8cV8ci", "n")
 BUILTIN(__builtin_neon_vuzpq_v, "V32cV16cV16ci", "n")
 BUILTIN(__builtin_neon_vzip_v, "V16cV8cV8ci", "n")
index 1c903094b4d89e72c06c293d8051bcd245414836..3ef3e17198a65a52243d19266b72fb8800d76343 100644 (file)
@@ -1058,6 +1058,17 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
     Value* SV = llvm::ConstantVector::get(Indices.begin(), Indices.size());
     return Builder.CreateShuffleVector(Ops[0], Ops[1], SV, "vext");
   }
+  case ARM::BI__builtin_neon_vget_lane_i8:
+  case ARM::BI__builtin_neon_vget_lane_i16:
+  case ARM::BI__builtin_neon_vget_lane_i32:
+  case ARM::BI__builtin_neon_vget_lane_i64:
+  case ARM::BI__builtin_neon_vget_lane_f32:
+  case ARM::BI__builtin_neon_vgetq_lane_i8:
+  case ARM::BI__builtin_neon_vgetq_lane_i16:
+  case ARM::BI__builtin_neon_vgetq_lane_i32:
+  case ARM::BI__builtin_neon_vgetq_lane_i64:
+  case ARM::BI__builtin_neon_vgetq_lane_f32:
+    return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)));
   case ARM::BI__builtin_neon_vtbl1_v:
     return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbl1),
                         Ops, "vtbl1");