Merge pull request #463 from m-ou-se/cfg-attr

This commit is contained in:
Amanieu d'Antras 2022-05-23 23:58:09 +02:00 committed by GitHub
commit ddc5aa4ffb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 48 deletions

View file

@ -239,83 +239,47 @@ intrinsics! {
// use Win64 ABI rather than unadjusted ABI. Pick the correct ABI based on the
// llvm14-builtins-abi target feature.
#[cfg(target_feature = "llvm14-builtins-abi")]
intrinsics! {
#[cfg_attr(not(target_feature = "llvm14-builtins-abi"), unadjusted_on_win64)]
pub extern "C" fn __floattisf(i: i128) -> f32 {
int_to_float(i)
}
#[cfg_attr(not(target_feature = "llvm14-builtins-abi"), unadjusted_on_win64)]
pub extern "C" fn __floattidf(i: i128) -> f64 {
int_to_float(i)
}
#[cfg_attr(not(target_feature = "llvm14-builtins-abi"), unadjusted_on_win64)]
pub extern "C" fn __floatuntisf(i: u128) -> f32 {
int_to_float(i)
}
#[cfg_attr(not(target_feature = "llvm14-builtins-abi"), unadjusted_on_win64)]
pub extern "C" fn __floatuntidf(i: u128) -> f64 {
int_to_float(i)
}
#[win64_128bit_abi_hack]
#[cfg_attr(target_feature = "llvm14-builtins-abi", win64_128bit_abi_hack)]
#[cfg_attr(not(target_feature = "llvm14-builtins-abi"), unadjusted_on_win64)]
pub extern "C" fn __fixsfti(f: f32) -> i128 {
float_to_int(f)
}
#[win64_128bit_abi_hack]
#[cfg_attr(target_feature = "llvm14-builtins-abi", win64_128bit_abi_hack)]
#[cfg_attr(not(target_feature = "llvm14-builtins-abi"), unadjusted_on_win64)]
pub extern "C" fn __fixdfti(f: f64) -> i128 {
float_to_int(f)
}
#[win64_128bit_abi_hack]
#[cfg_attr(target_feature = "llvm14-builtins-abi", win64_128bit_abi_hack)]
#[cfg_attr(not(target_feature = "llvm14-builtins-abi"), unadjusted_on_win64)]
pub extern "C" fn __fixunssfti(f: f32) -> u128 {
float_to_int(f)
}
#[win64_128bit_abi_hack]
pub extern "C" fn __fixunsdfti(f: f64) -> u128 {
float_to_int(f)
}
}
#[cfg(not(target_feature = "llvm14-builtins-abi"))]
intrinsics! {
#[unadjusted_on_win64]
pub extern "C" fn __floattisf(i: i128) -> f32 {
int_to_float(i)
}
#[unadjusted_on_win64]
pub extern "C" fn __floattidf(i: i128) -> f64 {
int_to_float(i)
}
#[unadjusted_on_win64]
pub extern "C" fn __floatuntisf(i: u128) -> f32 {
int_to_float(i)
}
#[unadjusted_on_win64]
pub extern "C" fn __floatuntidf(i: u128) -> f64 {
int_to_float(i)
}
#[unadjusted_on_win64]
pub extern "C" fn __fixsfti(f: f32) -> i128 {
float_to_int(f)
}
#[unadjusted_on_win64]
pub extern "C" fn __fixdfti(f: f64) -> i128 {
float_to_int(f)
}
#[unadjusted_on_win64]
pub extern "C" fn __fixunssfti(f: f32) -> u128 {
float_to_int(f)
}
#[unadjusted_on_win64]
#[cfg_attr(target_feature = "llvm14-builtins-abi", win64_128bit_abi_hack)]
#[cfg_attr(not(target_feature = "llvm14-builtins-abi"), unadjusted_on_win64)]
pub extern "C" fn __fixunsdfti(f: f64) -> u128 {
float_to_int(f)
}

View file

@ -61,6 +61,35 @@ macro_rules! public_test_dep {
macro_rules! intrinsics {
() => ();
// Support cfg_attr:
(
#[cfg_attr($e:meta, $($attr:tt)*)]
$(#[$($attrs:tt)*])*
pub extern $abi:tt fn $name:ident( $($argname:ident: $ty:ty),* ) $(-> $ret:ty)? {
$($body:tt)*
}
$($rest:tt)*
) => (
#[cfg($e)]
intrinsics! {
#[$($attr)*]
$(#[$($attrs)*])*
pub extern $abi fn $name($($argname: $ty),*) $(-> $ret)? {
$($body)*
}
}
#[cfg(not($e))]
intrinsics! {
$(#[$($attrs)*])*
pub extern $abi fn $name($($argname: $ty),*) $(-> $ret)? {
$($body)*
}
}
intrinsics!($($rest)*);
);
// Right now there's a bunch of architecture-optimized intrinsics in the
// stock compiler-rt implementation. Not all of these have been ported over
// to Rust yet so when the `c` feature of this crate is enabled we fall back