From 3abc63365895aff78815ea7b57374486f91daebd Mon Sep 17 00:00:00 2001 From: Carl-Anton Ingmarsson Date: Wed, 1 Jan 2014 19:00:22 +0100 Subject: [PATCH] Add byteswap intrinsics for converting from big/little to host endian These are similar to the ntoh[s|l] functions in C and have the style of from_[be|le][16|32|64]. --- src/libstd/unstable/intrinsics.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/libstd/unstable/intrinsics.rs b/src/libstd/unstable/intrinsics.rs index 46dc03e82b0b..e0089b599c5b 100644 --- a/src/libstd/unstable/intrinsics.rs +++ b/src/libstd/unstable/intrinsics.rs @@ -500,6 +500,19 @@ extern "rust-intrinsic" { #[cfg(target_endian = "little")] pub fn to_be64(x: i64) -> i64 { unsafe { bswap64(x) } } #[cfg(target_endian = "big")] pub fn to_be64(x: i64) -> i64 { x } +#[cfg(target_endian = "little")] pub fn from_le16(x: i16) -> i16 { x } +#[cfg(target_endian = "big")] pub fn from_le16(x: i16) -> i16 { unsafe { bswap16(x) } } +#[cfg(target_endian = "little")] pub fn from_le32(x: i32) -> i32 { x } +#[cfg(target_endian = "big")] pub fn from_le32(x: i32) -> i32 { unsafe { bswap32(x) } } +#[cfg(target_endian = "little")] pub fn from_le64(x: i64) -> i64 { x } +#[cfg(target_endian = "big")] pub fn from_le64(x: i64) -> i64 { unsafe { bswap64(x) } } + +#[cfg(target_endian = "little")] pub fn from_be16(x: i16) -> i16 { unsafe { bswap16(x) } } +#[cfg(target_endian = "big")] pub fn from_be16(x: i16) -> i16 { x } +#[cfg(target_endian = "little")] pub fn from_be32(x: i32) -> i32 { unsafe { bswap32(x) } } +#[cfg(target_endian = "big")] pub fn from_be32(x: i32) -> i32 { x } +#[cfg(target_endian = "little")] pub fn from_be64(x: i64) -> i64 { unsafe { bswap64(x) } } +#[cfg(target_endian = "big")] pub fn from_be64(x: i64) -> i64 { x } /// `TypeId` represents a globally unique identifier for a type #[lang="type_id"] // This needs to be kept in lockstep with the code in trans/intrinsic.rs and