Author: sampo Date: Wed Jun 16 23:17:01 2010 New Revision: 106208 URL: http://llvm.org/viewvc/llvm-project?rev=106208&view=rev Log: Generate arm_neon.inc in include/clang/Basic, which provides: 1. builtins definitions for BuiltinsARM.def 2. intrinsic validation code for SemaChecking
Unsure as to whether this is the best way to handle the make dependencies or not. Added: cfe/trunk/include/clang/Basic/arm_neon.td - copied unchanged from r106206, cfe/trunk/lib/Headers/arm_neon.td Removed: cfe/trunk/lib/Headers/arm_neon.td Modified: cfe/trunk/include/clang/Basic/BuiltinsARM.def cfe/trunk/include/clang/Basic/Makefile cfe/trunk/lib/Headers/CMakeLists.txt cfe/trunk/lib/Headers/Makefile cfe/trunk/lib/Sema/SemaChecking.cpp Modified: cfe/trunk/include/clang/Basic/BuiltinsARM.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsARM.def?rev=106208&r1=106207&r2=106208&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/BuiltinsARM.def (original) +++ cfe/trunk/include/clang/Basic/BuiltinsARM.def Wed Jun 16 23:17:01 2010 @@ -19,218 +19,8 @@ BUILTIN(__builtin_thread_pointer, "v*", "") // NEON -BUILTIN(__builtin_neon_vaba_v, "V8cV8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vabaq_v, "V16cV16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vabal_v, "V16cV16cV8cV8ci", "n") -BUILTIN(__builtin_neon_vabd_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vabdq_v, "V16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vabdl_v, "V16cV8cV8ci", "n") -BUILTIN(__builtin_neon_vabs_v, "V8cV8ci", "n") -BUILTIN(__builtin_neon_vabsq_v, "V16cV16ci", "n") -BUILTIN(__builtin_neon_vaddhn_v, "V8cV16cV16ci", "n") -BUILTIN(__builtin_neon_vaddl_v, "V16cV8cV8ci", "n") -BUILTIN(__builtin_neon_vaddw_v, "V16cV16cV8ci", "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") -BUILTIN(__builtin_neon_vclzq_v, "V16cV16ci", "n") -BUILTIN(__builtin_neon_vcnt_v, "V8cV8ci", "n") -BUILTIN(__builtin_neon_vcntq_v, "V16cV16ci", "n") -BUILTIN(__builtin_neon_vcvt_f16_v, "V8cV16ci", "n") -BUILTIN(__builtin_neon_vcvt_f32_v, "V2fV8ci", "n") -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, "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, "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, "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") -BUILTIN(__builtin_neon_vhsubq_v, "V16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vld1q_v, "V16cvC*i", "n") -BUILTIN(__builtin_neon_vld1_v, "V8cvC*i", "n") -BUILTIN(__builtin_neon_vld1q_dup_v, "V16cvC*i", "n") -BUILTIN(__builtin_neon_vld1_dup_v, "V8cvC*i", "n") -BUILTIN(__builtin_neon_vld1q_lane_v, "V16cvC*ii", "n") -BUILTIN(__builtin_neon_vld1_lane_v, "V8cvC*ii", "n") -BUILTIN(__builtin_neon_vld2q_v, "V32cvC*i", "n") -BUILTIN(__builtin_neon_vld2_v, "V16cvC*i", "n") -BUILTIN(__builtin_neon_vld2_dup_v, "V16cvC*i", "n") -BUILTIN(__builtin_neon_vld2q_lane_v, "V32cvC*ii", "n") -BUILTIN(__builtin_neon_vld2_lane_v, "V16cvC*ii", "n") -BUILTIN(__builtin_neon_vld3q_v, "V48cvC*i", "n") -BUILTIN(__builtin_neon_vld3_v, "V24cvC*i", "n") -BUILTIN(__builtin_neon_vld3_dup_v, "V24cvC*i", "n") -BUILTIN(__builtin_neon_vld3q_lane_v, "V48cvC*ii", "n") -BUILTIN(__builtin_neon_vld3_lane_v, "V24cvC*ii", "n") -BUILTIN(__builtin_neon_vld4q_v, "V64cvC*i", "n") -BUILTIN(__builtin_neon_vld4_v, "V32cvC*i", "n") -BUILTIN(__builtin_neon_vld4_dup_v, "V32cvC*i", "n") -BUILTIN(__builtin_neon_vld4q_lane_v, "V64cvC*ii", "n") -BUILTIN(__builtin_neon_vld4_lane_v, "V32cvC*ii", "n") -BUILTIN(__builtin_neon_vmax_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vmaxq_v, "V16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vmin_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vminq_v, "V16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vmlal_v, "V16cV16cV8cV8ci", "n") -BUILTIN(__builtin_neon_vmlal_lane_v, "V16cV16cV8cV8cii", "n") -BUILTIN(__builtin_neon_vmla_lane_v, "V8cV8cV8cV8cii", "n") -BUILTIN(__builtin_neon_vmlaq_lane_v, "V16cV16cV16cV16cii", "n") -BUILTIN(__builtin_neon_vmlsl_v, "V16cV16cV8cV8ci", "n") -BUILTIN(__builtin_neon_vmlsl_lane_v, "V16cV16cV8cV8cii", "n") -BUILTIN(__builtin_neon_vmls_lane_v, "V8cV8cV8cV8cii", "n") -BUILTIN(__builtin_neon_vmlsq_lane_v, "V16cV16cV16cV16cii", "n") -BUILTIN(__builtin_neon_vmovl_v, "V16cV8ci", "n") -BUILTIN(__builtin_neon_vmovn_v, "V8cV16ci", "n") -BUILTIN(__builtin_neon_vmull_v, "V16cV8cV8ci", "n") -BUILTIN(__builtin_neon_vmull_lane_v, "V16cV8cV8cii", "n") -BUILTIN(__builtin_neon_vpadal_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vpadalq_v, "V16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vpadd_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vpaddl_v, "V8cV8ci", "n") -BUILTIN(__builtin_neon_vpaddlq_v, "V16cV16ci", "n") -BUILTIN(__builtin_neon_vpmax_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vpmin_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vqabs_v, "V8cV8ci", "n") -BUILTIN(__builtin_neon_vqabsq_v, "V16cV16ci", "n") -BUILTIN(__builtin_neon_vqadd_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vqaddq_v, "V16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vqdmlal_v, "V16cV16cV8cV8ci", "n") -BUILTIN(__builtin_neon_vqdmlal_lane_v, "V16cV16cV8cV8cii", "n") -BUILTIN(__builtin_neon_vqdmlsl_v, "V16cV16cV8cV8ci", "n") -BUILTIN(__builtin_neon_vqdmlsl_lane_v, "V16cV16cV8cV8cii", "n") -BUILTIN(__builtin_neon_vqdmulh_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vqdmulhq_v, "V16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vqdmulh_lane_v, "V8cV8cV8cii", "n") -BUILTIN(__builtin_neon_vqdmulhq_lane_v, "V16cV16cV16cii", "n") -BUILTIN(__builtin_neon_vqdmull_v, "V16cV8cV8ci", "n") -BUILTIN(__builtin_neon_vqdmull_lane_v, "V16cV8cV8cii", "n") -BUILTIN(__builtin_neon_vqmovn_v, "V8cV16ci", "n") -BUILTIN(__builtin_neon_vqmovun_v, "V8cV16ci", "n") -BUILTIN(__builtin_neon_vqneg_v, "V8cV8ci", "n") -BUILTIN(__builtin_neon_vqnegq_v, "V16cV16ci", "n") -BUILTIN(__builtin_neon_vqrdmulh_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vqrdmulhq_v, "V16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vqrdmulh_lane_v, "V8cV8cV8cii", "n") -BUILTIN(__builtin_neon_vqrdmulhq_lane_v, "V16cV16cV16cii", "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, "V8cV16cii", "n") -BUILTIN(__builtin_neon_vqshl_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vqshlq_v, "V16cV16cV16ci", "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, "V8cV16cii", "n") -BUILTIN(__builtin_neon_vqsub_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vqsubq_v, "V16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vraddhn_v, "V8cV16cV16ci", "n") -BUILTIN(__builtin_neon_vrecpe_v, "V8cV8ci", "n") -BUILTIN(__builtin_neon_vrecpeq_v, "V16cV16ci", "n") -BUILTIN(__builtin_neon_vrecps_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vrecpsq_v, "V16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vrhadd_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vrhaddq_v, "V16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vrshl_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vrshlq_v, "V16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vrshrn_n_v, "V8cV16cii", "n") -BUILTIN(__builtin_neon_vrshr_n_v, "V8cV8cii", "n") -BUILTIN(__builtin_neon_vrshrq_n_v, "V16cV16cii", "n") -BUILTIN(__builtin_neon_vrsqrte_v, "V8cV8ci", "n") -BUILTIN(__builtin_neon_vrsqrteq_v, "V16cV16ci", "n") -BUILTIN(__builtin_neon_vrsqrts_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vrsqrtsq_v, "V16cV16cV16ci", "n") -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, "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, "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") -BUILTIN(__builtin_neon_vshl_n_v, "V8cV8cii", "n") -BUILTIN(__builtin_neon_vshlq_n_v, "V16cV16cii", "n") -BUILTIN(__builtin_neon_vshrn_n_v, "V8cV16cii", "n") -BUILTIN(__builtin_neon_vshr_n_v, "V8cV8cii", "n") -BUILTIN(__builtin_neon_vshrq_n_v, "V16cV16cii", "n") -BUILTIN(__builtin_neon_vsli_n_v, "V8cV8cV8cii", "n") -BUILTIN(__builtin_neon_vsliq_n_v, "V16cV16cV16cii", "n") -BUILTIN(__builtin_neon_vsra_n_v, "V8cV8cV8cii", "n") -BUILTIN(__builtin_neon_vsraq_n_v, "V16cV16cV16cii", "n") -BUILTIN(__builtin_neon_vsri_n_v, "V8cV8cV8cii", "n") -BUILTIN(__builtin_neon_vsriq_n_v, "V16cV16cV16cii", "n") -BUILTIN(__builtin_neon_vst1q_v, "vv*V16ci", "n") -BUILTIN(__builtin_neon_vst1_v, "vv*V8ci", "n") -BUILTIN(__builtin_neon_vst1q_lane_v, "vv*V16cii", "n") -BUILTIN(__builtin_neon_vst1_lane_v, "vv*V8cii", "n") -BUILTIN(__builtin_neon_vst2q_v, "vv*V16cV16ci", "n") -BUILTIN(__builtin_neon_vst2_v, "vv*V8cV8ci", "n") -BUILTIN(__builtin_neon_vst2q_lane_v, "vv*V16cV16cii", "n") -BUILTIN(__builtin_neon_vst2_lane_v, "vv*V8cV8cii", "n") -BUILTIN(__builtin_neon_vst3q_v, "vv*V16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vst3_v, "vv*V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vst3q_lane_v, "vv*V16cV16cV16cii", "n") -BUILTIN(__builtin_neon_vst3_lane_v, "vv*V8cV8cV8cii", "n") -BUILTIN(__builtin_neon_vst4q_v, "vv*V16cV16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vst4_v, "vv*V8cV8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vst4q_lane_v, "vv*V16cV16cV16cV16cii", "n") -BUILTIN(__builtin_neon_vst4_lane_v, "vv*V8cV8cV8cV8cii", "n") -BUILTIN(__builtin_neon_vsubhn_v, "V8cV16cV16ci", "n") -BUILTIN(__builtin_neon_vsubl_v, "V16cV8cV8ci", "n") -BUILTIN(__builtin_neon_vsubw_v, "V16cV16cV8ci", "n") -BUILTIN(__builtin_neon_vtbl1_v, "V8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vtbl2_v, "V8cV8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vtbl3_v, "V8cV8cV8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vtbl4_v, "V8cV8cV8cV8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vtbx1_v, "V8cV8cV8cV8ci", "n") -BUILTIN(__builtin_neon_vtbx2_v, "V8cV8cV8cV8cV8ci", "n") -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, "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") -BUILTIN(__builtin_neon_vzipq_v, "V32cV16cV16ci", "n") +#define GET_NEON_BUILTINS +#include "clang/Basic/arm_neon.inc" +#undef GET_NEON_BUILTINS #undef BUILTIN Modified: cfe/trunk/include/clang/Basic/Makefile URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Makefile?rev=106208&r1=106207&r2=106208&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/Makefile (original) +++ cfe/trunk/include/clang/Basic/Makefile Wed Jun 16 23:17:01 2010 @@ -3,7 +3,7 @@ DiagnosticCommonKinds.inc DiagnosticDriverKinds.inc \ DiagnosticFrontendKinds.inc DiagnosticLexKinds.inc \ DiagnosticParseKinds.inc DiagnosticSemaKinds.inc \ - DiagnosticGroups.inc AttrList.inc + DiagnosticGroups.inc AttrList.inc arm_neon.inc TABLEGEN_INC_FILES_COMMON = 1 @@ -23,3 +23,7 @@ $(Echo) "Building Clang attribute list with tblgen" $(Verb) $(TableGen) -gen-clang-attr-list -o $(call SYSPATH, $@) \ -I $(PROJ_SRC_DIR)/../.. $< + +$(ObjDir)/arm_neon.inc.tmp : arm_neon.td $(TBLGEN) $(ObjDir)/.dir + $(Echo) "Building Clang arm_neon.inc with tblgen" + $(Verb) $(TableGen) -gen-arm-neon-sema -o $(call SYSPATH, $@) $< Modified: cfe/trunk/lib/Headers/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/CMakeLists.txt?rev=106208&r1=106207&r2=106208&view=diff ============================================================================== --- cfe/trunk/lib/Headers/CMakeLists.txt (original) +++ cfe/trunk/lib/Headers/CMakeLists.txt Wed Jun 16 23:17:01 2010 @@ -23,7 +23,7 @@ # Generate arm_neon.h set(LLVM_TARGET_DEFINITIONS arm_neon.td) -tablegen(arm_neon.h.inc -gen-arm-neon-header) +tablegen(arm_neon.h.inc -gen-arm-neon) add_custom_target(ClangARMNeon DEPENDS arm_neon.h.inc) add_custom_command(OUTPUT ${output_dir}/arm_neon.h Modified: cfe/trunk/lib/Headers/Makefile URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/Makefile?rev=106208&r1=106207&r2=106208&view=diff ============================================================================== --- cfe/trunk/lib/Headers/Makefile (original) +++ cfe/trunk/lib/Headers/Makefile Wed Jun 16 23:17:01 2010 @@ -47,6 +47,6 @@ install-local:: $(INSTHEADERS) -$(ObjDir)/arm_neon.h.inc.tmp : arm_neon.td $(TBLGEN) $(ObjDir)/.dir +$(ObjDir)/arm_neon.h.inc.tmp : $(CLANG_LEVEL)/include/clang/Basic/arm_neon.td $(TBLGEN) $(ObjDir)/.dir $(Echo) "Building Clang arm_neon.h.inc with tblgen" - $(Verb) $(TableGen) -gen-arm-neon-header -o $(call SYSPATH, $@) $< + $(Verb) $(TableGen) -gen-arm-neon -o $(call SYSPATH, $@) $< Removed: cfe/trunk/lib/Headers/arm_neon.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/arm_neon.td?rev=106207&view=auto ============================================================================== --- cfe/trunk/lib/Headers/arm_neon.td (original) +++ cfe/trunk/lib/Headers/arm_neon.td (removed) @@ -1,341 +0,0 @@ -//===--- arm_neon.td - ARM NEON compiler interface ------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines the TableGen definitions from which the ARM NEON header -// file will be generated. See ARM document DUI0348B. -// -//===----------------------------------------------------------------------===// - -class Op; - -def OP_NONE : Op; -def OP_ADD : Op; -def OP_SUB : Op; -def OP_MUL : Op; -def OP_MLA : Op; -def OP_MLS : Op; -def OP_MUL_N : Op; -def OP_MLA_N : Op; -def OP_MLS_N : Op; -def OP_EQ : Op; -def OP_GE : Op; -def OP_LE : Op; -def OP_GT : Op; -def OP_LT : Op; -def OP_NEG : Op; -def OP_NOT : Op; -def OP_AND : Op; -def OP_OR : Op; -def OP_XOR : Op; -def OP_ANDN : Op; -def OP_ORN : Op; -def OP_CAST : Op; -def OP_HI : Op; -def OP_LO : Op; -def OP_CONC : Op; -def OP_DUP : Op; -def OP_SEL : Op; -def OP_REV64 : Op; -def OP_REV32 : Op; -def OP_REV16 : Op; - -class Inst <string p, string t, Op o> { - string Prototype = p; - string Types = t; - Op Operand = o; - bit isShift = 0; -} - -// Used to generate Builtins.def -class SInst<string p, string t> : Inst<p, t, OP_NONE> {} -class IInst<string p, string t> : Inst<p, t, OP_NONE> {} -class WInst<string p, string t> : Inst<p, t, OP_NONE> {} - -// prototype: return (arg, arg, ...) -// v: void -// t: best-fit integer (int/poly args) -// x: signed integer (int/float args) -// u: unsigned integer (int/float args) -// f: float (int args) -// d: default -// w: double width elements, same num elts -// n: double width elements, half num elts -// h: half width elements, double num elts -// e: half width elements, double num elts, unsigned -// i: constant int -// l: constant uint64 -// s: scalar of element type -// a: scalar of element type (splat to vector type) -// k: default elt width, double num elts -// #: array of default vectors -// p: pointer type -// c: const pointer type - -// sizes: -// c: char -// s: short -// i: int -// l: long -// f: float -// h: half-float - -// size modifiers: -// U: unsigned -// Q: 128b -// P: polynomial - -//////////////////////////////////////////////////////////////////////////////// -// E.3.1 Addition -def VADD : Inst<"ddd", "csilfUcUsUiUlQcQsQiQlQfQUcQUsQUiQUl", OP_ADD>; -def VADDL : SInst<"wdd", "csiUcUsUi">; -def VADDW : SInst<"wwd", "csiUcUsUi">; -def VHADD : SInst<"ddd", "csiUcUsUiQcQsQiQUcQUsQUi">; -def VRHADD : SInst<"ddd", "csiUcUsUiQcQsQiQUcQUsQUi">; -def VQADD : SInst<"ddd", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl">; -def VADDHN : IInst<"dww", "csiUcUsUi">; -def VRADDHN : IInst<"dww", "csiUcUsUi">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.2 Multiplication -def VMUL : Inst<"ddd", "csifUcUsUiPcQcQsQiQfQUcQUsQUiQPc", OP_MUL>; -def VMLA : Inst<"dddd", "csifUcUsUiQcQsQiQfQUcQUsQUi", OP_MLA>; -def VMLAL : SInst<"wwdd", "csiUcUsUi">; -def VMLS : Inst<"dddd", "csifUcUsUiQcQsQiQfQUcQUsQUi", OP_MLS>; -def VMLSL : SInst<"wwdd", "csiUcUsUi">; -def VQDMULH : SInst<"ddd", "siQsQi">; -def VQRDMULH : SInst<"ddd", "siQsQi">; -def VQDMLAL : SInst<"wwdd", "si">; -def VQDMLSL : SInst<"wwdd", "si">; -def VMULL : SInst<"wdd", "csiUcUsUiPc">; -def VQDMULL : SInst<"wdd", "si">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.3 Subtraction -def VSUB : Inst<"ddd", "csilfUcUsUiUlQcQsQiQlQfQUcQUsQUiQUl", OP_SUB>; -def VSUBL : SInst<"wdd", "csiUcUsUi">; -def VSUBW : SInst<"wwd", "csiUcUsUi">; -def VQSUB : SInst<"ddd", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl">; -def VHSUB : SInst<"ddd", "csiUcUsUiQcQsQiQUcQUsQUi">; -def VSUBHN : IInst<"dww", "csiUcUsUi">; -def VRSUBHN : IInst<"dww", "csiUcUsUi">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.4 Comparison -def VCEQ : Inst<"udd", "csifUcUsUiPcQcQsQiQfQUcQUsQUiQPc", OP_EQ>; -def VCGE : Inst<"udd", "csifUcUsUiQcQsQiQfQUcQUsQUi", OP_GE>; -def VCLE : Inst<"udd", "csifUcUsUiQcQsQiQfQUcQUsQUi", OP_LE>; -def VCGT : Inst<"udd", "csifUcUsUiQcQsQiQfQUcQUsQUi", OP_GT>; -def VCLT : Inst<"udd", "csifUcUsUiQcQsQiQfQUcQUsQUi", OP_LT>; -def VCAGE : IInst<"udd", "fQf">; -def VCALE : IInst<"udd", "fQf">; -def VCAGT : IInst<"udd", "fQf">; -def VCALT : IInst<"udd", "fQf">; -def VTST : WInst<"udd", "csiUcUsUiPcQcQsQiQUcQUsQUiQPc">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.5 Absolute Difference -def VABD : SInst<"ddd", "csiUcUsUifQcQsQiQUcQUsQUiQf">; -def VABDL : SInst<"wdd", "csiUcUsUi">; -def VABA : SInst<"dddd", "csiUcUsUiQcQsQiQUcQUsQUi">; -def VABAL : SInst<"wwdd", "csiUcUsUi">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.6 Max/Min -def VMAX : SInst<"ddd", "csiUcUsUifQcQsQiQUcQUsQUiQf">; -def VMIN : SInst<"ddd", "csiUcUsUifQcQsQiQUcQUsQUiQf">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.7 Pairdise Addition -def VPADD : IInst<"ddd", "csiUcUsUif">; -def VPADDL : SInst<"nd", "csiUcUsUiQcQsQiQUcQUsQUi">; -def VPADAL : SInst<"nnd", "csiUcUsUiQcQsQiQUcQUsQUi">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.8-9 Folding Max/Min -def VPMAX : SInst<"ddd", "csiUcUsUif">; -def VPMIN : SInst<"ddd", "csiUcUsUif">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.10 Reciprocal/Sqrt -def VRECPS : IInst<"ddd", "fQf">; -def VRSQRTS : IInst<"ddd", "fQf">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.11 Shifts by signed variable -def VSHL : SInst<"ddd", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl">; -def VQSHL : SInst<"ddd", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl">; -def VRSHL : SInst<"ddd", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl">; -def VQRSHL : SInst<"ddd", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.12 Shifts by constant -let isShift = 1 in { -def VSHR_N : SInst<"ddi", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl">; -def VSHL_N : IInst<"ddi", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl">; -def VRSHR_N : SInst<"ddi", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl">; -def VSRA_N : SInst<"dddi", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl">; -def VRSRA_N : SInst<"dddi", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl">; -def VQSHL_N : SInst<"ddi", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl">; -def VQSHLU_N : SInst<"udi", "csilQcQsQiQl">; -def VSHRN_N : IInst<"hki", "silUsUiUl">; -def VQSHRUN_N : SInst<"eki", "sil">; -def VQRSHRUN_N : SInst<"eki", "sil">; -def VQSHRN_N : SInst<"hki", "silUsUiUl">; -def VRSHRN_N : IInst<"hki", "silUsUiUl">; -def VQRSHRN_N : SInst<"hki", "silUsUiUl">; -def VSHLL_N : SInst<"wdi", "csiUcUsUi">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.13 Shifts with insert -def VSRI_N : WInst<"dddi", "csilUcUsUiUlPcPsQcQsQiQlQUcQUsQUiQUlQPcQPs">; -def VSLI_N : WInst<"dddi", "csilUcUsUiUlPcPsQcQsQiQlQUcQUsQUiQUlQPcQPs">; -} - -//////////////////////////////////////////////////////////////////////////////// -// E.3.14 Loads and stores of a single vector -def VLD1 : WInst<"dc", "QUcQUsQUiQUlQcQsQiQlQhQfQPcQPsUcUsUiUlcsilhfPcPs">; -def VLD1_LANE : WInst<"dci", "QUcQUsQUiQUlQcQsQiQlQhQfQPcQPsUcUsUiUlcsilhfPcPs">; -def VLD1_DUP : WInst<"dc", "QUcQUsQUiQUlQcQsQiQlQhQfQPcQPsUcUsUiUlcsilhfPcPs">; -def VST1 : WInst<"vpd", "QUcQUsQUiQUlQcQsQiQlQhQfQPcQPsUcUsUiUlcsilhfPcPs">; -def VST1_LANE : WInst<"vpdi", "QUcQUsQUiQUlQcQsQiQlQhQfQPcQPsUcUsUiUlcsilhfPcPs">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.15 Loads and stores of an N-element structure -def VLD2 : WInst<"2c", "QUcQUsQUiQcQsQiQhQfQPcQPsUcUsUiUlcsilhfPcPs">; -def VLD3 : WInst<"3c", "QUcQUsQUiQcQsQiQhQfQPcQPsUcUsUiUlcsilhfPcPs">; -def VLD4 : WInst<"4c", "QUcQUsQUiQcQsQiQhQfQPcQPsUcUsUiUlcsilhfPcPs">; -def VLD2_DUP : WInst<"2c", "UcUsUiUlcsilhfPcPs">; -def VLD3_DUP : WInst<"3c", "UcUsUiUlcsilhfPcPs">; -def VLD4_DUP : WInst<"4c", "UcUsUiUlcsilhfPcPs">; -def VLD2_LANE : WInst<"2ci", "QUsQUiQsQiQhQfQPsUcUsUicsihfPcPs">; -def VLD3_LANE : WInst<"3ci", "QUsQUiQsQiQhQfQPsUcUsUicsihfPcPs">; -def VLD4_LANE : WInst<"4ci", "QUsQUiQsQiQhQfQPsUcUsUicsihfPcPs">; -def VST2 : WInst<"vp2", "QUcQUsQUiQcQsQiQhQfQPcQPsUcUsUiUlcsilhfPcPs">; -def VST3 : WInst<"vp3", "QUcQUsQUiQcQsQiQhQfQPcQPsUcUsUiUlcsilhfPcPs">; -def VST4 : WInst<"vp4", "QUcQUsQUiQcQsQiQhQfQPcQPsUcUsUiUlcsilhfPcPs">; -def VST2_LANE : WInst<"vp2i", "QUsQUiQsQiQhQfQPsUcUsUicsihfPcPs">; -def VST3_LANE : WInst<"vp3i", "QUsQUiQsQiQhQfQPsUcUsUicsihfPcPs">; -def VST4_LANE : WInst<"vp4i", "QUsQUiQsQiQhQfQPsUcUsUicsihfPcPs">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.16 Extract lanes from a vector -def VGET_LANE : IInst<"sdi", "UcUsUicsiPcPsfQUcQUsQUiQcQsQiQPcQPsQflUlQlQUl">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.17 Set lanes within a vector -def VSET_LANE : IInst<"dsdi", "UcUsUicsiPcPsfQUcQUsQUiQcQsQiQPcQPsQflUlQlQUl">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.18 Initialize a vector from bit pattern -def VCREATE: Inst<"dl", "csihfUcUsUiUlPcPsl", OP_CAST>; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.19 Set all lanes to same value -def VDUP_N : Inst<"ds", "UcUsUicsiPcPsfQUcQUsQUiQcQsQiQPcQPsQflUlQlQUl", OP_DUP>; -def VMOV_N : Inst<"ds", "UcUsUicsiPcPsfQUcQUsQUiQcQsQiQPcQPsQflUlQlQUl", OP_DUP>; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.20 Combining vectors -def VCOMBINE : Inst<"kdd", "csilhfUcUsUiUlPcPs", OP_CONC>; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.21 Splitting vectors -def VGET_HIGH : Inst<"dk", "csilhfUcUsUiUlPcPs", OP_HI>; -def VGET_LOW : Inst<"dk", "csilhfUcUsUiUlPcPs", OP_LO>; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.22 Converting vectors -def VCVT_S32 : SInst<"xd", "fQf">; -def VCVT_U32 : SInst<"ud", "fQf">; -def VCVT_F16 : SInst<"hk", "f">; -def VCVT_N_S32 : SInst<"xdi", "fQf">; -def VCVT_N_U32 : SInst<"udi", "fQf">; -def VCVT_F32 : SInst<"fd", "iUiQiQUi">; -def VCVT_F32_F16 : SInst<"kh", "f">; -def VCVT_N_F32 : SInst<"fdi", "iUiQiQUi">; -def VMOVN : IInst<"hk", "silUsUiUl">; -def VMOVL : SInst<"wd", "csiUcUsUi">; -def VQMOVN : SInst<"hk", "silUsUiUl">; -def VQMOVUN : SInst<"ek", "sil">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.23-24 Table lookup, Extended table lookup -def VTBL1 : WInst<"ddt", "UccPc">; -def VTBL2 : WInst<"d2t", "UccPc">; -def VTBL3 : WInst<"d3t", "UccPc">; -def VTBL4 : WInst<"d4t", "UccPc">; -def VTBX1 : WInst<"dddt", "UccPc">; -def VTBX2 : WInst<"dd2t", "UccPc">; -def VTBX3 : WInst<"dd3t", "UccPc">; -def VTBX4 : WInst<"dd4t", "UccPc">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.25 Operations with a scalar value -def VMLA_LANE : IInst<"ddddi", "siUsUifQsQiQUsQUiQf">; -def VMLAL_LANE : SInst<"wwddi", "siUsUi">; -def VQDMLAL_LANE : SInst<"wwddi", "si">; -def VMLS_LANE : IInst<"ddddi", "siUsUifQsQiQUsQUiQf">; -def VMLSL_LANE : SInst<"wwddi", "siUsUi">; -def VQDMLSL_LANE : SInst<"wwddi", "si">; -def VMUL_N : Inst<"dds", "sifUsUiQsQiQfQUsQUi", OP_MUL_N>; -def VMULL_N : SInst<"wda", "siUsUi">; -def VMULL_LANE : SInst<"wddi", "siUsUi">; -def VQDMULL_N : SInst<"wda", "si">; -def VQDMULL_LANE : SInst<"wddi", "si">; -def VQDMULH_N : SInst<"dda", "siQsQi">; -def VQDMULH_LANE : SInst<"dddi", "siQsQi">; -def VQRDMULH_N : SInst<"dda", "siQsQi">; -def VQRDMULH_LANE : SInst<"dddi", "siQsQi">; -def VMLA_N : Inst<"ddda", "siUsUifQsQiQUsQUiQf", OP_MLA_N>; -def VMLAL_N : SInst<"wwda", "siUsUi">; -def VQDMLAL_N : SInst<"wwda", "si">; -def VMLS_N : Inst<"ddds", "siUsUifQsQiQUsQUiQf", OP_MLS_N>; -def VMLSL_N : SInst<"wwda", "siUsUi">; -def VQDMLSL_N : SInst<"wwda", "si">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.26 Vector Extract -def VEXT : WInst<"dddi", "cUcPcsUsPsiUilUlQcQUcQPcQsQUsQPsQiQUiQlQUl">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.27 Reverse vector elements (sdap endianness) -def VREV64 : Inst<"dd", "csiUcUsUiPcPsfQcQsQiQUcQUsQUiQPcQPsQf", OP_REV64>; -def VREV32 : Inst<"dd", "csUcUsPcQcQsQUcQUsQPc", OP_REV32>; -def VREV16 : Inst<"dd", "cUcPcQcQUcQPc", OP_REV16>; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.28 Other single operand arithmetic -def VABS : SInst<"dd", "csifQcQsQiQf">; -def VQABS : SInst<"dd", "csiQcQsQi">; -def VNEG : Inst<"dd", "csifQcQsQiQf", OP_NEG>; -def VQNEG : SInst<"dd", "csiQcQsQi">; -def VCLS : SInst<"dd", "csiQcQsQi">; -def VCLZ : IInst<"dd", "csiUcUsUiQcQsQiQUcQUsQUi">; -def VCNT : WInst<"dd", "UccPcQUcQcQPc">; -def VRECPE : SInst<"dd", "fUiQfQUi">; -def VRSQRTE : SInst<"dd", "fUiQfQUi">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.29 Logical operations -def VMVN : Inst<"dd", "csiUcUsUiPcQcQsQiQUcQUsQUiQPc", OP_NOT>; -def VAND : Inst<"ddd", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl", OP_AND>; -def VORR : Inst<"ddd", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl", OP_OR>; -def VEOR : Inst<"ddd", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl", OP_XOR>; -def VBIC : Inst<"ddd", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl", OP_ANDN>; -def VORN : Inst<"ddd", "csilUcUsUiUlQcQsQiQlQUcQUsQUiQUl", OP_ORN>; -def VBSL : Inst<"dudd", "csilUcUsUiUlfPcPsQcQsQiQlQUcQUsQUiQUlQfQPcQPs", OP_SEL>; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.30 Transposition operations -def VTRN: WInst<"2dd", "csiUcUsUifPcPsQcQsQiQUcQUsQUiQfQPcQPs">; -def VZIP: WInst<"2dd", "csUcUsfPcPsQcQsQiQUcQUsQUiQfQPcQPs">; -def VUZP: WInst<"2dd", "csiUcUsUifPcPsQcQsQiQUcQUsQUiQfQPcQPs">; - -//////////////////////////////////////////////////////////////////////////////// -// E.3.31 Vector reinterpret cast operations Modified: cfe/trunk/lib/Sema/SemaChecking.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=106208&r1=106207&r2=106208&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaChecking.cpp (original) +++ cfe/trunk/lib/Sema/SemaChecking.cpp Wed Jun 16 23:17:01 2010 @@ -277,199 +277,9 @@ unsigned mask = 0; unsigned TV = 0; switch (BuiltinID) { - case ARM::BI__builtin_neon_vaba_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vabaq_v: mask = 0x7070000; break; - case ARM::BI__builtin_neon_vabal_v: mask = 0xE0E0000; break; - case ARM::BI__builtin_neon_vabd_v: mask = 0x717; break; - case ARM::BI__builtin_neon_vabdq_v: mask = 0x7170000; break; - case ARM::BI__builtin_neon_vabdl_v: mask = 0xE0E0000; break; - case ARM::BI__builtin_neon_vabs_v: mask = 0x17; break; - case ARM::BI__builtin_neon_vabsq_v: mask = 0x170000; break; - case ARM::BI__builtin_neon_vaddhn_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vaddl_v: mask = 0xE0E0000; break; - case ARM::BI__builtin_neon_vaddw_v: mask = 0xE0E0000; break; - case ARM::BI__builtin_neon_vcage_v: mask = 0x400; break; - case ARM::BI__builtin_neon_vcageq_v: mask = 0x4000000; break; - case ARM::BI__builtin_neon_vcagt_v: mask = 0x400; break; - case ARM::BI__builtin_neon_vcagtq_v: mask = 0x4000000; break; - case ARM::BI__builtin_neon_vcale_v: mask = 0x400; break; - case ARM::BI__builtin_neon_vcaleq_v: mask = 0x4000000; break; - case ARM::BI__builtin_neon_vcalt_v: mask = 0x400; break; - case ARM::BI__builtin_neon_vcaltq_v: mask = 0x4000000; break; - case ARM::BI__builtin_neon_vcls_v: mask = 0x7; break; - case ARM::BI__builtin_neon_vclsq_v: mask = 0x70000; break; - case ARM::BI__builtin_neon_vclz_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vclzq_v: mask = 0x7070000; break; - case ARM::BI__builtin_neon_vcnt_v: mask = 0x121; break; - case ARM::BI__builtin_neon_vcntq_v: mask = 0x1210000; break; - case ARM::BI__builtin_neon_vcvt_f16_v: mask = 0x80; break; - case ARM::BI__builtin_neon_vcvt_f32_v: mask = 0x404; break; - case ARM::BI__builtin_neon_vcvtq_f32_v: mask = 0x4040000; break; - case ARM::BI__builtin_neon_vcvt_f32_f16: mask = 0x100000; break; - case ARM::BI__builtin_neon_vcvt_n_f32_v: mask = 0x404; break; - case ARM::BI__builtin_neon_vcvtq_n_f32_v: mask = 0x4040000; break; - case ARM::BI__builtin_neon_vcvt_n_s32_v: mask = 0x4; break; - case ARM::BI__builtin_neon_vcvtq_n_s32_v: mask = 0x40000; break; - case ARM::BI__builtin_neon_vcvt_n_u32_v: mask = 0x400; break; - case ARM::BI__builtin_neon_vcvtq_n_u32_v: mask = 0x4000000; break; - case ARM::BI__builtin_neon_vcvt_s32_v: mask = 0x4; break; - case ARM::BI__builtin_neon_vcvtq_s32_v: mask = 0x40000; break; - case ARM::BI__builtin_neon_vcvt_u32_v: mask = 0x400; break; - case ARM::BI__builtin_neon_vcvtq_u32_v: mask = 0x4000000; break; - case ARM::BI__builtin_neon_vext_v: mask = 0xF6F; break; - case ARM::BI__builtin_neon_vextq_v: mask = 0xF6F0000; break; - case ARM::BI__builtin_neon_vhadd_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vhaddq_v: mask = 0x7070000; break; - case ARM::BI__builtin_neon_vhsub_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vhsubq_v: mask = 0x7070000; break; - case ARM::BI__builtin_neon_vld1_v: mask = 0xFFF; break; - case ARM::BI__builtin_neon_vld1q_v: mask = 0xFFF0000; break; - case ARM::BI__builtin_neon_vld1_dup_v: mask = 0xFFF; break; - case ARM::BI__builtin_neon_vld1q_dup_v: mask = 0xFFF0000; break; - case ARM::BI__builtin_neon_vld1_lane_v: mask = 0xFFF; break; - case ARM::BI__builtin_neon_vld1q_lane_v: mask = 0xFFF0000; break; - case ARM::BI__builtin_neon_vld2_v: mask = 0xFFF; break; - case ARM::BI__builtin_neon_vld2q_v: mask = 0x7F70000; break; - case ARM::BI__builtin_neon_vld2_dup_v: mask = 0xFFF; break; - case ARM::BI__builtin_neon_vld2_lane_v: mask = 0x7F7; break; - case ARM::BI__builtin_neon_vld2q_lane_v: mask = 0x6D60000; break; - case ARM::BI__builtin_neon_vld3_v: mask = 0xFFF; break; - case ARM::BI__builtin_neon_vld3q_v: mask = 0x7F70000; break; - case ARM::BI__builtin_neon_vld3_dup_v: mask = 0xFFF; break; - case ARM::BI__builtin_neon_vld3_lane_v: mask = 0x7F7; break; - case ARM::BI__builtin_neon_vld3q_lane_v: mask = 0x6D60000; break; - case ARM::BI__builtin_neon_vld4_v: mask = 0xFFF; break; - case ARM::BI__builtin_neon_vld4q_v: mask = 0x7F70000; break; - case ARM::BI__builtin_neon_vld4_dup_v: mask = 0xFFF; break; - case ARM::BI__builtin_neon_vld4_lane_v: mask = 0x7F7; break; - case ARM::BI__builtin_neon_vld4q_lane_v: mask = 0x6D60000; break; - case ARM::BI__builtin_neon_vmax_v: mask = 0x717; break; - case ARM::BI__builtin_neon_vmaxq_v: mask = 0x7170000; break; - case ARM::BI__builtin_neon_vmin_v: mask = 0x717; break; - case ARM::BI__builtin_neon_vminq_v: mask = 0x7170000; break; - case ARM::BI__builtin_neon_vmlal_v: mask = 0xE0E0000; break; - case ARM::BI__builtin_neon_vmlal_lane_v: mask = 0xC0C0000; break; - case ARM::BI__builtin_neon_vmla_lane_v: mask = 0x616; break; - case ARM::BI__builtin_neon_vmlaq_lane_v: mask = 0x6160000; break; - case ARM::BI__builtin_neon_vmlsl_v: mask = 0xE0E0000; break; - case ARM::BI__builtin_neon_vmlsl_lane_v: mask = 0xC0C0000; break; - case ARM::BI__builtin_neon_vmls_lane_v: mask = 0x616; break; - case ARM::BI__builtin_neon_vmlsq_lane_v: mask = 0x6160000; break; - case ARM::BI__builtin_neon_vmovl_v: mask = 0xE0E0000; break; - case ARM::BI__builtin_neon_vmovn_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vmull_v: mask = 0xE4E0000; break; - case ARM::BI__builtin_neon_vmull_lane_v: mask = 0xC0C0000; break; - case ARM::BI__builtin_neon_vpadal_v: mask = 0xE0E; break; - case ARM::BI__builtin_neon_vpadalq_v: mask = 0xE0E0000; break; - case ARM::BI__builtin_neon_vpadd_v: mask = 0x717; break; - case ARM::BI__builtin_neon_vpaddl_v: mask = 0xE0E; break; - case ARM::BI__builtin_neon_vpaddlq_v: mask = 0xE0E0000; break; - case ARM::BI__builtin_neon_vpmax_v: mask = 0x717; break; - case ARM::BI__builtin_neon_vpmin_v: mask = 0x717; break; - case ARM::BI__builtin_neon_vqabs_v: mask = 0x7; break; - case ARM::BI__builtin_neon_vqabsq_v: mask = 0x70000; break; - case ARM::BI__builtin_neon_vqadd_v: mask = 0xF0F; break; - case ARM::BI__builtin_neon_vqaddq_v: mask = 0xF0F0000; break; - case ARM::BI__builtin_neon_vqdmlal_v: mask = 0xC0000; break; - case ARM::BI__builtin_neon_vqdmlal_lane_v: mask = 0xC0000; break; - case ARM::BI__builtin_neon_vqdmlsl_v: mask = 0xC0000; break; - case ARM::BI__builtin_neon_vqdmlsl_lane_v: mask = 0xC0000; break; - case ARM::BI__builtin_neon_vqdmulh_v: mask = 0x6; break; - case ARM::BI__builtin_neon_vqdmulhq_v: mask = 0x60000; break; - case ARM::BI__builtin_neon_vqdmulh_lane_v: mask = 0x6; break; - case ARM::BI__builtin_neon_vqdmulhq_lane_v: mask = 0x60000; break; - case ARM::BI__builtin_neon_vqdmull_v: mask = 0xC0000; break; - case ARM::BI__builtin_neon_vqdmull_lane_v: mask = 0xC0000; break; - case ARM::BI__builtin_neon_vqmovn_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vqmovun_v: mask = 0x700; break; - case ARM::BI__builtin_neon_vqneg_v: mask = 0x7; break; - case ARM::BI__builtin_neon_vqnegq_v: mask = 0x70000; break; - case ARM::BI__builtin_neon_vqrdmulh_v: mask = 0x6; break; - case ARM::BI__builtin_neon_vqrdmulhq_v: mask = 0x60000; break; - case ARM::BI__builtin_neon_vqrdmulh_lane_v: mask = 0x6; break; - case ARM::BI__builtin_neon_vqrdmulhq_lane_v: mask = 0x60000; break; - case ARM::BI__builtin_neon_vqrshl_v: mask = 0xF0F; break; - case ARM::BI__builtin_neon_vqrshlq_v: mask = 0xF0F0000; break; - case ARM::BI__builtin_neon_vqrshrn_n_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vqrshrun_n_v: mask = 0x700; break; - case ARM::BI__builtin_neon_vqshl_v: mask = 0xF0F; break; - case ARM::BI__builtin_neon_vqshlq_v: mask = 0xF0F0000; break; - case ARM::BI__builtin_neon_vqshlu_n_v: mask = 0xF00; break; - case ARM::BI__builtin_neon_vqshluq_n_v: mask = 0xF000000; break; - case ARM::BI__builtin_neon_vqshl_n_v: mask = 0xF0F; break; - case ARM::BI__builtin_neon_vqshlq_n_v: mask = 0xF0F0000; break; - case ARM::BI__builtin_neon_vqshrn_n_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vqshrun_n_v: mask = 0x700; break; - case ARM::BI__builtin_neon_vqsub_v: mask = 0xF0F; break; - case ARM::BI__builtin_neon_vqsubq_v: mask = 0xF0F0000; break; - case ARM::BI__builtin_neon_vraddhn_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vrecpe_v: mask = 0x410; break; - case ARM::BI__builtin_neon_vrecpeq_v: mask = 0x4100000; break; - case ARM::BI__builtin_neon_vrecps_v: mask = 0x10; break; - case ARM::BI__builtin_neon_vrecpsq_v: mask = 0x100000; break; - case ARM::BI__builtin_neon_vrhadd_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vrhaddq_v: mask = 0x7070000; break; - case ARM::BI__builtin_neon_vrshl_v: mask = 0xF0F; break; - case ARM::BI__builtin_neon_vrshlq_v: mask = 0xF0F0000; break; - case ARM::BI__builtin_neon_vrshrn_n_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vrshr_n_v: mask = 0xF0F; break; - case ARM::BI__builtin_neon_vrshrq_n_v: mask = 0xF0F0000; break; - case ARM::BI__builtin_neon_vrsqrte_v: mask = 0x410; break; - case ARM::BI__builtin_neon_vrsqrteq_v: mask = 0x4100000; break; - case ARM::BI__builtin_neon_vrsqrts_v: mask = 0x10; break; - case ARM::BI__builtin_neon_vrsqrtsq_v: mask = 0x100000; break; - case ARM::BI__builtin_neon_vrsra_n_v: mask = 0xF0F; break; - case ARM::BI__builtin_neon_vrsraq_n_v: mask = 0xF0F0000; break; - case ARM::BI__builtin_neon_vrsubhn_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vshl_v: mask = 0xF0F; break; - case ARM::BI__builtin_neon_vshlq_v: mask = 0xF0F0000; break; - case ARM::BI__builtin_neon_vshll_n_v: mask = 0xE0E0000; break; - case ARM::BI__builtin_neon_vshl_n_v: mask = 0xF0F; break; - case ARM::BI__builtin_neon_vshlq_n_v: mask = 0xF0F0000; break; - case ARM::BI__builtin_neon_vshrn_n_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vshr_n_v: mask = 0xF0F; break; - case ARM::BI__builtin_neon_vshrq_n_v: mask = 0xF0F0000; break; - case ARM::BI__builtin_neon_vsli_n_v: mask = 0xF6F; break; - case ARM::BI__builtin_neon_vsliq_n_v: mask = 0xF6F0000; break; - case ARM::BI__builtin_neon_vsra_n_v: mask = 0xF0F; break; - case ARM::BI__builtin_neon_vsraq_n_v: mask = 0xF0F0000; break; - case ARM::BI__builtin_neon_vsri_n_v: mask = 0xF6F; break; - case ARM::BI__builtin_neon_vsriq_n_v: mask = 0xF6F0000; break; - case ARM::BI__builtin_neon_vst1_v: mask = 0x9F; break; - case ARM::BI__builtin_neon_vst1q_v: mask = 0x9F0000; break; - case ARM::BI__builtin_neon_vst1_lane_v: mask = 0x9F; break; - case ARM::BI__builtin_neon_vst1q_lane_v: mask = 0x9F0000; break; - case ARM::BI__builtin_neon_vst2_v: mask = 0x9F; break; - case ARM::BI__builtin_neon_vst2q_v: mask = 0x970000; break; - case ARM::BI__builtin_neon_vst2_lane_v: mask = 0x97; break; - case ARM::BI__builtin_neon_vst2q_lane_v: mask = 0x960000; break; - case ARM::BI__builtin_neon_vst3_v: mask = 0x9F; break; - case ARM::BI__builtin_neon_vst3q_v: mask = 0x970000; break; - case ARM::BI__builtin_neon_vst3_lane_v: mask = 0x97; break; - case ARM::BI__builtin_neon_vst3q_lane_v: mask = 0x960000; break; - case ARM::BI__builtin_neon_vst4_v: mask = 0x9F; break; - case ARM::BI__builtin_neon_vst4q_v: mask = 0x970000; break; - case ARM::BI__builtin_neon_vst4_lane_v: mask = 0x97; break; - case ARM::BI__builtin_neon_vst4q_lane_v: mask = 0x960000; break; - case ARM::BI__builtin_neon_vsubhn_v: mask = 0x707; break; - case ARM::BI__builtin_neon_vsubl_v: mask = 0xE0E0000; break; - case ARM::BI__builtin_neon_vsubw_v: mask = 0xE0E0000; break; - case ARM::BI__builtin_neon_vtbl1_v: mask = 0x121; break; - case ARM::BI__builtin_neon_vtbl2_v: mask = 0x121; break; - case ARM::BI__builtin_neon_vtbl3_v: mask = 0x121; break; - case ARM::BI__builtin_neon_vtbl4_v: mask = 0x121; break; - case ARM::BI__builtin_neon_vtbx1_v: mask = 0x121; break; - case ARM::BI__builtin_neon_vtbx2_v: mask = 0x121; break; - case ARM::BI__builtin_neon_vtbx3_v: mask = 0x121; break; - case ARM::BI__builtin_neon_vtbx4_v: mask = 0x121; break; - case ARM::BI__builtin_neon_vtrn_v: mask = 0x777; break; - case ARM::BI__builtin_neon_vtrnq_v: mask = 0x7770000; break; - case ARM::BI__builtin_neon_vtst_v: mask = 0x700; break; - case ARM::BI__builtin_neon_vtstq_v: mask = 0x7000000; break; - case ARM::BI__builtin_neon_vuzp_v: mask = 0x777; break; - case ARM::BI__builtin_neon_vuzpq_v: mask = 0x7770000; break; - case ARM::BI__builtin_neon_vzip_v: mask = 0x373; break; - case ARM::BI__builtin_neon_vzipq_v: mask = 0x7770000; break; +#define GET_NEON_OVERLOAD_CHECK +#include "clang/Basic/arm_neon.inc" +#undef GET_NEON_OVERLOAD_CHECK } // For NEON intrinsics which are overloaded on vector element type, validate @@ -490,89 +300,9 @@ unsigned i = 0, l = 0, u = 0; switch (BuiltinID) { default: return false; - case ARM::BI__builtin_neon_vcvt_n_f32_v: i = 1; u = RFT(TV); break; - case ARM::BI__builtin_neon_vcvtq_n_f32_v: i = 1; u = RFT(TV); break; - case ARM::BI__builtin_neon_vcvt_n_s32_v: i = 1; u = RFT(TV); break; - case ARM::BI__builtin_neon_vcvtq_n_s32_v: i = 1; u = RFT(TV); break; - case ARM::BI__builtin_neon_vcvt_n_u32_v: i = 1; u = RFT(TV); break; - case ARM::BI__builtin_neon_vcvtq_n_u32_v: i = 1; u = RFT(TV); break; - case ARM::BI__builtin_neon_vext_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vextq_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vget_lane_i8: i = 1; u = 7; break; - case ARM::BI__builtin_neon_vget_lane_i16: i = 1; u = 3; break; - case ARM::BI__builtin_neon_vget_lane_i32: i = 1; u = 1; break; - case ARM::BI__builtin_neon_vget_lane_f32: i = 1; u = 1; break; - case ARM::BI__builtin_neon_vgetq_lane_i8: i = 1; u = 15; break; - case ARM::BI__builtin_neon_vgetq_lane_i16: i = 1; u = 7; break; - case ARM::BI__builtin_neon_vgetq_lane_i32: i = 1; u = 3; break; - case ARM::BI__builtin_neon_vgetq_lane_f32: i = 1; u = 3; break; - case ARM::BI__builtin_neon_vget_lane_i64: i = 1; u = 0; break; - case ARM::BI__builtin_neon_vgetq_lane_i64: i = 1; u = 1; break; - case ARM::BI__builtin_neon_vld1q_lane_v: i = 1; u = RFT(TV); break; - case ARM::BI__builtin_neon_vld1_lane_v: i = 1; u = RFT(TV); break; - case ARM::BI__builtin_neon_vld2q_lane_v: i = 1; u = RFT(TV); break; - case ARM::BI__builtin_neon_vld2_lane_v: i = 1; u = RFT(TV); break; - case ARM::BI__builtin_neon_vld3q_lane_v: i = 1; u = RFT(TV); break; - case ARM::BI__builtin_neon_vld3_lane_v: i = 1; u = RFT(TV); break; - case ARM::BI__builtin_neon_vld4q_lane_v: i = 1; u = RFT(TV); break; - case ARM::BI__builtin_neon_vld4_lane_v: i = 1; u = RFT(TV); break; - case ARM::BI__builtin_neon_vmlal_lane_v: i = 3; u = RFT(TV); break; - case ARM::BI__builtin_neon_vmla_lane_v: i = 3; u = RFT(TV); break; - case ARM::BI__builtin_neon_vmlaq_lane_v: i = 3; u = RFT(TV); break; - case ARM::BI__builtin_neon_vmlsl_lane_v: i = 3; u = RFT(TV); break; - case ARM::BI__builtin_neon_vmls_lane_v: i = 3; u = RFT(TV); break; - case ARM::BI__builtin_neon_vmlsq_lane_v: i = 3; u = RFT(TV); break; - case ARM::BI__builtin_neon_vmull_lane_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vqdmlal_lane_v: i = 3; u = RFT(TV); break; - case ARM::BI__builtin_neon_vqdmlsl_lane_v: i = 3; u = RFT(TV); break; - case ARM::BI__builtin_neon_vqdmulh_lane_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vqdmulhq_lane_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vqdmull_lane_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vqrdmulh_lane_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vqrdmulhq_lane_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vqrshrn_n_v: i = 1; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vqrshrun_n_v: i = 1; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vqshlu_n_v: i = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vqshluq_n_v: i = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vqshl_n_v: i = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vqshlq_n_v: i = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vqshrn_n_v: i = 1; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vqshrun_n_v: i = 1; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vrshrn_n_v: i = 1; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vrshr_n_v: i = 1; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vrshrq_n_v: i = 1; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vrsra_n_v: i = 2; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vrsraq_n_v: i = 2; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vset_lane_i8: i = 2; u = 7; break; - case ARM::BI__builtin_neon_vset_lane_i16: i = 2; u = 3; break; - case ARM::BI__builtin_neon_vset_lane_i32: i = 2; u = 1; break; - case ARM::BI__builtin_neon_vset_lane_f32: i = 2; u = 1; break; - case ARM::BI__builtin_neon_vsetq_lane_i8: i = 2; u = 15; break; - case ARM::BI__builtin_neon_vsetq_lane_i16: i = 2; u = 7; break; - case ARM::BI__builtin_neon_vsetq_lane_i32: i = 2; u = 3; break; - case ARM::BI__builtin_neon_vsetq_lane_f32: i = 2; u = 3; break; - case ARM::BI__builtin_neon_vset_lane_i64: i = 2; u = 0; break; - case ARM::BI__builtin_neon_vsetq_lane_i64: i = 2; u = 1; break; - case ARM::BI__builtin_neon_vshll_n_v: i = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vshl_n_v: i = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vshlq_n_v: i = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vshrn_n_v: i = 1; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vshr_n_v: i = 1; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vshrq_n_v: i = 1; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vsli_n_v: i = 2; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vsliq_n_v: i = 2; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vsra_n_v: i = 2; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vsraq_n_v: i = 2; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vsri_n_v: i = 2; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vsriq_n_v: i = 2; l = 1; u = RFT(TV, true); break; - case ARM::BI__builtin_neon_vst1q_lane_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vst1_lane_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vst2q_lane_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vst2_lane_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vst3q_lane_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vst3_lane_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vst4q_lane_v: i = 2; u = RFT(TV); break; - case ARM::BI__builtin_neon_vst4_lane_v: i = 2; u = RFT(TV); break; +#define GET_NEON_IMMEDIATE_CHECK +#include "clang/Basic/arm_neon.inc" +#undef GET_NEON_IMMEDIATE_CHECK }; // Check that the immediate argument is actually a constant. _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits