1 macro_rules
! force_eval
{
4 ::core
::ptr
::read_volatile(&$e
);
9 #[cfg(not(debug_assertions))]
11 ($array
:expr
, $index
:expr
) => {
12 unsafe { *$array.get_unchecked($index) }
14 ($array
:expr
, $index
:expr
, = , $rhs
:expr
) => {
16 *$array
.get_unchecked_mut($index
) = $rhs
;
19 ($array
:expr
, $index
:expr
, += , $rhs
:expr
) => {
21 *$array
.get_unchecked_mut($index
) += $rhs
;
24 ($array
:expr
, $index
:expr
, -= , $rhs
:expr
) => {
26 *$array
.get_unchecked_mut($index
) -= $rhs
;
29 ($array
:expr
, $index
:expr
, &= , $rhs
:expr
) => {
31 *$array
.get_unchecked_mut($index
) &= $rhs
;
34 ($array
:expr
, $index
:expr
, == , $rhs
:expr
) => {
35 unsafe { *$array.get_unchecked_mut($index) == $rhs }
39 #[cfg(debug_assertions)]
41 ($array
:expr
, $index
:expr
) => {
42 *$array
.get($index
).unwrap()
44 ($array
:expr
, $index
:expr
, = , $rhs
:expr
) => {
45 *$array
.get_mut($index
).unwrap() = $rhs
;
47 ($array
:expr
, $index
:expr
, -= , $rhs
:expr
) => {
48 *$array
.get_mut($index
).unwrap() -= $rhs
;
50 ($array
:expr
, $index
:expr
, += , $rhs
:expr
) => {
51 *$array
.get_mut($index
).unwrap() += $rhs
;
53 ($array
:expr
, $index
:expr
, &= , $rhs
:expr
) => {
54 *$array
.get_mut($index
).unwrap() &= $rhs
;
56 ($array
:expr
, $index
:expr
, == , $rhs
:expr
) => {
57 *$array
.get_mut($index
).unwrap() == $rhs
61 macro_rules
! llvm_intrinsically_optimized
{
62 (#[cfg($($clause:tt)*)] $e:expr) => {
63 #[cfg(all(feature = "unstable", $($clause)*))]
65 if true { // thwart the dead code lint
178 // Use separated imports instead of {}-grouped imports for easier merging.
179 pub use self::acos
::acos
;
180 pub use self::acosf
::acosf
;
181 pub use self::acosh
::acosh
;
182 pub use self::acoshf
::acoshf
;
183 pub use self::asin
::asin
;
184 pub use self::asinf
::asinf
;
185 pub use self::asinh
::asinh
;
186 pub use self::asinhf
::asinhf
;
187 pub use self::atan
::atan
;
188 pub use self::atan2
::atan2
;
189 pub use self::atan2f
::atan2f
;
190 pub use self::atanf
::atanf
;
191 pub use self::atanh
::atanh
;
192 pub use self::atanhf
::atanhf
;
193 pub use self::cbrt
::cbrt
;
194 pub use self::cbrtf
::cbrtf
;
195 pub use self::ceil
::ceil
;
196 pub use self::ceilf
::ceilf
;
197 pub use self::copysign
::copysign
;
198 pub use self::copysignf
::copysignf
;
199 pub use self::cos
::cos
;
200 pub use self::cosf
::cosf
;
201 pub use self::cosh
::cosh
;
202 pub use self::coshf
::coshf
;
203 pub use self::erf
::erf
;
204 pub use self::erf
::erfc
;
205 pub use self::erff
::erfcf
;
206 pub use self::erff
::erff
;
207 pub use self::exp
::exp
;
208 pub use self::exp10
::exp10
;
209 pub use self::exp10f
::exp10f
;
210 pub use self::exp2
::exp2
;
211 pub use self::exp2f
::exp2f
;
212 pub use self::expf
::expf
;
213 pub use self::expm1
::expm1
;
214 pub use self::expm1f
::expm1f
;
215 pub use self::fabs
::fabs
;
216 pub use self::fabsf
::fabsf
;
217 pub use self::fdim
::fdim
;
218 pub use self::fdimf
::fdimf
;
219 pub use self::floor
::floor
;
220 pub use self::floorf
::floorf
;
221 pub use self::fma
::fma
;
222 pub use self::fmaf
::fmaf
;
223 pub use self::fmax
::fmax
;
224 pub use self::fmaxf
::fmaxf
;
225 pub use self::fmin
::fmin
;
226 pub use self::fminf
::fminf
;
227 pub use self::fmod
::fmod
;
228 pub use self::fmodf
::fmodf
;
229 pub use self::frexp
::frexp
;
230 pub use self::frexpf
::frexpf
;
231 pub use self::hypot
::hypot
;
232 pub use self::hypotf
::hypotf
;
233 pub use self::ilogb
::ilogb
;
234 pub use self::ilogbf
::ilogbf
;
235 pub use self::j0
::j0
;
236 pub use self::j0
::y0
;
237 pub use self::j0f
::j0f
;
238 pub use self::j0f
::y0f
;
239 pub use self::j1
::j1
;
240 pub use self::j1
::y1
;
241 pub use self::j1f
::j1f
;
242 pub use self::j1f
::y1f
;
243 pub use self::jn
::jn
;
244 pub use self::jn
::yn
;
245 pub use self::jnf
::jnf
;
246 pub use self::jnf
::ynf
;
247 pub use self::ldexp
::ldexp
;
248 pub use self::ldexpf
::ldexpf
;
249 pub use self::lgamma
::lgamma
;
250 pub use self::lgamma_r
::lgamma_r
;
251 pub use self::lgammaf
::lgammaf
;
252 pub use self::lgammaf_r
::lgammaf_r
;
253 pub use self::log
::log
;
254 pub use self::log10
::log10
;
255 pub use self::log10f
::log10f
;
256 pub use self::log1p
::log1p
;
257 pub use self::log1pf
::log1pf
;
258 pub use self::log2
::log2
;
259 pub use self::log2f
::log2f
;
260 pub use self::logf
::logf
;
261 pub use self::modf
::modf
;
262 pub use self::modff
::modff
;
263 pub use self::nextafter
::nextafter
;
264 pub use self::nextafterf
::nextafterf
;
265 pub use self::pow
::pow
;
266 pub use self::powf
::powf
;
267 pub use self::remainder
::remainder
;
268 pub use self::remainderf
::remainderf
;
269 pub use self::remquo
::remquo
;
270 pub use self::remquof
::remquof
;
271 pub use self::round
::round
;
272 pub use self::roundf
::roundf
;
273 pub use self::scalbn
::scalbn
;
274 pub use self::scalbnf
::scalbnf
;
275 pub use self::sin
::sin
;
276 pub use self::sincos
::sincos
;
277 pub use self::sincosf
::sincosf
;
278 pub use self::sinf
::sinf
;
279 pub use self::sinh
::sinh
;
280 pub use self::sinhf
::sinhf
;
281 pub use self::sqrt
::sqrt
;
282 pub use self::sqrtf
::sqrtf
;
283 pub use self::tan
::tan
;
284 pub use self::tanf
::tanf
;
285 pub use self::tanh
::tanh
;
286 pub use self::tanhf
::tanhf
;
287 pub use self::tgamma
::tgamma
;
288 pub use self::tgammaf
::tgammaf
;
289 pub use self::trunc
::trunc
;
290 pub use self::truncf
::truncf
;
307 // Private re-imports
308 use self::expo2
::expo2
;
309 use self::k_cos
::k_cos
;
310 use self::k_cosf
::k_cosf
;
311 use self::k_expo2
::k_expo2
;
312 use self::k_expo2f
::k_expo2f
;
313 use self::k_sin
::k_sin
;
314 use self::k_sinf
::k_sinf
;
315 use self::k_tan
::k_tan
;
316 use self::k_tanf
::k_tanf
;
317 use self::rem_pio2
::rem_pio2
;
318 use self::rem_pio2_large
::rem_pio2_large
;
319 use self::rem_pio2f
::rem_pio2f
;
322 fn get_high_word(x
: f64) -> u32 {
323 (x
.to_bits() >> 32) as u32
327 fn get_low_word(x
: f64) -> u32 {
332 fn with_set_high_word(f
: f64, hi
: u32) -> f64 {
333 let mut tmp
= f
.to_bits();
334 tmp
&= 0x00000000_ffffffff;
335 tmp
|= (hi
as u64) << 32;
340 fn with_set_low_word(f
: f64, lo
: u32) -> f64 {
341 let mut tmp
= f
.to_bits();
342 tmp
&= 0xffffffff_00000000;
348 fn combine_words(hi
: u32, lo
: u32) -> f64 {
349 f64::from_bits((hi
as u64) << 32 | lo
as u64)