Skip to content

Commit 62f44d7

Browse files
committed
Add more SIMD intrinsics
1 parent cb0b519 commit 62f44d7

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

src/intrinsic/llvm.rs

+45
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,27 @@ pub fn adjust_intrinsic_arguments<'a, 'b, 'gcc, 'tcx>(
418418
new_args.push(old_args.swap_remove(0));
419419
args = new_args.into();
420420
}
421+
"__builtin_ia32_addph512_mask_round"
422+
| "__builtin_ia32_subph512_mask_round"
423+
| "__builtin_ia32_mulph512_mask_round"
424+
| "__builtin_ia32_divph512_mask_round" => {
425+
let mut new_args = args.to_vec();
426+
let last_arg = new_args.pop().expect("last arg");
427+
428+
let arg3_type = gcc_func.get_param_type(2);
429+
let vector_type = arg3_type.dyncast_vector().expect("vector type");
430+
let zero = builder.context.new_rvalue_zero(vector_type.get_element_type());
431+
let num_units = vector_type.get_num_units();
432+
let first_arg =
433+
builder.context.new_rvalue_from_vector(None, arg3_type, &vec![zero; num_units]);
434+
new_args.push(first_arg);
435+
436+
let arg4_type = gcc_func.get_param_type(3);
437+
let minus_one = builder.context.new_rvalue_from_int(arg4_type, -1);
438+
new_args.push(minus_one);
439+
new_args.push(last_arg);
440+
args = new_args.into();
441+
}
421442
_ => (),
422443
}
423444
} else {
@@ -1094,6 +1115,23 @@ pub fn intrinsic<'gcc, 'tcx>(name: &str, cx: &CodegenCx<'gcc, 'tcx>) -> Function
10941115
"llvm.x86.avx512.mask.load.q.256" => "__builtin_ia32_movdqa64load256_mask",
10951116
"llvm.x86.avx512fp16.mask.cmp.sh" => "__builtin_ia32_cmpsh_mask_round",
10961117
"llvm.x86.avx512fp16.vcomi.sh" => "__builtin_ia32_cmpsh_mask_round",
1118+
"llvm.x86.avx512fp16.add.ph.512" => "__builtin_ia32_addph512_mask_round",
1119+
"llvm.x86.avx512fp16.sub.ph.512" => "__builtin_ia32_subph512_mask_round",
1120+
"llvm.x86.avx512fp16.mul.ph.512" => "__builtin_ia32_mulph512_mask_round",
1121+
"llvm.x86.avx512fp16.div.ph.512" => "__builtin_ia32_divph512_mask_round",
1122+
"llvm.x86.avx512fp16.mask.vfmul.cph.512" => "__builtin_ia32_vfmulcph512_mask_round",
1123+
"llvm.x86.avx512fp16.mask.vfmul.csh" => "__builtin_ia32_vfmulcsh_mask_round",
1124+
"llvm.x86.avx512fp16.mask.vfcmul.cph.512" => "__builtin_ia32_vfcmulcph512_mask_round",
1125+
"llvm.x86.avx512fp16.mask.vfcmul.csh" => "__builtin_ia32_vfcmulcsh_mask_round",
1126+
"llvm.x86.avx512fp16.mask.vfmadd.cph.512" => "__builtin_ia32_vfmaddcph512_mask3_round",
1127+
"llvm.x86.avx512fp16.maskz.vfmadd.cph.512" => "__builtin_ia32_vfmaddcph512_maskz_round",
1128+
"llvm.x86.avx512fp16.mask.vfmadd.csh" => "__builtin_ia32_vfmaddcsh_mask3_round",
1129+
"llvm.x86.avx512fp16.maskz.vfmadd.csh" => "__builtin_ia32_vfmaddcsh_maskz_round",
1130+
"llvm.x86.avx512fp16.mask.vfcmadd.cph.512" => "__builtin_ia32_vfcmaddcph512_mask3_round",
1131+
"llvm.x86.avx512fp16.maskz.vfcmadd.cph.512" => "__builtin_ia32_vfcmaddcph512_maskz_round",
1132+
"llvm.x86.avx512fp16.mask.vfcmadd.csh" => "__builtin_ia32_vfcmaddcsh_mask_round",
1133+
"llvm.x86.avx512fp16.maskz.vfcmadd.csh" => "__builtin_ia32_vfcmaddcsh_maskz_round",
1134+
10971135
// TODO: support the tile builtins:
10981136
"llvm.x86.ldtilecfg" => "__builtin_trap",
10991137
"llvm.x86.sttilecfg" => "__builtin_trap",
@@ -1103,6 +1141,13 @@ pub fn intrinsic<'gcc, 'tcx>(name: &str, cx: &CodegenCx<'gcc, 'tcx>) -> Function
11031141
"llvm.x86.tileloaddt164" => "__builtin_trap",
11041142
"llvm.x86.tilezero" => "__builtin_trap",
11051143
"llvm.x86.tdpbf16ps" => "__builtin_trap",
1144+
"llvm.x86.tdpbssd" => "__builtin_trap",
1145+
"llvm.x86.tdpbsud" => "__builtin_trap",
1146+
"llvm.x86.tdpbusd" => "__builtin_trap",
1147+
"llvm.x86.tdpbuud" => "__builtin_trap",
1148+
"llvm.x86.tdpfp16ps" => "__builtin_trap",
1149+
"llvm.x86.tcmmimfp16ps" => "__builtin_trap",
1150+
"llvm.x86.tcmmrlfp16ps" => "__builtin_trap",
11061151

11071152
// NOTE: this file is generated by https://github.com/GuillaumeGomez/llvmint/blob/master/generate_list.py
11081153
_ => include!("archs.rs"),

0 commit comments

Comments
 (0)