Skip to content

Commit 24aa1f4

Browse files
authored
Merge pull request #2 from rust-lang/feature/initial-types
Feature/initial types
2 parents 8ee9cba + cfda50a commit 24aa1f4

27 files changed

+963
-0
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/target
2+
Cargo.lock

Cargo.toml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[workspace]
2+
3+
members = [
4+
"crates/core_simd",
5+
]

crates/core_simd/Cargo.toml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[package]
2+
name = "core_simd"
3+
version = "0.1.0"
4+
authors = ["Caleb Zulawski <[email protected]>"]
5+
edition = "2018"

crates/core_simd/src/fmt.rs

+105
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
macro_rules! debug_wrapper {
2+
{ $($trait:ident => $name:ident,)* } => {
3+
$(
4+
pub(crate) fn $name<T: core::fmt::$trait>(slice: &[T], f: &mut core::fmt::Formatter) -> core::fmt::Result {
5+
#[repr(transparent)]
6+
struct Wrapper<'a, T: core::fmt::$trait>(&'a T);
7+
8+
impl<T: core::fmt::$trait> core::fmt::Debug for Wrapper<'_, T> {
9+
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
10+
self.0.fmt(f)
11+
}
12+
}
13+
14+
f.debug_list()
15+
.entries(slice.iter().map(|x| Wrapper(x)))
16+
.finish()
17+
}
18+
)*
19+
}
20+
}
21+
22+
debug_wrapper! {
23+
Debug => format,
24+
Binary => format_binary,
25+
LowerExp => format_lower_exp,
26+
UpperExp => format_upper_exp,
27+
Octal => format_octal,
28+
LowerHex => format_lower_hex,
29+
UpperHex => format_upper_hex,
30+
}
31+
32+
macro_rules! impl_fmt_trait {
33+
{ $($type:ty => $(($trait:ident, $format:ident)),*;)* } => {
34+
$( // repeat type
35+
$( // repeat trait
36+
impl core::fmt::$trait for $type {
37+
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
38+
$format(self.as_ref(), f)
39+
}
40+
}
41+
)*
42+
)*
43+
};
44+
{ integers: $($type:ty,)* } => {
45+
impl_fmt_trait! {
46+
$($type =>
47+
(Debug, format),
48+
(Binary, format_binary),
49+
(LowerExp, format_lower_exp),
50+
(UpperExp, format_upper_exp),
51+
(Octal, format_octal),
52+
(LowerHex, format_lower_hex),
53+
(UpperHex, format_upper_hex);
54+
)*
55+
}
56+
};
57+
{ floats: $($type:ty,)* } => {
58+
impl_fmt_trait! {
59+
$($type =>
60+
(Debug, format),
61+
(LowerExp, format_lower_exp),
62+
(UpperExp, format_upper_exp);
63+
)*
64+
}
65+
};
66+
{ masks: $($type:ty,)* } => {
67+
impl_fmt_trait! {
68+
$($type =>
69+
(Debug, format);
70+
)*
71+
}
72+
}
73+
}
74+
75+
impl_fmt_trait! {
76+
integers:
77+
crate::u8x8, crate::u8x16, crate::u8x32, crate::u8x64,
78+
crate::i8x8, crate::i8x16, crate::i8x32, crate::i8x64,
79+
crate::u16x4, crate::u16x8, crate::u16x16, crate::u16x32,
80+
crate::i16x4, crate::i16x8, crate::i16x16, crate::i16x32,
81+
crate::u32x2, crate::u32x4, crate::u32x8, crate::u32x16,
82+
crate::i32x2, crate::i32x4, crate::i32x8, crate::i32x16,
83+
crate::u64x2, crate::u64x4, crate::u64x8,
84+
crate::i64x2, crate::i64x4, crate::i64x8,
85+
crate::u128x2, crate::u128x4,
86+
crate::i128x2, crate::i128x4,
87+
crate::usizex2, crate::usizex4, crate::usizex8,
88+
crate::isizex2, crate::isizex4, crate::isizex8,
89+
}
90+
91+
impl_fmt_trait! {
92+
floats:
93+
crate::f32x2, crate::f32x4, crate::f32x8, crate::f32x16,
94+
crate::f64x2, crate::f64x4, crate::f64x8,
95+
}
96+
97+
impl_fmt_trait! {
98+
masks:
99+
crate::mask8x8, crate::mask8x16, crate::mask8x32, crate::mask8x64,
100+
crate::mask16x4, crate::mask16x8, crate::mask16x16, crate::mask16x32,
101+
crate::mask32x2, crate::mask32x4, crate::mask32x8, crate::mask32x16,
102+
crate::mask64x2, crate::mask64x4, crate::mask64x8,
103+
crate::mask128x2, crate::mask128x4,
104+
crate::masksizex2, crate::masksizex4, crate::masksizex8,
105+
}

crates/core_simd/src/lib.rs

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#![no_std]
2+
#![feature(repr_simd)]
3+
#![warn(missing_docs)]
4+
//! Portable SIMD module.
5+
6+
#[macro_use]
7+
mod macros;
8+
9+
mod fmt;
10+
11+
mod masks;
12+
pub use masks::*;
13+
14+
mod vectors_u8;
15+
pub use vectors_u8::*;
16+
mod vectors_u16;
17+
pub use vectors_u16::*;
18+
mod vectors_u32;
19+
pub use vectors_u32::*;
20+
mod vectors_u64;
21+
pub use vectors_u64::*;
22+
mod vectors_u128;
23+
pub use vectors_u128::*;
24+
mod vectors_usize;
25+
pub use vectors_usize::*;
26+
27+
mod vectors_i8;
28+
pub use vectors_i8::*;
29+
mod vectors_i16;
30+
pub use vectors_i16::*;
31+
mod vectors_i32;
32+
pub use vectors_i32::*;
33+
mod vectors_i64;
34+
pub use vectors_i64::*;
35+
mod vectors_i128;
36+
pub use vectors_i128::*;
37+
mod vectors_isize;
38+
pub use vectors_isize::*;
39+
40+
mod vectors_f32;
41+
pub use vectors_f32::*;
42+
mod vectors_f64;
43+
pub use vectors_f64::*;
44+
45+
mod vectors_mask8;
46+
pub use vectors_mask8::*;
47+
mod vectors_mask16;
48+
pub use vectors_mask16::*;
49+
mod vectors_mask32;
50+
pub use vectors_mask32::*;
51+
mod vectors_mask64;
52+
pub use vectors_mask64::*;
53+
mod vectors_mask128;
54+
pub use vectors_mask128::*;
55+
mod vectors_masksize;
56+
pub use vectors_masksize::*;

0 commit comments

Comments
 (0)