From 12a0038250e4bf61da4c305d76b968767f5b1311 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 22 Jun 2017 23:36:50 -0700 Subject: [PATCH] Fix the abi hack on windows --- src/lib.rs | 18 ------------------ src/macros.rs | 22 +++++++++++++++------- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index a55752a..6d44fb1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -78,24 +78,6 @@ macro_rules! urem { } } -// Hack for LLVM expectations for ABI on windows -#[cfg(all(windows, target_pointer_width="64"))] -#[repr(simd)] -pub struct U64x2(u64, u64); - -#[cfg(all(windows, target_pointer_width="64"))] -fn conv(i: u128) -> U64x2 { - use int::LargeInt; - U64x2(i.low(), i.high()) -} - -#[cfg(all(windows, target_pointer_width="64"))] -fn sconv(i: i128) -> U64x2 { - use int::LargeInt; - let j = i as u128; - U64x2(j.low(), j.high()) -} - #[cfg(test)] extern crate core; diff --git a/src/macros.rs b/src/macros.rs index 5c98774..70e44da 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -110,13 +110,21 @@ macro_rules! intrinsics { $($rest:tt)* ) => ( #[cfg(all(windows, target_pointer_width = "64"))] - intrinsics! { - $(#[$attr])* - pub extern $abi fn $name( $($argname: $ty),* ) - -> ::macros::win64_abi_hack::U64x2 - { - let e: $ret = { $($body)* }; - ::macros::win64_abi_hack::U64x2::from(e) + $(#[$attr])* + pub extern $abi fn $name( $($argname: $ty),* ) -> $ret { + $($body)* + } + + #[cfg(all(windows, target_pointer_width = "64"))] + pub mod $name { + + intrinsics! { + pub extern $abi fn $name( $($argname: $ty),* ) + -> ::macros::win64_abi_hack::U64x2 + { + let e: $ret = super::$name($($argname),*); + ::macros::win64_abi_hack::U64x2::from(e) + } } }