From: Enes Cevik <[email protected]>
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]>
---
This change was merged into the gccrs repository and is posted here for
upstream visibility and potential drive-by review, as requested by GCC
release managers.
Each commit email contains a link to its details on github from where you can
find the Pull-Request and associated discussions.
Commit on github:
https://github.com/Rust-GCC/gccrs/commit/b9721a30bfce4ee594d77ba2bea9de79daba72c3
The commit has NOT been mentioned in any issue.
The commit has been mentioned in the following pull-request(s):
- https://github.com/Rust-GCC/gccrs/pull/4587
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 282ecba70..881561fdd 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 c868c851d..1c275e7b7 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";
base-commit: 70e9fdc3666359a519847b8bf4254a85ea601524
--
2.54.0