From fce5fa5231fc0c4ae7c6cb1b4831ec2b23ffe2f2 Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Tue, 2 Oct 2018 18:12:03 +0200 Subject: [PATCH] Rustup to rustc 1.31.0-nightly (de3d640f5 2018-10-01), fix a atomic bug and implement intrinsic bitreverse --- ...able-some-more-unsupported-stuff-in-libcore.patch | 12 ------------ src/abi.rs | 10 ++++++++-- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/0004-Disable-some-more-unsupported-stuff-in-libcore.patch b/0004-Disable-some-more-unsupported-stuff-in-libcore.patch index 25bae13ff30b..c265db96a26f 100644 --- a/0004-Disable-some-more-unsupported-stuff-in-libcore.patch +++ b/0004-Disable-some-more-unsupported-stuff-in-libcore.patch @@ -51,17 +51,5 @@ index 5d00949..f077f1d 100644 } } -@@ -2295,7 +2297,9 @@ assert_eq!(m, ", $reversed, "); - #[unstable(feature = "reverse_bits", issue = "48763")] - #[rustc_const_unstable(feature = "const_int_conversion")] - #[inline] - #[cfg(not(stage0))] - pub const fn reverse_bits(self) -> Self { -- unsafe { intrinsics::bitreverse(self as $ActualT) as Self } -+ // TODO support bitreverse -+ //unsafe { intrinsics::bitreverse(self as $ActualT) as Self } -+ 0 - } - } -- 2.11.0 diff --git a/src/abi.rs b/src/abi.rs index e1ac63a0c9d5..7b9b0a180251 100644 --- a/src/abi.rs +++ b/src/abi.rs @@ -853,6 +853,12 @@ fn codegen_intrinsic_call<'a, 'tcx: 'a>( let res = CValue::ByVal(fx.bcx.ins().popcnt(arg), args[0].layout()); ret.write_cvalue(fx, res); } + "bitreverse" => { + assert_eq!(args.len(), 1); + let arg = args[0].load_value(fx); + let res = CValue::ByVal(fx.bcx.ins().bitrev(arg), args[0].layout()); + ret.write_cvalue(fx, res); + } "needs_drop" => { assert_eq!(args.len(), 0); let ty = substs.type_at(0); @@ -884,7 +890,7 @@ fn codegen_intrinsic_call<'a, 'tcx: 'a>( let amount = args[1].load_value(fx); let old = fx.bcx.ins().load(clif_ty, MemFlags::new(), ptr, 0); let new = fx.bcx.ins().iadd(old, amount); - fx.bcx.ins().store(MemFlags::new(), ptr, new, 0); + fx.bcx.ins().store(MemFlags::new(), new, ptr, 0); ret.write_cvalue(fx, CValue::ByVal(old, fx.layout_of(substs.type_at(0)))); } _ if intrinsic.starts_with("atomic_xsub") => { @@ -894,7 +900,7 @@ fn codegen_intrinsic_call<'a, 'tcx: 'a>( let amount = args[1].load_value(fx); let old = fx.bcx.ins().load(clif_ty, MemFlags::new(), ptr, 0); let new = fx.bcx.ins().isub(old, amount); - fx.bcx.ins().store(MemFlags::new(), ptr, new, 0); + fx.bcx.ins().store(MemFlags::new(), new, ptr, 0); ret.write_cvalue(fx, CValue::ByVal(old, fx.layout_of(substs.type_at(0)))); } _ => unimpl!("unsupported intrinsic {}", intrinsic),