Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions src/intrinsic/archs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,7 @@ fn map_arch_intrinsic(full_name: &str) -> &'static str {
"s.barrier.signal.isfirst" => "__builtin_amdgcn_s_barrier_signal_isfirst",
"s.barrier.signal.var" => "__builtin_amdgcn_s_barrier_signal_var",
"s.barrier.wait" => "__builtin_amdgcn_s_barrier_wait",
"s.bitreplicate" => "__builtin_amdgcn_s_bitreplicate",
"s.buffer.prefetch.data" => "__builtin_amdgcn_s_buffer_prefetch_data",
"s.cluster.barrier" => "__builtin_amdgcn_s_cluster_barrier",
"s.dcache.inv" => "__builtin_amdgcn_s_dcache_inv",
Expand Down Expand Up @@ -8712,10 +8713,6 @@ fn map_arch_intrinsic(full_name: &str) -> &'static str {
"bmi.bextr.64" => "__builtin_ia32_bextr_u64",
"bmi.bzhi.32" => "__builtin_ia32_bzhi_si",
"bmi.bzhi.64" => "__builtin_ia32_bzhi_di",
"bmi.pdep.32" => "__builtin_ia32_pdep_si",
"bmi.pdep.64" => "__builtin_ia32_pdep_di",
"bmi.pext.32" => "__builtin_ia32_pext_si",
"bmi.pext.64" => "__builtin_ia32_pext_di",
"cldemote" => "__builtin_ia32_cldemote",
"clflushopt" => "__builtin_ia32_clflushopt",
"clrssbsy" => "__builtin_ia32_clrssbsy",
Expand Down
4 changes: 4 additions & 0 deletions src/intrinsic/old_archs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1240,6 +1240,10 @@ pub(crate) fn old_archs(arch: &str, name: &str) -> ArchCheckResult {
"avx512.vbroadcast.sd.pd.512" => "__builtin_ia32_vbroadcastsd_pd512",
"avx512.vbroadcast.ss.512" => "__builtin_ia32_vbroadcastss512",
"avx512.vbroadcast.ss.ps.512" => "__builtin_ia32_vbroadcastss_ps512",
"bmi.pdep.32" => "__builtin_ia32_pdep_si",
"bmi.pdep.64" => "__builtin_ia32_pdep_di",
"bmi.pext.32" => "__builtin_ia32_pext_si",
"bmi.pext.64" => "__builtin_ia32_pext_di",
"fma.mask.vfmadd.pd.512" => "__builtin_ia32_vfmaddpd512_mask",
"fma.mask.vfmadd.ps.512" => "__builtin_ia32_vfmaddps512_mask",
"fma.mask.vfmaddsub.pd.512" => "__builtin_ia32_vfmaddsubpd512_mask",
Expand Down
36 changes: 21 additions & 15 deletions tools/generate_intrinsics.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@ def update_intrinsics(llvm_path):
# This speeds up the comparison, and makes our code considerably smaller.
# Since all intrinsic names start with "llvm.", we skip that prefix.
print("Updating content of `{}`...".format(output_file))
indent4 = " "
indent8 = indent4 + indent4
indent12 = indent8 + indent4
indent16 = indent12 + indent4
with open(output_file, "w", encoding="utf8") as out:
out.write("""// File generated by `rustc_codegen_gcc/tools/generate_intrinsics.py`
// DO NOT EDIT IT!
Expand All @@ -95,33 +99,35 @@ def update_intrinsics(llvm_path):
if let ArchCheckResult::Ok(res) = old_arch_res {
return res;
}
match arch {""")
match arch {
""")
for arch in archs:
if len(intrinsics[arch]) == 0:
continue
attribute = "#[expect(non_snake_case)]" if arch[0].isupper() else ""
out.write("\"{}\" => {{ {} fn {}(name: &str,full_name:&str) -> &'static str {{ match name {{".format(arch, attribute, arch))
out.write(f"""{indent4}"{arch}" => {{
{indent8}{attribute} fn {arch}(name: &str,full_name:&str) -> &'static str {{
{indent12}match name {{""")
intrinsics[arch].sort(key=lambda x: (x[0], x[1]))
out.write(' // {}\n'.format(arch))
out.write(f'{indent16}// {arch}\n')
for entry in intrinsics[arch]:
llvm_name = entry[0].removeprefix("llvm.");
llvm_name = llvm_name.removeprefix(arch);
llvm_name = llvm_name.removeprefix(".");
if "_round_mask" in entry[1]:
out.write(' // [INVALID CONVERSION]: "{}" => "{}",\n'.format(llvm_name, entry[1]))
out.write(f'{indent16}// [INVALID CONVERSION]: "{llvm_name}" => "{entry[1]}",\n')
else:
out.write(' "{}" => "{}",\n'.format(llvm_name, entry[1]))
out.write(' _ => unimplemented!("***** unsupported LLVM intrinsic {full_name}"),\n')
out.write("}} }} {}(name,full_name) }}\n,".format(arch))
out.write(""" _ => {
match old_arch_res {
ArchCheckResult::UnknownIntrinsic => unimplemented!("***** unsupported LLVM intrinsic {full_name}"),
ArchCheckResult::UnknownArch => unimplemented!("***** unsupported LLVM architecture {arch}, intrinsic: {full_name}"),
ArchCheckResult::Ok(_) => unreachable!(),
}
}""")
out.write(f'{indent16}"{llvm_name}" => "{entry[1]}",\n')
out.write(f'{indent16}_ => unimplemented!("***** unsupported LLVM intrinsic {{full_name}}"),\n')
out.write(f"{indent16}}}\n{indent12}}}\n{indent8}{arch}(name,full_name)\n{indent8}}}\n,")
out.write(f"""{indent4}_ => {{
{indent8}match old_arch_res {{
{indent8}ArchCheckResult::UnknownIntrinsic => unimplemented!("***** unsupported LLVM intrinsic {{full_name}}"),
{indent8}ArchCheckResult::UnknownArch => unimplemented!("***** unsupported LLVM architecture {{arch}}, intrinsic: {{full_name}}"),
{indent8}ArchCheckResult::Ok(_) => unreachable!(),
{indent4}}}
}}""")
out.write("}\n}")
subprocess.call(["rustfmt", output_file])
print("Done!")


Expand Down
Loading