Skip to content

Commit ebb9b46

Browse files
committed
auto merge of #9986 : thestinger/rust/float, r=cmr
copysign, ring, nearbyint, round
2 parents 6e6981c + 4533432 commit ebb9b46

File tree

4 files changed

+69
-23
lines changed

4 files changed

+69
-23
lines changed

src/librustc/middle/trans/base.rs

+10
Original file line numberDiff line numberDiff line change
@@ -2797,13 +2797,23 @@ pub fn declare_intrinsics(llmod: ModuleRef) -> HashMap<&'static str, ValueRef> {
27972797

27982798
ifn!(intrinsics, "llvm.fabs.f32", [Type::f32()], Type::f32());
27992799
ifn!(intrinsics, "llvm.fabs.f64", [Type::f64()], Type::f64());
2800+
ifn!(intrinsics, "llvm.copysign.f32", [Type::f32()], Type::f32());
2801+
ifn!(intrinsics, "llvm.copysign.f64", [Type::f64()], Type::f64());
2802+
28002803
ifn!(intrinsics, "llvm.floor.f32",[Type::f32()], Type::f32());
28012804
ifn!(intrinsics, "llvm.floor.f64",[Type::f64()], Type::f64());
28022805
ifn!(intrinsics, "llvm.ceil.f32", [Type::f32()], Type::f32());
28032806
ifn!(intrinsics, "llvm.ceil.f64", [Type::f64()], Type::f64());
28042807
ifn!(intrinsics, "llvm.trunc.f32",[Type::f32()], Type::f32());
28052808
ifn!(intrinsics, "llvm.trunc.f64",[Type::f64()], Type::f64());
28062809

2810+
ifn!(intrinsics, "llvm.rint.f32",[Type::f64()], Type::f64());
2811+
ifn!(intrinsics, "llvm.rint.f64",[Type::f64()], Type::f64());
2812+
ifn!(intrinsics, "llvm.nearbyint.f32",[Type::f64()], Type::f64());
2813+
ifn!(intrinsics, "llvm.nearbyint.f64",[Type::f64()], Type::f64());
2814+
ifn!(intrinsics, "llvm.round.f32",[Type::f64()], Type::f64());
2815+
ifn!(intrinsics, "llvm.round.f64",[Type::f64()], Type::f64());
2816+
28072817
ifn!(intrinsics, "llvm.ctpop.i8", [Type::i8()], Type::i8());
28082818
ifn!(intrinsics, "llvm.ctpop.i16",[Type::i16()], Type::i16());
28092819
ifn!(intrinsics, "llvm.ctpop.i32",[Type::i32()], Type::i32());

src/librustc/middle/trans/intrinsic.rs

+8
Original file line numberDiff line numberDiff line change
@@ -460,12 +460,20 @@ pub fn trans_intrinsic(ccx: @mut CrateContext,
460460
"fmaf64" => simple_llvm_intrinsic(bcx, "llvm.fma.f64", 3),
461461
"fabsf32" => simple_llvm_intrinsic(bcx, "llvm.fabs.f32", 1),
462462
"fabsf64" => simple_llvm_intrinsic(bcx, "llvm.fabs.f64", 1),
463+
"copysignf32" => simple_llvm_intrinsic(bcx, "llvm.copysign.f32", 1),
464+
"copysignf64" => simple_llvm_intrinsic(bcx, "llvm.copysign.f64", 1),
463465
"floorf32" => simple_llvm_intrinsic(bcx, "llvm.floor.f32", 1),
464466
"floorf64" => simple_llvm_intrinsic(bcx, "llvm.floor.f64", 1),
465467
"ceilf32" => simple_llvm_intrinsic(bcx, "llvm.ceil.f32", 1),
466468
"ceilf64" => simple_llvm_intrinsic(bcx, "llvm.ceil.f64", 1),
467469
"truncf32" => simple_llvm_intrinsic(bcx, "llvm.trunc.f32", 1),
468470
"truncf64" => simple_llvm_intrinsic(bcx, "llvm.trunc.f64", 1),
471+
"rintf64" => simple_llvm_intrinsic(bcx, "llvm.rint.f64", 1),
472+
"rintf32" => simple_llvm_intrinsic(bcx, "llvm.rint.f32", 1),
473+
"nearbyintf32" => simple_llvm_intrinsic(bcx, "llvm.nearbyint.f64", 1),
474+
"nearbyintf64" => simple_llvm_intrinsic(bcx, "llvm.nearbyint.f32", 1),
475+
"roundf32" => simple_llvm_intrinsic(bcx, "llvm.round.f64", 1),
476+
"roundf64" => simple_llvm_intrinsic(bcx, "llvm.round.f32", 1),
469477
"ctpop8" => simple_llvm_intrinsic(bcx, "llvm.ctpop.i8", 1),
470478
"ctpop16" => simple_llvm_intrinsic(bcx, "llvm.ctpop.i16", 1),
471479
"ctpop32" => simple_llvm_intrinsic(bcx, "llvm.ctpop.i32", 1),

src/librustc/middle/typeck/check/mod.rs

+31-23
Original file line numberDiff line numberDiff line change
@@ -3807,29 +3807,37 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
38073807
~[ ty::mk_f64(), ty::mk_f64(), ty::mk_f64() ],
38083808
ty::mk_f64())
38093809
}
3810-
"fabsf32" => (0, ~[ ty::mk_f32() ], ty::mk_f32()),
3811-
"fabsf64" => (0, ~[ ty::mk_f64() ], ty::mk_f64()),
3812-
"floorf32" => (0, ~[ ty::mk_f32() ], ty::mk_f32()),
3813-
"floorf64" => (0, ~[ ty::mk_f64() ], ty::mk_f64()),
3814-
"ceilf32" => (0, ~[ ty::mk_f32() ], ty::mk_f32()),
3815-
"ceilf64" => (0, ~[ ty::mk_f64() ], ty::mk_f64()),
3816-
"truncf32" => (0, ~[ ty::mk_f32() ], ty::mk_f32()),
3817-
"truncf64" => (0, ~[ ty::mk_f64() ], ty::mk_f64()),
3818-
"ctpop8" => (0, ~[ ty::mk_i8() ], ty::mk_i8()),
3819-
"ctpop16" => (0, ~[ ty::mk_i16() ], ty::mk_i16()),
3820-
"ctpop32" => (0, ~[ ty::mk_i32() ], ty::mk_i32()),
3821-
"ctpop64" => (0, ~[ ty::mk_i64() ], ty::mk_i64()),
3822-
"ctlz8" => (0, ~[ ty::mk_i8() ], ty::mk_i8()),
3823-
"ctlz16" => (0, ~[ ty::mk_i16() ], ty::mk_i16()),
3824-
"ctlz32" => (0, ~[ ty::mk_i32() ], ty::mk_i32()),
3825-
"ctlz64" => (0, ~[ ty::mk_i64() ], ty::mk_i64()),
3826-
"cttz8" => (0, ~[ ty::mk_i8() ], ty::mk_i8()),
3827-
"cttz16" => (0, ~[ ty::mk_i16() ], ty::mk_i16()),
3828-
"cttz32" => (0, ~[ ty::mk_i32() ], ty::mk_i32()),
3829-
"cttz64" => (0, ~[ ty::mk_i64() ], ty::mk_i64()),
3830-
"bswap16" => (0, ~[ ty::mk_i16() ], ty::mk_i16()),
3831-
"bswap32" => (0, ~[ ty::mk_i32() ], ty::mk_i32()),
3832-
"bswap64" => (0, ~[ ty::mk_i64() ], ty::mk_i64()),
3810+
"fabsf32" => (0, ~[ ty::mk_f32() ], ty::mk_f32()),
3811+
"fabsf64" => (0, ~[ ty::mk_f64() ], ty::mk_f64()),
3812+
"copysignf32" => (0, ~[ ty::mk_f32() ], ty::mk_f32()),
3813+
"copysignf64" => (0, ~[ ty::mk_f64() ], ty::mk_f64()),
3814+
"floorf32" => (0, ~[ ty::mk_f32() ], ty::mk_f32()),
3815+
"floorf64" => (0, ~[ ty::mk_f64() ], ty::mk_f64()),
3816+
"ceilf32" => (0, ~[ ty::mk_f32() ], ty::mk_f32()),
3817+
"ceilf64" => (0, ~[ ty::mk_f64() ], ty::mk_f64()),
3818+
"truncf32" => (0, ~[ ty::mk_f32() ], ty::mk_f32()),
3819+
"truncf64" => (0, ~[ ty::mk_f64() ], ty::mk_f64()),
3820+
"rintf32" => (0, ~[ ty::mk_f32() ], ty::mk_f32()),
3821+
"rintf64" => (0, ~[ ty::mk_f64() ], ty::mk_f64()),
3822+
"nearbyintf32" => (0, ~[ ty::mk_f32() ], ty::mk_f32()),
3823+
"nearbyintf64" => (0, ~[ ty::mk_f64() ], ty::mk_f64()),
3824+
"roundf32" => (0, ~[ ty::mk_f32() ], ty::mk_f32()),
3825+
"roundf64" => (0, ~[ ty::mk_f64() ], ty::mk_f64()),
3826+
"ctpop8" => (0, ~[ ty::mk_i8() ], ty::mk_i8()),
3827+
"ctpop16" => (0, ~[ ty::mk_i16() ], ty::mk_i16()),
3828+
"ctpop32" => (0, ~[ ty::mk_i32() ], ty::mk_i32()),
3829+
"ctpop64" => (0, ~[ ty::mk_i64() ], ty::mk_i64()),
3830+
"ctlz8" => (0, ~[ ty::mk_i8() ], ty::mk_i8()),
3831+
"ctlz16" => (0, ~[ ty::mk_i16() ], ty::mk_i16()),
3832+
"ctlz32" => (0, ~[ ty::mk_i32() ], ty::mk_i32()),
3833+
"ctlz64" => (0, ~[ ty::mk_i64() ], ty::mk_i64()),
3834+
"cttz8" => (0, ~[ ty::mk_i8() ], ty::mk_i8()),
3835+
"cttz16" => (0, ~[ ty::mk_i16() ], ty::mk_i16()),
3836+
"cttz32" => (0, ~[ ty::mk_i32() ], ty::mk_i32()),
3837+
"cttz64" => (0, ~[ ty::mk_i64() ], ty::mk_i64()),
3838+
"bswap16" => (0, ~[ ty::mk_i16() ], ty::mk_i16()),
3839+
"bswap32" => (0, ~[ ty::mk_i32() ], ty::mk_i32()),
3840+
"bswap64" => (0, ~[ ty::mk_i64() ], ty::mk_i64()),
38333841

38343842
"i8_add_with_overflow" | "i8_sub_with_overflow" | "i8_mul_with_overflow" =>
38353843
(0, ~[ty::mk_i8(), ty::mk_i8()],

src/libstd/unstable/intrinsics.rs

+20
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,11 @@ extern "rust-intrinsic" {
413413
pub fn fabsf32(x: f32) -> f32;
414414
pub fn fabsf64(x: f64) -> f64;
415415

416+
#[cfg(not(stage0))]
417+
pub fn copysignf32(x: f32) -> f32;
418+
#[cfg(not(stage0))]
419+
pub fn copysignf64(x: f64) -> f64;
420+
416421
pub fn floorf32(x: f32) -> f32;
417422
pub fn floorf64(x: f64) -> f64;
418423

@@ -422,6 +427,21 @@ extern "rust-intrinsic" {
422427
pub fn truncf32(x: f32) -> f32;
423428
pub fn truncf64(x: f64) -> f64;
424429

430+
#[cfg(not(stage0))]
431+
pub fn rintf32(x: f32) -> f32;
432+
#[cfg(not(stage0))]
433+
pub fn rintf64(x: f64) -> f64;
434+
435+
#[cfg(not(stage0))]
436+
pub fn nearbyintf32(x: f32) -> f32;
437+
#[cfg(not(stage0))]
438+
pub fn nearbyintf64(x: f64) -> f64;
439+
440+
#[cfg(not(stage0))]
441+
pub fn roundf32(x: f32) -> f32;
442+
#[cfg(not(stage0))]
443+
pub fn roundf64(x: f64) -> f64;
444+
425445
pub fn ctpop8(x: i8) -> i8;
426446
pub fn ctpop16(x: i16) -> i16;
427447
pub fn ctpop32(x: i32) -> i32;

0 commit comments

Comments
 (0)