Add simd_neg platform intrinsic
This commit is contained in:
parent
146f574560
commit
0fa158b38f
7 changed files with 60 additions and 17 deletions
|
@ -1628,7 +1628,7 @@ unsupported {} from `{}` with element `{}` of size `{}` to `{}`"#,
|
|||
out_elem
|
||||
);
|
||||
}
|
||||
macro_rules! arith {
|
||||
macro_rules! arith_bin {
|
||||
($($name: ident: $($($p: ident),* => $call: ident),*;)*) => {
|
||||
$(if name == sym::$name {
|
||||
match in_elem.kind() {
|
||||
|
@ -1644,7 +1644,7 @@ unsupported {} from `{}` with element `{}` of size `{}` to `{}`"#,
|
|||
})*
|
||||
}
|
||||
}
|
||||
arith! {
|
||||
arith_bin! {
|
||||
simd_add: Uint, Int => add, Float => fadd;
|
||||
simd_sub: Uint, Int => sub, Float => fsub;
|
||||
simd_mul: Uint, Int => mul, Float => fmul;
|
||||
|
@ -1659,6 +1659,25 @@ unsupported {} from `{}` with element `{}` of size `{}` to `{}`"#,
|
|||
simd_fmin: Float => minnum;
|
||||
|
||||
}
|
||||
macro_rules! arith_un {
|
||||
($($name: ident: $($($p: ident),* => $call: ident),*;)*) => {
|
||||
$(if name == sym::$name {
|
||||
match in_elem.kind() {
|
||||
$($(ty::$p(_))|* => {
|
||||
return Ok(bx.$call(args[0].immediate()))
|
||||
})*
|
||||
_ => {},
|
||||
}
|
||||
require!(false,
|
||||
"unsupported operation on `{}` with element `{}`",
|
||||
in_ty,
|
||||
in_elem)
|
||||
})*
|
||||
}
|
||||
}
|
||||
arith_un! {
|
||||
simd_neg: Int => neg, Float => fneg;
|
||||
}
|
||||
|
||||
if name == sym::simd_saturating_add || name == sym::simd_saturating_sub {
|
||||
let lhs = args[0].immediate();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue