https://gcc.gnu.org/g:11390b98e8637688fa9e15e4b2be15b0b5cdf9d7
commit r17-1903-g11390b98e8637688fa9e15e4b2be15b0b5cdf9d7 Author: Enes Cevik <[email protected]> Date: Wed Jun 17 11:44:14 2026 +0300 gccrs: intrinsic: Use Values::Intrinsics instead of raw strings in builtin map This patch adds builtin intrinsic names to Values::Intrinsics class and updates the BuiltinContext mappings to use these constants instead of hardcoded raw strings. gcc/rust/ChangeLog: * backend/rust-builtins.cc (BuiltinsContext::register_rust_mappings): Use Values::Intrinsics constants instead of raw strings. * util/rust-intrinsic-values.h (class Intrinsics): Add missing builtin intrinsics. Signed-off-by: Enes Cevik <[email protected]> Diff: --- gcc/rust/backend/rust-builtins.cc | 89 ++++++++++++++++++----------------- gcc/rust/util/rust-intrinsic-values.h | 60 +++++++++++++++++++++++ 2 files changed, 105 insertions(+), 44 deletions(-) diff --git a/gcc/rust/backend/rust-builtins.cc b/gcc/rust/backend/rust-builtins.cc index 282ecba70cbf..881561fdde37 100644 --- a/gcc/rust/backend/rust-builtins.cc +++ b/gcc/rust/backend/rust-builtins.cc @@ -20,6 +20,7 @@ #include "target.h" #include "stringpool.h" +#include "rust-intrinsic-values.h" namespace Rust { namespace Compile { @@ -285,72 +286,72 @@ void BuiltinsContext::register_rust_mappings () { rust_intrinsic_to_gcc_builtin = { - {"unreachable", "__builtin_unreachable"}, - {"abort", "__builtin_abort"}, + {Values::Intrinsics::UNREACHABLE, "__builtin_unreachable"}, + {Values::Intrinsics::ABORT, "__builtin_abort"}, // Math intrinsics - {"sqrtf32", "__builtin_sqrtf"}, - {"sqrtf64", "__builtin_sqrt"}, + {Values::Intrinsics::SQRTF32, "__builtin_sqrtf"}, + {Values::Intrinsics::SQRTF64, "__builtin_sqrt"}, - {"sinf32", "__builtin_sinf"}, - {"sinf64", "__builtin_sin"}, + {Values::Intrinsics::SINF32, "__builtin_sinf"}, + {Values::Intrinsics::SINF64, "__builtin_sin"}, - {"cosf32", "__builtin_cosf"}, - {"cosf64", "__builtin_cos"}, + {Values::Intrinsics::COSF32, "__builtin_cosf"}, + {Values::Intrinsics::COSF64, "__builtin_cos"}, - {"powf32", "__builtin_powf"}, - {"powf64", "__builtin_pow"}, + {Values::Intrinsics::POWF32, "__builtin_powf"}, + {Values::Intrinsics::POWF64, "__builtin_pow"}, - {"powif32", "__builtin_powif"}, - {"powif64", "__builtin_powi"}, + {Values::Intrinsics::POWIF32, "__builtin_powif"}, + {Values::Intrinsics::POWIF64, "__builtin_powi"}, - {"expf32", "__builtin_expf"}, - {"expf64", "__builtin_exp"}, + {Values::Intrinsics::EXPF32, "__builtin_expf"}, + {Values::Intrinsics::EXPF64, "__builtin_exp"}, - {"exp2f32", "__builtin_exp2f"}, - {"exp2f64", "__builtin_exp2"}, + {Values::Intrinsics::EXP2F32, "__builtin_exp2f"}, + {Values::Intrinsics::EXP2F64, "__builtin_exp2"}, - {"logf32", "__builtin_logf"}, - {"logf64", "__builtin_log"}, + {Values::Intrinsics::LOGF32, "__builtin_logf"}, + {Values::Intrinsics::LOGF64, "__builtin_log"}, - {"log10f32", "__builtin_log10f"}, - {"log10f64", "__builtin_log10"}, + {Values::Intrinsics::LOG10F32, "__builtin_log10f"}, + {Values::Intrinsics::LOG10F64, "__builtin_log10"}, - {"log2f32", "__builtin_log2f"}, - {"log2f64", "__builtin_log2"}, + {Values::Intrinsics::LOG2F32, "__builtin_log2f"}, + {Values::Intrinsics::LOG2F64, "__builtin_log2"}, - {"fmaf32", "__builtin_fmaf"}, - {"fmaf64", "__builtin_fma"}, + {Values::Intrinsics::FMAF32, "__builtin_fmaf"}, + {Values::Intrinsics::FMAF64, "__builtin_fma"}, - {"fabsf32", "__builtin_fabsf"}, - {"fabsf64", "__builtin_fabs"}, + {Values::Intrinsics::FABSF32, "__builtin_fabsf"}, + {Values::Intrinsics::FABSF64, "__builtin_fabs"}, - {"minnumf32", "__builtin_fminf"}, - {"minnumf64", "__builtin_fmin"}, + {Values::Intrinsics::MINNUMF32, "__builtin_fminf"}, + {Values::Intrinsics::MINNUMF64, "__builtin_fmin"}, - {"maxnumf32", "__builtin_fmaxf"}, - {"maxnumf64", "__builtin_fmax"}, + {Values::Intrinsics::MAXNUMF32, "__builtin_fmaxf"}, + {Values::Intrinsics::MAXNUMF64, "__builtin_fmax"}, - {"copysignf32", "__builtin_copysignf"}, - {"copysignf64", "__builtin_copysign"}, + {Values::Intrinsics::COPYSIGNF32, "__builtin_copysignf"}, + {Values::Intrinsics::COPYSIGNF64, "__builtin_copysign"}, - {"floorf32", "__builtin_floorf"}, - {"floorf64", "__builtin_floor"}, + {Values::Intrinsics::FLOORF32, "__builtin_floorf"}, + {Values::Intrinsics::FLOORF64, "__builtin_floor"}, - {"ceilf32", "__builtin_ceilf"}, - {"ceilf64", "__builtin_ceil"}, + {Values::Intrinsics::CEILF32, "__builtin_ceilf"}, + {Values::Intrinsics::CEILF64, "__builtin_ceil"}, - {"truncf32", "__builtin_truncf"}, - {"truncf64", "__builtin_trunc"}, + {Values::Intrinsics::TRUNCF32, "__builtin_truncf"}, + {Values::Intrinsics::TRUNCF64, "__builtin_trunc"}, - {"rintf32", "__builtin_rintf"}, - {"rintf64", "__builtin_rint"}, + {Values::Intrinsics::RINTF32, "__builtin_rintf"}, + {Values::Intrinsics::RINTF64, "__builtin_rint"}, - {"nearbyintf32", "__builtin_nearbyintf"}, - {"nearbyintf64", "__builtin_nearbyint"}, + {Values::Intrinsics::NEARBYINTF32, "__builtin_nearbyintf"}, + {Values::Intrinsics::NEARBYINTF64, "__builtin_nearbyint"}, - {"roundf32", "__builtin_roundf"}, - {"roundf64", "__builtin_round"}, + {Values::Intrinsics::ROUNDF32, "__builtin_roundf"}, + {Values::Intrinsics::ROUNDF64, "__builtin_round"}, }; } diff --git a/gcc/rust/util/rust-intrinsic-values.h b/gcc/rust/util/rust-intrinsic-values.h index c868c851d237..1c275e7b74e6 100644 --- a/gcc/rust/util/rust-intrinsic-values.h +++ b/gcc/rust/util/rust-intrinsic-values.h @@ -21,6 +21,66 @@ namespace Values { class Intrinsics { public: + static constexpr auto &UNREACHABLE = "unreachable"; + + // Math intrinsics + static constexpr auto &SQRTF32 = "sqrtf32"; + static constexpr auto &SQRTF64 = "sqrtf64"; + + static constexpr auto &SINF32 = "sinf32"; + static constexpr auto &SINF64 = "sinf64"; + + static constexpr auto &COSF32 = "cosf32"; + static constexpr auto &COSF64 = "cosf64"; + + static constexpr auto &POWF32 = "powf32"; + static constexpr auto &POWF64 = "powf64"; + + static constexpr auto &POWIF32 = "powif32"; + static constexpr auto &POWIF64 = "powif64"; + + static constexpr auto &EXPF32 = "expf32"; + static constexpr auto &EXPF64 = "expf64"; + + static constexpr auto &EXP2F32 = "exp2f32"; + static constexpr auto &EXP2F64 = "exp2f64"; + + static constexpr auto &LOGF32 = "logf32"; + static constexpr auto &LOGF64 = "logf64"; + + static constexpr auto &LOG10F32 = "log10f32"; + static constexpr auto &LOG10F64 = "log10f64"; + + static constexpr auto &LOG2F32 = "log2f32"; + static constexpr auto &LOG2F64 = "log2f64"; + + static constexpr auto &FMAF32 = "fmaf32"; + static constexpr auto &FMAF64 = "fmaf64"; + + static constexpr auto &FABSF32 = "fabsf32"; + static constexpr auto &FABSF64 = "fabsf64"; + + static constexpr auto ©SIGNF32 = "copysignf32"; + static constexpr auto ©SIGNF64 = "copysignf64"; + + static constexpr auto &FLOORF32 = "floorf32"; + static constexpr auto &FLOORF64 = "floorf64"; + + static constexpr auto &CEILF32 = "ceilf32"; + static constexpr auto &CEILF64 = "ceilf64"; + + static constexpr auto &TRUNCF32 = "truncf32"; + static constexpr auto &TRUNCF64 = "truncf64"; + + static constexpr auto &RINTF32 = "rintf32"; + static constexpr auto &RINTF64 = "rintf64"; + + static constexpr auto &NEARBYINTF32 = "nearbyintf32"; + static constexpr auto &NEARBYINTF64 = "nearbyintf64"; + + static constexpr auto &ROUNDF32 = "roundf32"; + static constexpr auto &ROUNDF64 = "roundf64"; + static constexpr auto &ABORT = "abort"; static constexpr auto &OFFSET = "offset"; static constexpr auto &SIZE_OF = "size_of";
