simd_add: TyUint, TyInt => add, TyFloat => fadd;
simd_sub: TyUint, TyInt => sub, TyFloat => fsub;
simd_mul: TyUint, TyInt => mul, TyFloat => fmul;
- simd_div: TyFloat => fdiv;
+ simd_div: TyUint => udiv, TyInt => sdiv, TyFloat => fdiv;
+ simd_rem: TyUint => urem, TyInt => srem, TyFloat => frem;
simd_shl: TyUint, TyInt => shl;
simd_shr: TyUint => lshr, TyInt => ashr;
simd_and: TyUint, TyInt => and;
fn simd_sub<T>(x: T, y: T) -> T;
fn simd_mul<T>(x: T, y: T) -> T;
fn simd_div<T>(x: T, y: T) -> T;
+ fn simd_rem<T>(x: T, y: T) -> T;
fn simd_shl<T>(x: T, y: T) -> T;
fn simd_shr<T>(x: T, y: T) -> T;
fn simd_and<T>(x: T, y: T) -> T;
simd_mul(x, x);
simd_mul(y, y);
simd_mul(z, z);
-
+ simd_div(x, x);
+ simd_div(y, y);
simd_div(z, z);
+ simd_rem(x, x);
+ simd_rem(y, y);
+ simd_rem(z, z);
simd_shl(x, x);
simd_shl(y, y);
//~^ ERROR expected SIMD input type, found non-SIMD `i32`
- simd_div(x, x);
-//~^ ERROR unsupported operation on `i32x4` with element `i32`
- simd_div(y, y);
-//~^ ERROR unsupported operation on `u32x4` with element `u32`
simd_shl(z, z);
//~^ ERROR unsupported operation on `f32x4` with element `f32`
simd_shr(z, z);
fn simd_sub<T>(x: T, y: T) -> T;
fn simd_mul<T>(x: T, y: T) -> T;
fn simd_div<T>(x: T, y: T) -> T;
+ fn simd_rem<T>(x: T, y: T) -> T;
fn simd_shl<T>(x: T, y: T) -> T;
fn simd_shr<T>(x: T, y: T) -> T;
fn simd_and<T>(x: T, y: T) -> T;
all_eq!(simd_sub(z2, z1), f32x4(1.0, 1.0, 1.0, 1.0));
all_eq!(simd_sub(z1, z2), f32x4(-1.0, -1.0, -1.0, -1.0));
+ all_eq!(simd_div(x1, x1), i32x4(1, 1, 1, 1));
+ all_eq!(simd_div(i32x4(2, 4, 6, 8), i32x4(2, 2, 2, 2)), x1);
+ all_eq!(simd_div(y1, y1), u32x4(1, 1, 1, 1));
+ all_eq!(simd_div(u32x4(2, 4, 6, 8), u32x4(2, 2, 2, 2)), y1);
+ all_eq!(simd_div(z1, z1), f32x4(1.0, 1.0, 1.0, 1.0));
all_eq!(simd_div(z1, z2), f32x4(1.0/2.0, 2.0/3.0, 3.0/4.0, 4.0/5.0));
all_eq!(simd_div(z2, z1), f32x4(2.0/1.0, 3.0/2.0, 4.0/3.0, 5.0/4.0));
+ all_eq!(simd_rem(x1, x1), i32x4(0, 0, 0, 0));
+ all_eq!(simd_rem(x2, x1), i32x4(0, 1, 1, 1));
+ all_eq!(simd_rem(y1, y1), u32x4(0, 0, 0, 0));
+ all_eq!(simd_rem(y2, y1), u32x4(0, 1, 1, 1));
+ all_eq!(simd_rem(z1, z1), f32x4(0.0, 0.0, 0.0, 0.0));
+ all_eq!(simd_rem(z1, z2), z1);
+ all_eq!(simd_rem(z2, z1), f32x4(0.0, 1.0, 1.0, 1.0));
+
all_eq!(simd_shl(x1, x2), i32x4(1 << 2, 2 << 3, 3 << 4, 4 << 5));
all_eq!(simd_shl(x2, x1), i32x4(2 << 1, 3 << 2, 4 << 3, 5 << 4));
all_eq!(simd_shl(y1, y2), u32x4(1 << 2, 2 << 3, 3 << 4, 4 << 5));