581 Commits

Author SHA1 Message Date
Sparrow Li
fd29f9602c
Add vmul_n, vmul_lane, vmulx neon instructions (#1147) 2021-04-30 21:09:41 +01:00
Sparrow Li
07f1d0cae3
Add vmla_n, vmla_lane, vmls_n, vmls_lane neon instructions (#1145) 2021-04-28 22:59:41 +01:00
Sparrow Li
8852d07441
add vcopy neon instructions (#1139) 2021-04-24 01:49:11 +01:00
Christopher Serr
a43f92a181
Add vrndn neon instructions (#1086)
This adds the neon instructions for lane-wise rounding without actually
converting the lanes to integers.
2021-04-22 06:08:40 +01:00
Sparrow Li
de3e8f72c5
Add vqdmul* neon instructions (#1130) 2021-04-21 15:27:08 +01:00
surechen
20c0120362
add neon instruction vaddlv_* (#1129) 2021-04-20 15:19:04 +01:00
Sparrow Li
6354de5993
Add vrshl, vrshr, vrshrn, vrsra, vsra neon instructions (#1127) 2021-04-19 17:49:44 +01:00
surechen
d46e0086e4
add neon instruction vfma_n_* (#1122) 2021-04-17 17:45:54 +01:00
Sebastian Thiel
43126c3f65
[DRAFT] intrinsics for all architectures appear in rustdoc (#1104) 2021-04-17 13:46:33 +01:00
Sparrow Li
e792dfd02c
add vqshl, vqshrn, vqshrun neon instructions (#1120) 2021-04-16 13:22:39 +01:00
Amanieu d'Antras
0073d6ace3
Avoid using ebx as an asm! operand (#1121)
It is sometimes reserved by LLVM.
2021-04-16 13:20:00 +01:00
Sparrow Li
23f45cc955
Add vqrsh* neon instructions (#1119) 2021-04-15 12:29:04 +01:00
liushuyu
33afae1df7
aarch64: add uzp1, uzp2 instructions (#1118) 2021-04-15 12:21:31 +01:00
scottmcm
4e5d5c2e56
Typo fix: fist -> first (#1117) 2021-04-14 21:13:14 +01:00
surechen
aaaa9335eb
add neon instruction vfma (#1116) 2021-04-14 15:34:53 +01:00
Amanieu d'Antras
6405058a6f
Don't import from core (#1115)
This breaks when core_arch is included as a module in core.
2021-04-13 04:31:37 +01:00
Sparrow Li
88a5de08cb
Allow primitive types in the code generator and add vdup instructions (#1114) 2021-04-12 14:08:26 +01:00
Amanieu d'Antras
1bce95c732
Remove remaining uses of #[rustc_args_required_const] (#1113) 2021-04-11 14:22:52 +01:00
Sparrow Li
5ee0274cef
add vshl and vshr neon instructions (#1111) 2021-04-09 08:49:23 +01:00
surechen
a3b5ef2b0c
add neon instruction vsubw_* and vsubl_* (#1112) 2021-04-08 15:22:35 +01:00
Alex Crichton
c6356546c0
Updates for wasm simd support (#1110)
* Uncomment some i64-related instruction assertions now that LLVM
  supports the opcodes.
* Fix the codegen for `{i,u}32x4_trunc_sat_f32x4`. This was originally
  introduced using `simd_cast` but that inherits LLVM's UB related to
  float-to-integer casts out of bounds. Since the original inception of
  these intrinsics in LLVM dedicated intrinsics for the wasm
  instructions have been added, so this swithces the implementation to
  using those.
* Uncomment `f64x2_convert_low_i32x4` instruction assertion and add a
  test now that this is implemented in Wasmtime.
2021-04-07 17:05:34 +01:00
Joshua Nelson
7bab2c0695
Deny 2018 idiom lints (#1108)
This lint is allow by default, which is why this wasn't spotted earlier.
It's denied by rust-lang/rust, so it's good to warn about it here so it
can be fixed more quickly.
2021-04-07 05:46:39 +01:00
surechen
e6a81b7566
add neon instruction vmaxnm_f* vpmaxnm_f* vminnm_f* vpminnm_f* (#1105) 2021-04-06 06:57:05 +01:00
Sparrow Li
6201670dd2
Enable constant parameters in the code generator and add vext instructions (#1106) 2021-04-02 22:02:22 +01:00
Sparrow Li
7b21d85a41
add vmovn_high, vrbit, vrnd, vsubhn neon instructions (#1103) 2021-03-31 15:48:58 +01:00
surechen
ef9ec33482
add support for neon instruction vqabs_* (#1102) 2021-03-30 12:22:38 +01:00
Sparrow Li
64f84788c9
add vreinterpret neon instructions (#1101) 2021-03-30 06:51:01 +01:00
surechen
f9e5dfdd66
support neon instruction vabdl_* and vabdl_high_* (#1100) 2021-03-29 11:17:36 +01:00
Sparrow Li
e83d05a3c0
add simd_neg platform intrinsic and vneg, vqneg neon instructions (#1099) 2021-03-29 03:43:36 +01:00
surechen
182d7593f4
support for neon instructions vabal_* and vabal_high_* (#1097) 2021-03-27 16:28:36 +00:00
Amanieu d'Antras
3769d5df36
Remove unused constify macros (#1098) 2021-03-26 14:34:32 +00:00
Alex Crichton
3bbb381ac1
Tweak names of wasm SIMD intrinsics (#1096) 2021-03-25 15:11:30 +00:00
SparrowLii
770ced9a69 add vzip1, vzip2 instructions 2021-03-23 05:50:03 +00:00
SparrowLii
91bed9bd0c correct instruction names 2021-03-23 05:50:03 +00:00
SparrowLii
69bb74bca6 add vtrn1 and vtrn2 neon instructions 2021-03-23 05:50:03 +00:00
Alex Crichton
7599fd5310 Add static assertions for all const generics 2021-03-21 09:24:39 +00:00
Alex Crichton
60e8d7766b Unconditionally expose wasm atomic intrinsics
While they're not very useful in single-threaded mode this makes them
more useful for building libraries because you don't have to always
recompile the standard library to get the desired effect. Additionally
it helps us enable tests on CI for these functions, since the
instructions will now validate without shared memory (thankfully!).
2021-03-21 09:24:39 +00:00
Alex Crichton
8ed0d3cbd5 More wasm SIMD updates
* Sync with the latest LLVM which has a few new intrinsic names
* Move explicit tests back to `assert_instr` since `assert_instr` now
  supports specifying const-generic arguments inline.
* Enable tests where wasmtime implements the instruction as well as LLVM.
* Ensure there are tests for all functions that can be tested at this
  time (those that aren't unimplemented in wasmtime).

There's still a number of `assert_instr` tests that are commented out.
These are either because they're unimplemented in wasmtime at the moment
or LLVM doesn't have an implementation for the instruction yet.
2021-03-21 09:24:39 +00:00
NatrixAeria
c987d91239
Fix WebAssembly Atomic intrinsic names (#1093)
Due to commit 902ea588eab849e7254d3bc76abf32d833ac0dd6 in the
llvm-project i32.atomic.wait and i64.atomic.wait got renamed to
memory.atomic.wait32 and memory.atomic.wait64.
2021-03-21 00:53:03 +00:00
Sparrow Li
63facc4b68
Add vmull, vmull_high, vmlal, vmlal_high, vmlsl, vmlsl_high neon instructions (#1091) 2021-03-20 22:35:19 +00:00
surechen
ce1027d7d5
support s64|u64 for neon instruction vqadd and vqsub (#1090) 2021-03-20 00:55:11 +00:00
surechen
7947cb8bac
add neon instruction vmov_n_* and vmovq_n_* (#1085) 2021-03-17 09:34:49 +00:00
Sparrow Li
4773f9b1d2
Support three parameters in the code generator and add vmla and vmls instructions (#1088) 2021-03-17 09:34:21 +00:00
Amanieu d'Antras
a1e151e838
Convert all uses of llvm_asm! to asm! (#1052) 2021-03-17 01:44:35 +00:00
Sparrow Li
7accc82569
add vcvt, vcvta, vcvtn, vcvtm, vcvtp neon instructions (#1084) 2021-03-16 14:30:05 +00:00
Sparrow Li
bb84df7d9f
implement different types of parameters and double suffixes in code generator (#1083) 2021-03-15 18:45:51 +00:00
surechen
6759925278
add neon instruction vget_low_* and fix vget_high_* (#1082) 2021-03-15 10:00:24 +00:00
surechen
25116fb1eb
add neon instruction vget_high_* (#1074) 2021-03-14 16:03:46 +00:00
Sparrow Li
01c99c1d05
add vcls, vclz, vcagt, vcage, vcalt, vcale neon instructions (#1072) 2021-03-13 21:55:24 +00:00
Amanieu d'Antras
e010da8411
Port all non-x86 uses of rustc_args_required_const to rustc_legacy_const_generics (#1066) 2021-03-13 19:52:30 +00:00