Skip to content

Commit c0bb36e

Browse files
lu-zeroAmanieu
authored andcommitted
Add vec_xl_len and vec_xst_len
They are powerpc64-only.
1 parent 6381cf7 commit c0bb36e

File tree

5 files changed

+350
-182
lines changed

5 files changed

+350
-182
lines changed

crates/core_arch/src/powerpc/altivec.rs

+3-180
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ use crate::{core_arch::simd::*, intrinsics::simd::*, mem, mem::transmute};
1818
#[cfg(test)]
1919
use stdarch_test::assert_instr;
2020

21+
use super::macros::*;
22+
2123
types! {
2224
/// PowerPC-specific 128-bit wide vector of sixteen packed `i8`
2325
#[unstable(feature = "stdarch_powerpc", issue = "111145")]
@@ -395,183 +397,8 @@ extern "C" {
395397
fn vrfin(a: vector_float) -> vector_float;
396398
}
397399

398-
macro_rules! s_t_l {
399-
(i32x4) => {
400-
vector_signed_int
401-
};
402-
(i16x8) => {
403-
vector_signed_short
404-
};
405-
(i8x16) => {
406-
vector_signed_char
407-
};
408-
409-
(u32x4) => {
410-
vector_unsigned_int
411-
};
412-
(u16x8) => {
413-
vector_unsigned_short
414-
};
415-
(u8x16) => {
416-
vector_unsigned_char
417-
};
418-
419-
(f32x4) => {
420-
vector_float
421-
};
422-
}
423-
424-
macro_rules! t_t_l {
425-
(i32) => {
426-
vector_signed_int
427-
};
428-
(i16) => {
429-
vector_signed_short
430-
};
431-
(i8) => {
432-
vector_signed_char
433-
};
434-
435-
(u32) => {
436-
vector_unsigned_int
437-
};
438-
(u16) => {
439-
vector_unsigned_short
440-
};
441-
(u8) => {
442-
vector_unsigned_char
443-
};
444-
445-
(f32) => {
446-
vector_float
447-
};
448-
}
449-
450-
macro_rules! t_t_s {
451-
(i32) => {
452-
i32x4
453-
};
454-
(i16) => {
455-
i16x8
456-
};
457-
(i8) => {
458-
i8x16
459-
};
460-
461-
(u32) => {
462-
u32x4
463-
};
464-
(u16) => {
465-
u16x8
466-
};
467-
(u8) => {
468-
u8x16
469-
};
470-
471-
(f32) => {
472-
f32x4
473-
};
474-
}
475-
476-
macro_rules! t_u {
477-
(vector_bool_char) => {
478-
vector_unsigned_char
479-
};
480-
(vector_bool_short) => {
481-
vector_unsigned_short
482-
};
483-
(vector_bool_int) => {
484-
vector_unsigned_int
485-
};
486-
(vector_unsigned_char) => {
487-
vector_unsigned_char
488-
};
489-
(vector_unsigned_short) => {
490-
vector_unsigned_short
491-
};
492-
(vector_unsigned_int) => {
493-
vector_unsigned_int
494-
};
495-
(vector_signed_char) => {
496-
vector_unsigned_char
497-
};
498-
(vector_signed_short) => {
499-
vector_unsigned_short
500-
};
501-
(vector_signed_int) => {
502-
vector_unsigned_int
503-
};
504-
(vector_float) => {
505-
vector_unsigned_int
506-
};
507-
}
508-
509-
macro_rules! t_b {
510-
(vector_bool_char) => {
511-
vector_bool_char
512-
};
513-
(vector_bool_short) => {
514-
vector_bool_short
515-
};
516-
(vector_bool_int) => {
517-
vector_bool_int
518-
};
519-
(vector_signed_char) => {
520-
vector_bool_char
521-
};
522-
(vector_signed_short) => {
523-
vector_bool_short
524-
};
525-
(vector_signed_int) => {
526-
vector_bool_int
527-
};
528-
(vector_unsigned_char) => {
529-
vector_bool_char
530-
};
531-
(vector_unsigned_short) => {
532-
vector_bool_short
533-
};
534-
(vector_unsigned_int) => {
535-
vector_bool_int
536-
};
537-
(vector_float) => {
538-
vector_bool_int
539-
};
540-
}
541-
542-
macro_rules! impl_from {
543-
($s: ident) => {
544-
#[unstable(feature = "stdarch_powerpc", issue = "111145")]
545-
impl From<$s> for s_t_l!($s) {
546-
fn from (v: $s) -> Self {
547-
unsafe {
548-
transmute(v)
549-
}
550-
}
551-
}
552-
};
553-
($($s: ident),*) => {
554-
$(
555-
impl_from! { $s }
556-
)*
557-
};
558-
}
559-
560400
impl_from! { i8x16, u8x16, i16x8, u16x8, i32x4, u32x4, f32x4 }
561401

562-
macro_rules! impl_neg {
563-
($s: ident : $zero: expr) => {
564-
#[unstable(feature = "stdarch_powerpc", issue = "111145")]
565-
impl crate::ops::Neg for s_t_l!($s) {
566-
type Output = s_t_l!($s);
567-
fn neg(self) -> Self::Output {
568-
let zero = $s::splat($zero);
569-
unsafe { transmute(simd_sub(zero, transmute(self))) }
570-
}
571-
}
572-
};
573-
}
574-
575402
impl_neg! { i8x16 : 0 }
576403
impl_neg! { i16x8 : 0 }
577404
impl_neg! { i32x4 : 0 }
@@ -4641,11 +4468,7 @@ pub use self::endian::*;
46414468

46424469
#[cfg(test)]
46434470
mod tests {
4644-
#[cfg(target_arch = "powerpc")]
4645-
use crate::core_arch::arch::powerpc::*;
4646-
4647-
#[cfg(target_arch = "powerpc64")]
4648-
use crate::core_arch::arch::powerpc64::*;
4471+
use super::*;
46494472

46504473
use std::mem::transmute;
46514474

crates/core_arch/src/powerpc/macros.rs

+185
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,188 @@ macro_rules! impl_vec_trait {
122122
impl_vec_trait!{ [$Trait $m]+ $w (vector_signed_int, vector_signed_int) -> vector_signed_int }
123123
}
124124
}
125+
126+
macro_rules! s_t_l {
127+
(i32x4) => {
128+
vector_signed_int
129+
};
130+
(i16x8) => {
131+
vector_signed_short
132+
};
133+
(i8x16) => {
134+
vector_signed_char
135+
};
136+
137+
(u32x4) => {
138+
vector_unsigned_int
139+
};
140+
(u16x8) => {
141+
vector_unsigned_short
142+
};
143+
(u8x16) => {
144+
vector_unsigned_char
145+
};
146+
147+
(f32x4) => {
148+
vector_float
149+
};
150+
}
151+
152+
macro_rules! t_t_l {
153+
(i32) => {
154+
vector_signed_int
155+
};
156+
(i16) => {
157+
vector_signed_short
158+
};
159+
(i8) => {
160+
vector_signed_char
161+
};
162+
163+
(u32) => {
164+
vector_unsigned_int
165+
};
166+
(u16) => {
167+
vector_unsigned_short
168+
};
169+
(u8) => {
170+
vector_unsigned_char
171+
};
172+
173+
(f32) => {
174+
vector_float
175+
};
176+
}
177+
178+
macro_rules! t_t_s {
179+
(i32) => {
180+
i32x4
181+
};
182+
(i16) => {
183+
i16x8
184+
};
185+
(i8) => {
186+
i8x16
187+
};
188+
189+
(u32) => {
190+
u32x4
191+
};
192+
(u16) => {
193+
u16x8
194+
};
195+
(u8) => {
196+
u8x16
197+
};
198+
199+
(f32) => {
200+
f32x4
201+
};
202+
}
203+
204+
macro_rules! t_u {
205+
(vector_bool_char) => {
206+
vector_unsigned_char
207+
};
208+
(vector_bool_short) => {
209+
vector_unsigned_short
210+
};
211+
(vector_bool_int) => {
212+
vector_unsigned_int
213+
};
214+
(vector_unsigned_char) => {
215+
vector_unsigned_char
216+
};
217+
(vector_unsigned_short) => {
218+
vector_unsigned_short
219+
};
220+
(vector_unsigned_int) => {
221+
vector_unsigned_int
222+
};
223+
(vector_signed_char) => {
224+
vector_unsigned_char
225+
};
226+
(vector_signed_short) => {
227+
vector_unsigned_short
228+
};
229+
(vector_signed_int) => {
230+
vector_unsigned_int
231+
};
232+
(vector_float) => {
233+
vector_unsigned_int
234+
};
235+
}
236+
237+
macro_rules! t_b {
238+
(vector_bool_char) => {
239+
vector_bool_char
240+
};
241+
(vector_bool_short) => {
242+
vector_bool_short
243+
};
244+
(vector_bool_int) => {
245+
vector_bool_int
246+
};
247+
(vector_signed_char) => {
248+
vector_bool_char
249+
};
250+
(vector_signed_short) => {
251+
vector_bool_short
252+
};
253+
(vector_signed_int) => {
254+
vector_bool_int
255+
};
256+
(vector_unsigned_char) => {
257+
vector_bool_char
258+
};
259+
(vector_unsigned_short) => {
260+
vector_bool_short
261+
};
262+
(vector_unsigned_int) => {
263+
vector_bool_int
264+
};
265+
(vector_float) => {
266+
vector_bool_int
267+
};
268+
}
269+
270+
macro_rules! impl_from {
271+
($s: ident) => {
272+
#[unstable(feature = "stdarch_powerpc", issue = "111145")]
273+
impl From<$s> for s_t_l!($s) {
274+
fn from (v: $s) -> Self {
275+
unsafe {
276+
transmute(v)
277+
}
278+
}
279+
}
280+
};
281+
($($s: ident),*) => {
282+
$(
283+
impl_from! { $s }
284+
)*
285+
};
286+
}
287+
288+
macro_rules! impl_neg {
289+
($s: ident : $zero: expr) => {
290+
#[unstable(feature = "stdarch_powerpc", issue = "111145")]
291+
impl crate::ops::Neg for s_t_l!($s) {
292+
type Output = s_t_l!($s);
293+
fn neg(self) -> Self::Output {
294+
let zero = $s::splat($zero);
295+
unsafe { transmute(simd_sub(zero, transmute(self))) }
296+
}
297+
}
298+
};
299+
}
300+
301+
pub(crate) use impl_from;
302+
pub(crate) use impl_neg;
303+
pub(crate) use impl_vec_trait;
304+
pub(crate) use s_t_l;
305+
pub(crate) use t_b;
306+
pub(crate) use t_t_l;
307+
pub(crate) use t_t_s;
308+
pub(crate) use t_u;
309+
pub(crate) use test_impl;

0 commit comments

Comments
 (0)