mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-23 16:19:52 +00:00
AVX-512: Added intrinsics for VPERMT2W/D/Q/PS/PD and
VPERMI2W/D/Q/PS/PD instructions. Added tests. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240256 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1132,26 +1132,271 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
|
||||
Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
|
||||
llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt_d_512:
|
||||
def int_x86_avx512_mask_vpermi2var_d_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2vard128_mask">,
|
||||
Intrinsic<[llvm_v4i32_ty],
|
||||
[llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermi2var_d_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2vard256_mask">,
|
||||
Intrinsic<[llvm_v8i32_ty],
|
||||
[llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermi2var_d_512 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2vard512_mask">,
|
||||
Intrinsic<[llvm_v16i32_ty],
|
||||
[llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermi2var_hi_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2varhi128_mask">,
|
||||
Intrinsic<[llvm_v8i16_ty],
|
||||
[llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermi2var_hi_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2varhi256_mask">,
|
||||
Intrinsic<[llvm_v16i16_ty],
|
||||
[llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermi2var_hi_512 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2varhi512_mask">,
|
||||
Intrinsic<[llvm_v32i16_ty],
|
||||
[llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermi2var_pd_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2varpd128_mask">,
|
||||
Intrinsic<[llvm_v2f64_ty],
|
||||
[llvm_v2f64_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermi2var_pd_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2varpd256_mask">,
|
||||
Intrinsic<[llvm_v4f64_ty],
|
||||
[llvm_v4f64_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermi2var_pd_512 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2varpd512_mask">,
|
||||
Intrinsic<[llvm_v8f64_ty],
|
||||
[llvm_v8f64_ty, llvm_v8i64_ty, llvm_v8f64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermi2var_ps_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2varps128_mask">,
|
||||
Intrinsic<[llvm_v4f32_ty],
|
||||
[llvm_v4f32_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermi2var_ps_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2varps256_mask">,
|
||||
Intrinsic<[llvm_v8f32_ty],
|
||||
[llvm_v8f32_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermi2var_ps_512 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2varps512_mask">,
|
||||
Intrinsic<[llvm_v16f32_ty],
|
||||
[llvm_v16f32_ty, llvm_v16i32_ty, llvm_v16f32_ty, llvm_i16_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermi2var_q_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2varq128_mask">,
|
||||
Intrinsic<[llvm_v2i64_ty],
|
||||
[llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermi2var_q_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2varq256_mask">,
|
||||
Intrinsic<[llvm_v4i64_ty],
|
||||
[llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermi2var_q_512 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermi2varq512_mask">,
|
||||
Intrinsic<[llvm_v8i64_ty],
|
||||
[llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt2var_d_512:
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2vard512_mask">,
|
||||
Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
|
||||
llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt_q_512:
|
||||
def int_x86_avx512_mask_vpermt2var_q_512:
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varq512_mask">,
|
||||
Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
|
||||
llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt_ps_512:
|
||||
def int_x86_avx512_mask_vpermt2var_ps_512:
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varps512_mask">,
|
||||
Intrinsic<[llvm_v16f32_ty], [llvm_v16i32_ty,
|
||||
llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt_pd_512:
|
||||
def int_x86_avx512_mask_vpermt2var_pd_512:
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varpd512_mask">,
|
||||
Intrinsic<[llvm_v8f64_ty], [llvm_v8i64_ty,
|
||||
llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt2var_d_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2vard128_mask">,
|
||||
Intrinsic<[llvm_v4i32_ty],
|
||||
[llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_d_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2vard128_maskz">,
|
||||
Intrinsic<[llvm_v4i32_ty],
|
||||
[llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt2var_d_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2vard256_mask">,
|
||||
Intrinsic<[llvm_v8i32_ty],
|
||||
[llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_d_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2vard256_maskz">,
|
||||
Intrinsic<[llvm_v8i32_ty],
|
||||
[llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_d_512 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2vard512_maskz">,
|
||||
Intrinsic<[llvm_v16i32_ty],
|
||||
[llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt2var_hi_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varhi128_mask">,
|
||||
Intrinsic<[llvm_v8i16_ty],
|
||||
[llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_hi_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varhi128_maskz">,
|
||||
Intrinsic<[llvm_v8i16_ty],
|
||||
[llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt2var_hi_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varhi256_mask">,
|
||||
Intrinsic<[llvm_v16i16_ty],
|
||||
[llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_hi_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varhi256_maskz">,
|
||||
Intrinsic<[llvm_v16i16_ty],
|
||||
[llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt2var_hi_512 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varhi512_mask">,
|
||||
Intrinsic<[llvm_v32i16_ty],
|
||||
[llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_hi_512 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varhi512_maskz">,
|
||||
Intrinsic<[llvm_v32i16_ty],
|
||||
[llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt2var_pd_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varpd128_mask">,
|
||||
Intrinsic<[llvm_v2f64_ty],
|
||||
[llvm_v2i64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_pd_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varpd128_maskz">,
|
||||
Intrinsic<[llvm_v2f64_ty],
|
||||
[llvm_v2i64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt2var_pd_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varpd256_mask">,
|
||||
Intrinsic<[llvm_v4f64_ty],
|
||||
[llvm_v4i64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_pd_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varpd256_maskz">,
|
||||
Intrinsic<[llvm_v4f64_ty],
|
||||
[llvm_v4i64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_pd_512 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varpd512_maskz">,
|
||||
Intrinsic<[llvm_v8f64_ty],
|
||||
[llvm_v8i64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt2var_ps_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varps128_mask">,
|
||||
Intrinsic<[llvm_v4f32_ty],
|
||||
[llvm_v4i32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_ps_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varps128_maskz">,
|
||||
Intrinsic<[llvm_v4f32_ty],
|
||||
[llvm_v4i32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt2var_ps_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varps256_mask">,
|
||||
Intrinsic<[llvm_v8f32_ty],
|
||||
[llvm_v8i32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_ps_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varps256_maskz">,
|
||||
Intrinsic<[llvm_v8f32_ty],
|
||||
[llvm_v8i32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_ps_512 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varps512_maskz">,
|
||||
Intrinsic<[llvm_v16f32_ty],
|
||||
[llvm_v16i32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt2var_q_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varq128_mask">,
|
||||
Intrinsic<[llvm_v2i64_ty],
|
||||
[llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_q_128 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varq128_maskz">,
|
||||
Intrinsic<[llvm_v2i64_ty],
|
||||
[llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_mask_vpermt2var_q_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varq256_mask">,
|
||||
Intrinsic<[llvm_v4i64_ty],
|
||||
[llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_q_256 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varq256_maskz">,
|
||||
Intrinsic<[llvm_v4i64_ty],
|
||||
[llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_avx512_maskz_vpermt2var_q_512 :
|
||||
GCCBuiltin<"__builtin_ia32_vpermt2varq512_maskz">,
|
||||
Intrinsic<[llvm_v8i64_ty],
|
||||
[llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
|
||||
[IntrNoMem]>;
|
||||
}
|
||||
|
||||
// Vector blend
|
||||
|
||||
Reference in New Issue
Block a user