diff options
| author | Jake Goulding <jake.goulding@gmail.com> | 2016-05-06 09:31:11 -0400 |
|---|---|---|
| committer | Jake Goulding <jake.goulding@gmail.com> | 2016-05-19 13:55:13 -0400 |
| commit | bc7595c8abbf4e3b737e926d61814686e0ebda77 (patch) | |
| tree | 3ead763b6c18622639409543dc3a46ba1e6374c1 /src/libcore/num | |
| parent | 2fb6f8e2c94a7041877ed8460f2621974c5233f7 (diff) | |
| download | rust-bc7595c8abbf4e3b737e926d61814686e0ebda77.tar.gz rust-bc7595c8abbf4e3b737e926d61814686e0ebda77.zip | |
Support 16-bit pointers as well as i/usize
This is based on the original work of Dylan McKay for the [avr-rust project][ar]. [ar]: https://github.com/avr-rust/rust
Diffstat (limited to 'src/libcore/num')
| -rw-r--r-- | src/libcore/num/isize.rs | 2 | ||||
| -rw-r--r-- | src/libcore/num/mod.rs | 21 | ||||
| -rw-r--r-- | src/libcore/num/usize.rs | 2 | ||||
| -rw-r--r-- | src/libcore/num/wrapping.rs | 6 |
4 files changed, 31 insertions, 0 deletions
diff --git a/src/libcore/num/isize.rs b/src/libcore/num/isize.rs index de5b1777f93..86bcef4011d 100644 --- a/src/libcore/num/isize.rs +++ b/src/libcore/num/isize.rs @@ -14,6 +14,8 @@ #![stable(feature = "rust1", since = "1.0.0")] +#[cfg(target_pointer_width = "16")] +int_module! { isize, 16 } #[cfg(target_pointer_width = "32")] int_module! { isize, 32 } #[cfg(target_pointer_width = "64")] diff --git a/src/libcore/num/mod.rs b/src/libcore/num/mod.rs index 9b6f6698def..5988a6375d4 100644 --- a/src/libcore/num/mod.rs +++ b/src/libcore/num/mod.rs @@ -1176,6 +1176,15 @@ impl i64 { intrinsics::mul_with_overflow } } +#[cfg(target_pointer_width = "16")] +#[lang = "isize"] +impl isize { + int_impl! { i16, u16, 16, + intrinsics::add_with_overflow, + intrinsics::sub_with_overflow, + intrinsics::mul_with_overflow } +} + #[cfg(target_pointer_width = "32")] #[lang = "isize"] impl isize { @@ -2188,6 +2197,18 @@ impl u64 { intrinsics::mul_with_overflow } } +#[cfg(target_pointer_width = "16")] +#[lang = "usize"] +impl usize { + uint_impl! { u16, 16, + intrinsics::ctpop, + intrinsics::ctlz, + intrinsics::cttz, + intrinsics::bswap, + intrinsics::add_with_overflow, + intrinsics::sub_with_overflow, + intrinsics::mul_with_overflow } +} #[cfg(target_pointer_width = "32")] #[lang = "usize"] impl usize { diff --git a/src/libcore/num/usize.rs b/src/libcore/num/usize.rs index 0c7d16a41bc..685c52e271e 100644 --- a/src/libcore/num/usize.rs +++ b/src/libcore/num/usize.rs @@ -14,6 +14,8 @@ #![stable(feature = "rust1", since = "1.0.0")] +#[cfg(target_pointer_width = "16")] +uint_module! { usize, 16 } #[cfg(target_pointer_width = "32")] uint_module! { usize, 32 } #[cfg(target_pointer_width = "64")] diff --git a/src/libcore/num/wrapping.rs b/src/libcore/num/wrapping.rs index 04e8bc4913b..4857817e84e 100644 --- a/src/libcore/num/wrapping.rs +++ b/src/libcore/num/wrapping.rs @@ -292,6 +292,12 @@ wrapping_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 } mod shift_max { #![allow(non_upper_case_globals)] + #[cfg(target_pointer_width = "16")] + mod platform { + pub const usize: u32 = super::u16; + pub const isize: u32 = super::i16; + } + #[cfg(target_pointer_width = "32")] mod platform { pub const usize: u32 = super::u32; |
