mirror of
https://github.com/roc-lang/roc.git
synced 2025-07-23 22:45:14 +00:00
Use unsigned LLVM intrinsic arithmetic for unsigned integers
Closes #2331
This commit is contained in:
parent
2f3919c870
commit
abe42781d5
3 changed files with 86 additions and 25 deletions
|
@ -201,24 +201,28 @@ macro_rules! float_intrinsic {
|
|||
|
||||
#[macro_export]
|
||||
macro_rules! int_intrinsic {
|
||||
($name:literal) => {{
|
||||
($signed_name:literal, $unsigned_name:literal) => {{
|
||||
let mut output = IntrinsicName::default();
|
||||
|
||||
// These are LLVM types which don't include
|
||||
// u64 for example
|
||||
output.options[4] = concat!($name, ".i8");
|
||||
output.options[5] = concat!($name, ".i16");
|
||||
output.options[6] = concat!($name, ".i32");
|
||||
output.options[7] = concat!($name, ".i64");
|
||||
output.options[8] = concat!($name, ".i128");
|
||||
output.options[9] = concat!($name, ".i8");
|
||||
output.options[10] = concat!($name, ".i16");
|
||||
output.options[11] = concat!($name, ".i32");
|
||||
output.options[12] = concat!($name, ".i64");
|
||||
output.options[13] = concat!($name, ".i128");
|
||||
// The indeces align with the `Index` impl for `IntrinsicName`.
|
||||
output.options[4] = concat!($unsigned_name, ".i8");
|
||||
output.options[5] = concat!($unsigned_name, ".i16");
|
||||
output.options[6] = concat!($unsigned_name, ".i32");
|
||||
output.options[7] = concat!($unsigned_name, ".i64");
|
||||
output.options[8] = concat!($unsigned_name, ".i128");
|
||||
|
||||
output.options[9] = concat!($signed_name, ".i8");
|
||||
output.options[10] = concat!($signed_name, ".i16");
|
||||
output.options[11] = concat!($signed_name, ".i32");
|
||||
output.options[12] = concat!($signed_name, ".i64");
|
||||
output.options[13] = concat!($signed_name, ".i128");
|
||||
|
||||
output
|
||||
}};
|
||||
|
||||
($name:literal) => {
|
||||
int_intrinsic!($name, $name)
|
||||
};
|
||||
}
|
||||
|
||||
pub const NUM_ASIN: IntrinsicName = float_intrinsic!("roc_builtins.num.asin");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue