Add support for f128 integer exponentiation
Create the symbol `__powitf2`.
This commit is contained in:
parent
2a32f80cdc
commit
606d971958
4 changed files with 31 additions and 5 deletions
|
|
@ -240,7 +240,7 @@ of being added to Rust.
|
|||
- [ ] floatunsitf.c
|
||||
- [ ] floatuntitf.c
|
||||
- [x] multf3.c
|
||||
- [ ] powitf2.c
|
||||
- [x] powitf2.c
|
||||
- [x] subtf3.c
|
||||
- [x] truncdfhf2.c
|
||||
- [x] truncsfhf2.c
|
||||
|
|
|
|||
|
|
@ -526,7 +526,6 @@ mod c {
|
|||
("__floatsitf", "floatsitf.c"),
|
||||
("__floatunditf", "floatunditf.c"),
|
||||
("__floatunsitf", "floatunsitf.c"),
|
||||
("__powitf2", "powitf2.c"),
|
||||
("__fe_getround", "fp_mode.c"),
|
||||
("__fe_raise_inexact", "fp_mode.c"),
|
||||
]);
|
||||
|
|
|
|||
|
|
@ -35,4 +35,13 @@ intrinsics! {
|
|||
pub extern "C" fn __powidf2(a: f64, b: i32) -> f64 {
|
||||
pow(a, b)
|
||||
}
|
||||
|
||||
#[avr_skip]
|
||||
#[ppc_alias = __powikf2]
|
||||
#[cfg(f128_enabled)]
|
||||
// FIXME(f16_f128): MSVC cannot build these until `__divtf3` is available in nightly.
|
||||
#[cfg(not(target_env = "msvc"))]
|
||||
pub extern "C" fn __powitf2(a: f128, b: i32) -> f128 {
|
||||
pow(a, b)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#![allow(unused_macros)]
|
||||
#![cfg_attr(f128_enabled, feature(f128))]
|
||||
#![cfg(not(all(target_arch = "x86", not(target_feature = "sse"))))]
|
||||
|
||||
use testcrate::*;
|
||||
|
|
@ -7,9 +8,12 @@ use testcrate::*;
|
|||
// https://github.com/rust-lang/rust/issues/73920.
|
||||
// TODO how do we resolve this indeterminacy?
|
||||
macro_rules! pow {
|
||||
($($f:ty, $tolerance:expr, $fn:ident);*;) => {
|
||||
($($f:ty, $tolerance:expr, $fn:ident, $sys_available:meta);*;) => {
|
||||
$(
|
||||
#[test]
|
||||
// FIXME(apfloat): We skip tests if system symbols aren't available rather
|
||||
// than providing a fallback, since `rustc_apfloat` does not provide `pow`.
|
||||
#[cfg($sys_available)]
|
||||
fn $fn() {
|
||||
use compiler_builtins::float::pow::$fn;
|
||||
use compiler_builtins::float::Float;
|
||||
|
|
@ -49,6 +53,20 @@ macro_rules! pow {
|
|||
}
|
||||
|
||||
pow! {
|
||||
f32, 1e-4, __powisf2;
|
||||
f64, 1e-12, __powidf2;
|
||||
f32, 1e-4, __powisf2, all();
|
||||
f64, 1e-12, __powidf2, all();
|
||||
}
|
||||
|
||||
#[cfg(f128_enabled)]
|
||||
// FIXME(f16_f128): MSVC cannot build these until `__divtf3` is available in nightly.
|
||||
#[cfg(not(target_env = "msvc"))]
|
||||
#[cfg(not(any(target_arch = "powerpc", target_arch = "powerpc64")))]
|
||||
pow! {
|
||||
f128, 1e-36, __powitf2, not(feature = "no-sys-f128");
|
||||
}
|
||||
|
||||
#[cfg(f128_enabled)]
|
||||
#[cfg(any(target_arch = "powerpc", target_arch = "powerpc64"))]
|
||||
pow! {
|
||||
f128, 1e-36, __powikf2, not(feature = "no-sys-f128");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue