Commit Graph

454 Commits

Author SHA1 Message Date
Jubilee Young
ecc00efee0 impl std::simd::StdFloat
While consulting with Simulacrum on how to make available the float
functions that currently require runtime support for `Simd<f32, N>` and
`Simd<f64, N>`, we realized breaking coherence with the classic approach
of lang items was, since `{core,std}::simd::Simd` is a `ty::Adt`, likely
to be quite a bit nasty. The project group has a long-term plan for how
to get around this kind of issue and move the associated functions into
libcore, but that will likely take time as well. Since all routes
forward are temporally costly, we probably will skip the lang item
approach entirely and go the "proper" route, but in the interests of
having something this year for people to play around with, this
extension trait was whipped up.

For now, while it involves a lot of fairly internal details most users
shouldn't have to care about, I went ahead and fully documented the
situation for any passerby to read on the trait, as the situation is
quite unusual and puzzling to begin with.
2021-12-31 14:22:34 -08:00
Jubilee
4bbef261b6
Merge portable-simd#210 - ./wrap-shifts
Refactor ops.rs with wrapping shifts

This approaches reducing macro nesting in a slightly different way. Instead of just flattening details, make one macro apply another. This allows specifying all details up-front in the first macro invocation, making it easier to audit and refactor in the future.

This refactor also has some functional changes. Only one is a true behavior change, however:
- The visible one is that SIMD shifts are now wrapping, not panicking on overflow
- `core::simd` now has a lot more instances of `#[must_use]`, which merely lints
- div/rem now perform a SIMD check but remain as before, which should improve performance but be invisible
2021-12-30 01:22:01 -08:00
Jubilee Young
a42420583b Use Mask::any in div check 2021-12-23 23:17:13 -08:00
Jubilee Young
bc326a2bbc Refactor ops.rs with a recursive macro
This approaches reducing macro nesting in a slightly different way.
Instead of just flattening details, make one macro apply another.
This allows specifying all details up-front in the first macro
invocation, making it easier to audit and refactor in the future.
2021-12-22 15:37:05 -08:00
Vadim Petrochenkov
35883a7915 Merge commit '533f0fc81ab9ba097779fcd27c8f9ea12261fef5' into psimd 2021-12-17 15:10:53 +08:00
Jubilee Young
533f0fc81a Use relative intrinsics paths for bitmasks 2021-12-10 22:11:27 -08:00
Jubilee Young
5dcd397f47 Finish refactoring ints in ops.rs
This should perform a SIMD check for whether or not we can div/rem,
so that we can panic several times faster!
2021-12-09 13:23:45 -08:00
Jubilee Young
049e8ca7f7 Refactor float arith with #[must_use] 2021-12-08 18:09:46 -08:00
Jubilee Young
8aef340b8b Refactor bitops with #[must_use] 2021-12-08 18:09:32 -08:00
Jubilee Young
b6d0eec3de Wrap bitshifts in ops.rs
For all other operators, we use wrapping logic where applicable.
This is another case it applies. Per rust-lang/rust#91237, we may
wish to specify this as the natural behavior of `simd_{shl,shr}`.
2021-12-08 18:08:18 -08:00
Caleb Zulawski
d9f82f9c4d Remove Select trait 2021-12-04 05:54:15 +00:00
Jubilee Young
af2bc4e3ef Merge commit 'a8385522ade6f67853edac730b5bf164ddb298fd' into simd-remove-autosplats 2021-12-02 18:27:47 -08:00
Jubilee
a8385522ad
Merge portable-simd#195 - portable-simd:trait-ops
Generic `core::ops` for `Simd<T, _>`

In order to maintain type soundness, we need to be sure we only implement an operation for `Simd<T, _> where T: SimdElement`... and also valid for that operation in general. While we could do this purely parametrically, it is more sound to implement the operators directly for the base scalar type arguments and then use type parameters to extend the operators to the "higher order" operations.

This implements that strategy and cleans up `simd::ops` into a few submodules:
- assign.rs: `core::ops::*Assign`
- deref.rs:  `core::ops` impls which "deref" borrowed versions of the arguments
- unary.rs: encloses the logic for unary operators on `Simd`, as unary ops are much simpler

This is possible since everything need not be nested in a single maze of macros anymore. The result simplifies the logic and allows reasoning about what operators are valid based on the expressed trait bounds, and also reduces the size of the trait implementation output in rustdoc, for a huge win of 4 MB off the size of `struct.Simd.html`! This addresses a common user complaint, as the original was over 5.5 MB and capable of crashing browsers!

This also carries a fix for a type-inference-related breakage, by removing the autosplatting (vector + scalar binop) impls, as unfortunately the presence of autosplatting was capable of busting type inference. We will likely need to see results from a Crater run before we can understand how to re-land autosplatting.
2021-12-02 17:41:30 -08:00
Jubilee Young
8003b04323 impl Op<&'_ RHS> for &'_ LHS 2021-12-01 15:45:01 -08:00
Jubilee Young
257fa7aa6d Drop splats for Simd<T, _>
Unfortunately, splatting impls currently break several crates.
Rust needs more time to review possible mitigations, so
drop the impls for the `impl Add<T> for Simd<T, _>` pattern, for now.
2021-12-01 15:40:53 -08:00
Jubilee Young
6094f22ceb impl unary.rs for Simd<{i,u}{8,16,32,64,size}, _>
In order to assure type soundness, these "base" impls
need to go directly on Simd<T, _> for every scalar type argument.
A bit of cleanup of ops.rs is still warranted.
2021-12-01 15:40:46 -08:00
Dean Li
861a6e85e1
Add spectral_norm example from packed_simd 2021-11-28 15:19:01 +08:00
Alexander Ronald Altman
b2dac7124b Uncomment AVX512 byte vector conversions
Resolves my comment in #197, at least for now; #187 is pending but since these are already here, just commented, it seemed to make sense to me to re-enable them anyway.
2021-11-26 13:48:52 -08:00
Jubilee Young
ae612100d2 Generically implement horizontal_{and,or,xor} 2021-11-24 08:07:41 -08:00
Jubilee Young
51ff925925 impl assign.rs<U> for Simd<T, _>
Instead of implementing {Op}Assign traits for individual scalar type args
to Simd<_, _>, use parametric impls that reassert the bounds of the binary op.
2021-11-23 18:11:48 -08:00
Jubilee Young
0a6992f5bf impl deref.rs<&Self> for Simd<T, _>
Instead of implementing each "deref" pattern for every single scalar,
we can use type parameters for Simd operating on &Self.
We can use a macro, but keep it cleaner and more explicit.
2021-11-23 18:11:48 -08:00
Jubilee Young
ced3a05526 Attempt to support to 64 lanes 2021-11-23 15:19:01 -08:00
Jubilee Young
f7b0358573 Sprinkle the crate with #[must_use] 2021-11-14 12:11:35 -08:00
Caleb Zulawski
36e198b97a Use new bitmask intrinsics with byte arrays 2021-11-13 13:22:06 -08:00
Jubilee Young
1ce1c645cf Rewrite Arm transmutes, reading std::arch closer 2021-11-12 16:56:14 -08:00
Jubilee Young
6ddf7ad8e1 Restrict Arm types to Arm v7+
This mostly mirrors the restrictions in std::arch.
It can be loosened slightly with later refactoring.
2021-11-11 11:40:18 -08:00
Jubilee Young
949f71c0dc Deny warnings in CI and fix 2021-11-10 14:40:32 -08:00
Jubilee
081240a663
Merge pull request #175 from rust-lang/feature/more-actions
Delete travis config, move tests to github actions.
2021-11-09 20:12:47 -08:00
Caleb Zulawski
349a61143c Delete travis config, move tests to github actions. 2021-11-10 02:18:41 +00:00
Caleb Zulawski
0ecf9871fc
Merge pull request #181 from rust-lang/rotate_lanes
rotate_{left,right} -> rotate_lanes_{left,right}
2021-11-08 23:01:05 -05:00
Proloy Mishra
d2e87281fc
add Simd::from_slice (#177)
* add `Simd::from_slice`

uses a zeroed initial array and loops so that it can be const.
unfortunately, parameterizing the assert with slice length
needs `#![feature(const_fn_fn_ptr_basics)]` to work.
2021-11-08 17:28:43 -08:00
Caleb Zulawski
4e00aa68c7 rotate_{left,right} -> rotate_lanes_{left,right} 2021-11-06 00:34:23 +00:00
Caleb Zulawski
772bf2090e Hide select impl in sealed trait 2021-10-22 00:10:44 -07:00
Caleb Zulawski
7c2d295a76 Hide mask impl details in sealed trait. 2021-10-22 00:10:44 -07:00
Jubilee Young
ab8eec7cba Fixup import pathing for core
This changes simd_swizzle! to a decl_macro to give it a path,
so it can be imported using a path and not the crate root.
It also adds various uses that were missed and adjusts paths.
2021-10-21 18:20:06 -07:00
Caleb Zulawski
5b4282edcd Improve docs 2021-10-11 13:18:59 -07:00
Caleb Zulawski
765bee6362 Update crates/core_simd/src/swizzle.rs
Co-authored-by: Jubilee <46493976+workingjubilee@users.noreply.github.com>
2021-10-11 13:18:59 -07:00
Caleb Zulawski
cd7ecba19f Remove adt_const_params feature 2021-10-11 13:18:59 -07:00
Caleb Zulawski
37797d9c0a simd_shuffle -> simd_swizzle 2021-10-11 13:18:59 -07:00
Caleb Zulawski
98e4fcae5a Fix macro in core
Co-authored-by: Jubilee <46493976+workingjubilee@users.noreply.github.com>
2021-10-11 13:18:59 -07:00
Caleb Zulawski
10168fb7c4 Add new swizzle API
Expand swizzle API and migrate existing functions. Add rotate_left, rotate_right.

Hide implementation details

Add simd_shuffle macro
2021-10-11 13:18:59 -07:00
Jubilee
a16b481a08 Simplify language for scatter/gather
Co-authored-by: Caleb Zulawski <caleb.zulawski@gmail.com>
2021-10-03 14:35:07 -07:00
Jubilee Young
9be26656d2 Rewrite gather/scatter docs
Headings with # Safety and # Examples are more "std style".
Use terms like "enable" and "disable", rather than "mask" jargon.
2021-10-03 14:33:56 -07:00
Jubilee
01e9816ace docs: fix typo gather -> scatter
Co-authored-by: Jacob Lifshay <programmerjake@gmail.com>
2021-10-03 11:04:58 -07:00
Jubilee Young
6d23662689 Add {gather,scatter}_select_unchecked
This unsafe variant allows the thinnest API, in case LLVM cannot
perform loop-invariant code motion on a hot loop when the safe
form is used.

An unchecked variant could be added to other forms, but doesn't
seem likely to improve anything, since it would just add heavier
codegen.
2021-10-03 11:04:58 -07:00
Jubilee
436ca7f7aa
Add lanes() and associated LANES const 2021-09-29 14:19:45 -07:00
Jubilee Young
b506e3e28e Renovate for Edition 2021
In a still-future edition, `unsafe_op_in_unsafe_fn` may error.
Let's get ahead of that.
2021-09-29 14:11:40 -07:00
Magnus Ulimoen
ec05dfbbf9 Add associated LANES const 2021-09-29 17:20:07 +00:00
Magnus Ulimoen
4fbccafc66 Add lanes() 2021-09-29 16:38:03 +00:00
Jubilee Young
afd7c5a5ee Make sure MaskElement is in bitmasks.rs 2021-09-27 15:27:34 -07:00
Jubilee Young
c2f59483f9 Feature-flag fused mul-add to block libcalls 2021-09-21 19:42:31 -07:00
Jubilee Young
6d3d07abfe Feature-flag doc tests so they run for core 2021-09-21 17:19:35 -07:00
Jubilee Young
8342fe75f2 Cleanup more for std::simd also 2021-09-21 10:31:37 -07:00
Jubilee Young
b25ed7f86d Restructure crate as core module
Aligns module with rust-lang/library/core, creating an... unusual
architecture that is easier to pull in as a module, as core itself can
have no dependencies (as we haven't built core yet).
2021-09-18 23:26:10 -07:00
Caleb Zulawski
8cf7a62e5d
Fix cargo features for nightly (#155)
* Fix cargo features for nightly
2021-09-08 17:01:16 -07:00
Jubilee
d42875302d
Merge pull request #154 from rust-lang/feature/generic-element-type
Change vectors to be generic over element type.
2021-08-17 12:10:44 -07:00
Caleb Zulawski
4aafd8e779 Rename element type variable 2021-08-16 16:38:30 -04:00
Caleb Zulawski
cf653c7b93
Update crates/core_simd/src/vector.rs
Co-authored-by: Jubilee <46493976+workingjubilee@users.noreply.github.com>
2021-08-13 20:40:05 -04:00
Caleb Zulawski
00165ed5be Remove mask aliases 2021-08-07 21:22:10 +00:00
Caleb Zulawski
40142ac034 Remove aliases 2021-08-07 21:15:24 +00:00
Caleb Zulawski
275889f7f4 Remove remaining usage of aliases 2021-08-07 21:06:40 +00:00
Caleb Zulawski
f7f29683a8 Remove aliases from most tests 2021-08-07 20:38:41 +00:00
Caleb Zulawski
88f79d4a6f Remove aliases from op trait impls 2021-08-07 20:20:20 +00:00
Caleb Zulawski
5ed57b4c85 Remove most usage of type aliases 2021-08-07 19:28:27 +00:00
Caleb Zulawski
e11286a362 Remove unused transmute file 2021-08-07 16:53:08 +00:00
Caleb Zulawski
e6d95e4798 Implement comparisons generically 2021-08-07 05:47:54 +00:00
Caleb Zulawski
ea0280539c Implement select generically 2021-08-07 05:19:06 +00:00
Caleb Zulawski
de13b20b27 Convert all masks to a single type 2021-08-07 04:30:24 +00:00
Caleb Zulawski
ddc67e3bf2 Remove Mask trait 2021-08-07 01:17:27 +00:00
Caleb Zulawski
8cc38ae292 Remove Vector trait 2021-08-07 01:16:23 +00:00
Caleb Zulawski
dc4dc99649 Change to various generic impls 2021-08-06 03:45:57 +00:00
Caleb Zulawski
054f25f2b0 Convert all vectors to a single type 2021-08-06 02:31:24 +00:00
Caleb Zulawski
50eb35eb3b
Merge pull request #153 from rust-lang/death-of-the-author
Rename to portable-simd and remove other names
2021-08-05 20:49:45 -04:00
Jubilee Young
2acf204b09 Rename to portable-simd and remove other names
Clean up references to the repo's previous name.
Removes the authors field, which is non-obligatory since RFC 3052.
Better to omit than confound: let git log be our witness.
2021-08-04 23:12:23 -07:00
Caleb Zulawski
cca9102429 Change bitmasks to use less opaque type 2021-07-29 04:55:28 +00:00
Caleb Zulawski
34384b7a68 Add const_evaluatable_checked feature, change to_bitmask to use it, and fix existing std feature 2021-07-28 04:19:31 +00:00
Caleb Zulawski
97c25dd746 Add lane count marker type 2021-07-24 17:37:36 +00:00
Caleb Zulawski
f93bef35f3 Move vector implementation 2021-07-24 17:37:36 +00:00
Caleb Zulawski
529ffe05d6 Use new module naming 2021-07-24 17:37:36 +00:00
Caleb Zulawski
fdd7d6e252 Change as_slice to as_array 2021-07-24 17:37:36 +00:00
Caleb Zulawski
f178dda187 Add as_slice/as_mut_slice to Vector 2021-07-24 17:37:36 +00:00
Caleb Zulawski
c077bf3c07 Rename SimdArray to Vector, remove its generic parameter, and remove LanesAtMost32 2021-07-24 17:37:36 +00:00
Caleb Zulawski
732b7edfab
Add fmt and clippy to CI (#147)
* Add fmt and clippy to CI
* Add rust components
* Fix formatting
2021-07-23 17:43:53 -07:00
Caleb Zulawski
be96995d8d
Add portable_simd unstable feature gate (#141) 2021-07-19 16:13:24 -07:00
Caleb Zulawski
3954b27787
Add conversions between vendor intrinsics (#144)
* Add x86 vendor conversions
* Add wasm32 vendor types
* Add arm vendor types
* Add powerpc vendor types
2021-07-19 15:01:28 -07:00
Miguel Raz Guzmán Macedo
ac749a180b
add matrix_inversion example (#131)
* add matrix_inversion example
2021-07-19 14:58:13 -07:00
Adam Greig
871d588ec4
Add 32-bit SIMD types i/u16x2 and i/u8x4. (#145)
These types are useful for the "SIMD32" instructions available on ARMv6
(except M-class), ARMv7 (M-class with DSP), and ARMv8.
2021-07-19 14:18:29 -07:00
Jubilee
b5ba19577f
Merge pull request #139 from rust-lang/feat/gather
Add SimdArray trait and safe gather/scatter API (rust-lang/stdsimd#139)
This PR has four parts, without which it doesn't make a lot of sense:
-    The introduction of the SimdArray trait for abstraction over vectors.
-    The implementation of private vector-of-pointers types.
-    Using these to allow constructing vectors with SimdArray::gather_{or, or_default, select}.
-    Using these to allow writing vectors using SimdArray::scatter{,_select}.
2021-06-23 20:47:51 -07:00
Jubilee
3872723ead
Merge pull request #138 from rust-lang/feature/various-fns
Add various fns
- Sum/Product traits
- recip/to_degrees/to_radians/min/max/clamp/signum/copysign; rust-lang/stdsimd#14
- mul_add: rust-lang/stdsimd#14, fixes rust-lang/stdsimd#102
2021-06-23 14:19:08 -07:00
Jubilee Young
1529ed43d8 Document and test doubled writes in scatter 2021-06-23 12:13:10 -07:00
Jubilee Young
f38659a46c Add assoc const SimdArray::LANES 2021-06-22 15:28:15 -07:00
Jubilee Young
81ceda8c5b Add SimdArray::scatter{,_select} 2021-06-21 18:18:50 -07:00
Jubilee Young
128b6f5e22 Add SimdArray::gather_{or,or_default,select} 2021-06-21 18:10:28 -07:00
Jubilee Young
2f99cc80d8 Add pointer vectors: SimdConstPtr, SimdMutPtr 2021-06-21 16:15:19 -07:00
Jubilee Young
16765a1021 Introduce SimdArray trait
This provides a general framework for describing relationships
between vector types and scalar types.
2021-06-21 16:15:15 -07:00
Caleb Zulawski
b0a9fe5d07 Extract constant from scalar to_radians as well 2021-06-21 21:11:37 +00:00
Caleb Zulawski
708ae61841 Remove scalar Sum/Product over questionable order of operations 2021-06-21 21:08:26 +00:00
Caleb Zulawski
15b4e28004
Add from_bitmask (#136)
* Add from_bitmask
* Add mips workaround
2021-06-21 14:05:43 -07:00
Caleb Zulawski
7b66032ed5 Fix test typo 2021-06-13 20:11:01 +00:00
Caleb Zulawski
f102de7c8b Add mul_add 2021-06-13 19:59:17 +00:00
Caleb Zulawski
74e6262ce4 Add min/max/clamp 2021-06-13 19:47:32 +00:00
Caleb Zulawski
b936f34a5c Add various special functions (recip, signum, copysign) 2021-06-13 18:45:45 +00:00
Caleb Zulawski
96f0f5d29f Implement Sum/Product over references 2021-06-13 18:00:47 +00:00
Caleb Zulawski
bdcccba55c Implement Sum/Product traits 2021-06-13 17:52:44 +00:00
Miguel Raz Guzmán Macedo
57e67c905f
add doctests for shuffle (#130)
* add shuffle doctests/examples
2021-06-11 15:48:44 -07:00
Caleb Zulawski
68393aa594
Add mask width conversion (#127) 2021-06-11 15:48:05 -07:00
Jubilee
4311c0660e
Merge pull request #122 from miguelraz/nbodyexample
nbody example
2021-06-04 09:43:48 -07:00
miguel raz
be121c93ff clean code vis. Jubilee's comments 2021-06-04 10:54:08 -05:00
Miguel Raz Guzmán Macedo
435d1cf7a6
Update crates/core_simd/examples/nbody.rs
Co-authored-by: Jubilee <46493976+workingjubilee@users.noreply.github.com>
2021-06-04 10:40:39 -05:00
miguel raz
c042f33673 clean up code, fudge approx true 2021-06-01 20:05:30 -05:00
miguel raz
70305c5fad add main to avoid CI crash 2021-06-01 19:46:48 -05:00
miguel raz
4e86aeb7f9 finish nbody 2021-06-01 19:31:34 -05:00
miguel raz
5557907098 rewrite unaligned slice, fix output const array 2021-06-01 15:25:56 -05:00
miguel raz
f24110aa5b collapse run_k into run 2021-06-01 12:26:29 -05:00
miguel raz
56050562f1 don't use turbofish on run 2021-06-01 12:15:37 -05:00
miguel raz
83dc5b782b don't need clippy 2021-06-01 12:09:11 -05:00
Miguel Raz Guzmán Macedo
3c05ceec70
Update crates/core_simd/examples/nbody.rs
Co-authored-by: Jubilee <46493976+workingjubilee@users.noreply.github.com>
2021-05-31 18:03:55 -05:00
Caleb Zulawski
992621844f Remove extended_key_value_attributes feature 2021-05-26 10:27:16 -04:00
miguel raz
8bea3627cb replace sum() with horizontal_sum() 2021-05-25 21:25:42 -05:00
miguel raz
ab6af37f8f Simdf64 from attempt 2021-05-25 20:10:55 -05:00
miguel raz
2591c59ba7 fix imports 2021-05-25 20:07:20 -05:00
miguel raz
e52d51cd45 nbody example 2021-05-25 20:00:01 -05:00
Caleb Zulawski
20c3b8e13f
Merge pull request #120 from miguelraz/simd_fsqrt
add simd_fsqrt intrinsic
2021-05-24 19:07:12 -04:00
Caleb Zulawski
1c18f8fd59 Add byte conversions 2021-05-24 15:02:45 -07:00
miguel raz
d6795814d4 add simd_fsqrt intrinsic 2021-05-18 10:11:37 -05:00
Caleb Zulawski
45d7e80aa8 Clarify documentation 2021-05-08 00:13:40 +00:00
Caleb Zulawski
e8cae870fc Fix rustfmt 2021-05-08 00:11:34 +00:00
Caleb Zulawski
0bf5eb5f72 Add select for masks 2021-05-08 00:07:07 +00:00
Caleb Zulawski
563d2a2cfc Add select function 2021-05-01 15:21:41 +00:00
Caleb Zulawski
589fce0313 Attempt to workaround MIPS bug 2021-04-30 23:22:27 -07:00
Caleb Zulawski
98dad13526 Make implementation more scalable by using a helper trait to determine bitmask size. Improve bitmask to int conversion. 2021-04-30 23:22:27 -07:00
Caleb Zulawski
eec42808aa Update bitmask API 2021-04-28 21:56:11 +00:00
Caleb Zulawski
da42aa5403 Begin reducing mask API 2021-04-28 21:56:11 +00:00
Jubilee
5751179dc6
Merge pull request #107 from rust-lang/feat/simd-round
Add SIMD rounding intrinsics
2021-04-26 09:05:34 -07:00
Jubilee Young
6ea08d8d5f Add SIMD round, trunc, fract 2021-04-25 18:31:49 -07:00
Jubilee Young
b4fda6ef06 Give rounding intrinsics their own modules 2021-04-25 18:27:03 -07:00
Jubilee Young
92d643b628 Remove Simd{U,I}128 2021-04-25 16:45:19 -07:00
Jubilee Young
f06427f4d6 Move lanes_at_most_64 to _32 2021-04-25 16:42:49 -07:00
Jubilee Young
91134e614e Branchless abs 2021-04-25 16:42:49 -07:00
Jubilee Young
e8b6bca694 Finish fixing up abs docs 2021-04-25 16:42:49 -07:00
Caleb Zulawski
1f4e902ee7 Fix saturating math docs 2021-04-25 16:42:49 -07:00
Jubilee
24ebae870e
Merge pull request #83 from rust-lang/feature/reductions
Add reductions
2021-04-22 16:44:41 -07:00
Caleb Zulawski
04ee107323 Remove wrapping from sum/product fns 2021-04-22 22:41:12 +00:00
Jubilee
2fa62b91c8
Merge pull request #98 from rust-lang/feature/common-shuffles
Add some common shuffles
2021-04-20 23:33:01 -07:00
Caleb Zulawski
7028a58294 Attempt to clarify interleave/deinterleave 2021-04-20 01:51:06 +00:00
Caleb Zulawski
828b274ae7 Rename sum, product to horizontal_{sum,product} 2021-04-19 23:41:11 +00:00
Jubilee Young
9acc112090 Use fabs intrinsic 2021-04-19 04:49:04 +00:00
Caleb Zulawski
1999c54890
Clarify concatenation order
Co-authored-by: Jubilee <46493976+workingjubilee@users.noreply.github.com>
2021-04-17 15:21:25 -04:00
Caleb Zulawski
977f26f692 Add some common shuffles 2021-04-17 17:00:14 +00:00
Caleb Zulawski
e73985f25d
Merge pull request #89 from rust-lang/intrinsic-neg
Use neg intrinsics
2021-04-16 21:35:11 -04:00
Caleb Zulawski
01d78aa21a Update docs 2021-04-17 01:32:45 +00:00
Jubilee Young
87b7207acd Use neg intrinsics 2021-04-16 15:02:59 -07:00
Jubilee Young
e3f0124baf Silence warnings 2021-04-15 15:19:44 -07:00
Caleb Zulawski
e127586709 Improve function names and docs 2021-04-11 10:59:05 -04:00
Caleb Zulawski
e2fa502617 Enable i586 workaround for both f32 and f64 2021-04-09 16:31:03 -04:00
Caleb Zulawski
3cf970fc09 Fix test sum/product implementation 2021-04-09 16:31:03 -04:00
Caleb Zulawski
3fae09bd08 Revert "Revert i586 fix, fix test instead"
This reverts commit 1ea2f128821339d8050ca936f24b71677352437e.
2021-04-09 16:31:03 -04:00
Caleb Zulawski
b51febbd34 Revert i586 fix, fix test instead 2021-04-09 16:31:03 -04:00
Caleb Zulawski
4b8cbd5385 Fix i586 detection 2021-04-09 16:31:03 -04:00
Caleb Zulawski
64f564866b Update documentation and fix i586 inaccuracy 2021-04-09 16:31:03 -04:00
Caleb Zulawski
02608d44f7 Fix mask ops 2021-04-09 16:31:03 -04:00
Caleb Zulawski
193cd14b4a Enable special handling of zero 2021-04-09 16:31:03 -04:00
Caleb Zulawski
a7b82adb12 Add tests 2021-04-09 16:31:03 -04:00
Caleb Zulawski
875b31c33f Implement reductions 2021-04-09 16:31:03 -04:00
Caleb Zulawski
926cf3aba3 Add intrinsics 2021-04-09 16:31:03 -04:00
Caleb Zulawski
d7649f46f3 Various bug fixes 2021-04-09 16:31:03 -04:00
Caleb Zulawski
b0a005dcfb Add floating-point classification functions 2021-04-09 16:31:03 -04:00
Caleb Zulawski
e6a530907a Reduce maximum lanes from 64 to 32 2021-04-03 14:43:33 -04:00
Caleb Zulawski
97bbe2d86a Fix normal and subnormal classification 2021-04-03 13:54:29 -04:00
Caleb Zulawski
07247a001f Various bug fixes 2021-04-03 13:54:29 -04:00
Caleb Zulawski
93ce1c1a59 Add floating-point classification functions 2021-04-03 13:54:29 -04:00
Jubilee Young
331230fabf Explain why to use saturation 2021-04-02 09:11:27 -07:00
Jubilee Young
dd1a5e41ad Add saturating abs/neg 2021-04-02 08:55:45 -07:00
Jubilee Young
4a6b4c0a2e Introduce saturating math 2021-03-30 17:42:05 -07:00
Caleb Zulawski
fa77b196c8 Add std cargo feature 2021-03-22 14:00:02 -07:00
Caleb Zulawski
8cb1fe0c0e Fix wasm-bindgen dependency 2021-03-06 22:00:39 -05:00
Jubilee Young
a2302da5b2 Move macros.rs to first.rs
This awkwardly has to go first right now, and we don't want more
macros to go into this ambiguously named mod, so let's rename it
to be more literal.
2021-02-21 17:32:23 -08:00
Jubilee Young
39fb223385 Partially carve macros.rs into other files
The base impl_vector! in macros.rs is staying put for the moment as
it must go first before everything in order to work.

Everything else, like transmutes, specific type impls, etc. have
been moved into appropriate files elsewhere to subdivide concerns.
2021-02-21 17:32:23 -08:00
Jubilee Young
ca15e4fcd8 cat vector types by kind
Rearrange aliases to bottom of files
2021-02-21 17:32:15 -08:00
Jubilee Young
27f094f5ee Nominate base files 2021-02-21 16:25:58 -08:00
Jubilee Young
1a19ad4fb0 Reorg vectors into crate::vector::*; 2021-02-21 16:25:58 -08:00
Jubilee Young
2f2a463c0d Remove From<Scalar> for SimdTy impl
0. It was not being tested.
1. The possible conversions are ambiguous between splatting
   and setting a single value but zero-initializing the rest.
2. Splat works fine.
2021-02-16 10:04:50 -08:00
Caleb Zulawski
2b3f4b258c Add LanesAtMost64 bounds 2021-02-15 18:38:35 -05:00
Caleb Zulawski
8c378d3027 Add documentation 2021-02-15 18:22:56 -05:00
Caleb Zulawski
714ad639b3 Fix MulAssign typo in tests, move panic tests 2021-02-15 18:22:56 -05:00
Caleb Zulawski
0ec3ecfab1 Split ops tests 2021-02-15 18:22:56 -05:00
Caleb Zulawski
976fafcf4f Fix wasm tests 2021-02-15 18:22:56 -05:00
Caleb Zulawski
8d5702e437 Fix performance issues 2021-02-15 18:22:56 -05:00
Caleb Zulawski
38b18904d0 Remove obsolete helpers 2021-02-15 18:22:56 -05:00
Caleb Zulawski
b38d342d77 Simplify test creation 2021-02-15 18:22:24 -05:00
Caleb Zulawski
223daea83e Update supported lane counts 2021-02-15 18:22:24 -05:00
Caleb Zulawski
5b0818a221 Remove old integer tests 2021-02-15 18:22:24 -05:00
Caleb Zulawski
0ac057a354 Add integer tests 2021-02-15 18:22:24 -05:00
Caleb Zulawski
d5c227998b Add proptest float tests 2021-02-15 18:22:24 -05:00
Caleb Zulawski
d3c58daa96
Merge pull request #73 from rust-lang/scalar-docs
Add to glossary: vectorize, scalar, vector register
2021-02-15 17:00:25 -05:00
Jubilee Young
08ee3385c0 Add to glossary: vectorize, scalar, vector register
Also document the lanewise scalar helpers.
2021-02-15 13:43:43 -08:00
Caleb Zulawski
faae170f5f Remove glob import 2021-02-13 00:52:42 -05:00
Caleb Zulawski
16904ebfc7 Add missing type bounds 2021-02-13 00:49:51 -05:00
Caleb Zulawski
6362540f11 Limit all types to 64 lanes 2021-02-09 22:13:27 -05:00
Caleb Zulawski
26061b4e84 Fix wasm tests 2021-02-09 19:14:46 -05:00
Caleb Zulawski
9e96c8a2a8 Add missing From implementation, add simple mask API tests 2021-02-09 19:14:46 -05:00
Caleb Zulawski
92293aff9d Add bitmask that supports up to 64 lanes. Simplify mask op API. 2021-02-09 19:14:46 -05:00
Ashley Mannix
1b0c231948
Merge pull request #62 from rust-lang/feature/shuffle-self
Add SIMD shuffles for SimdType{2,4,8,16,32,64}
2021-02-09 13:16:17 +10:00
Jubilee Young
5424140b66 Add SIMD shuffles for SimdType{2,4,8,16,32,64}
This const generic implementation for certain lane sizes represents
a more limited interface than what LLVM's shufflevector instruction
can handle, as normally the length of U can be different from the
length of T, but offers an interface that it is expected to be able
to expand the capabilities of in the future.
2021-02-05 23:28:12 -08:00
miguel raz
8bea63425e AsRef -> as_slices() 2021-02-03 17:46:08 -06:00
Jubilee
98015403c5
Merge pull request #55 from miguelraz/min-panics
implement guards in rem and div unsound cases
2021-02-02 17:21:09 -08:00
miguel raz
c67fc2e4c5 Add guards/tests for div,rem overflow cases 2021-02-02 18:59:22 -06:00
Jubilee Young
cb036b534d min_const_generics ride the train to stable 2021-01-26 21:46:10 -08:00
Caleb Zulawski
59947717c5 Add workaround for rust-lang/rust#80108 2020-12-17 01:19:39 -05:00
Caleb Zulawski
9b8cb18c9f Remove obsolete files 2020-12-14 00:40:59 -05:00
Caleb Zulawski
62d98e3a11 Remove obsolete macros 2020-12-14 00:34:32 -05:00
Caleb Zulawski
2720ccc5a7 Fix masks 2020-12-14 00:27:20 -05:00
Caleb Zulawski
0ddf7acc89 Reenable rounding ops 2020-12-14 00:07:36 -05:00
Caleb Zulawski
9cc3deaa92 Finish refactoring vector types 2020-12-14 00:00:02 -05:00
Caleb Zulawski
25c7640fb3 Reenable ops and fix tests 2020-12-14 00:00:02 -05:00
Caleb Zulawski
22576bb6e0 Implement additional functions 2020-12-14 00:00:02 -05:00
Caleb Zulawski
27e944231c Begin changing vectors to const generics 2020-12-14 00:00:02 -05:00
Caleb Zulawski
35b9ab9f5c Simplify some formatting 2020-12-14 00:00:02 -05:00
Caleb Zulawski
78a8d615b5 Implement missing traits on opaque masks, fix tests 2020-12-14 00:00:02 -05:00
Caleb Zulawski
5bc5d7f0d1 Add comparison ops 2020-12-14 00:00:02 -05:00
Caleb Zulawski
cebc2ca707 Add opaque masks 2020-12-13 23:59:07 -05:00
Jubilee Young
3d9bbf9b86 Use simd_{floor,ceil} intrinsics for round.rs 2020-11-30 19:31:08 -08:00
Jubilee Young
e9cc3066a8 Remove round, trunc tests
There are no platform intrinsics in the rustc for these functions yet,
so this removes them as a distinct commit for later reversion.
2020-11-30 19:26:53 -08:00
Caleb Zulawski
3870633828 Add rounding mode test 2020-10-12 20:48:05 -04:00
Caleb Zulawski
dc85c13ff3 Account for sign bit 2020-10-11 21:41:26 -04:00
Caleb Zulawski
c27c76182b Fix UB in test (really this time) 2020-10-11 21:28:50 -04:00
Caleb Zulawski
6e07982c4c Fix UB in test 2020-10-11 19:08:25 -04:00
Caleb Zulawski
5805c7a051 Fix comment 2020-10-11 14:34:57 -04:00
Caleb Zulawski
3d8721b053 Fix casts, add tests 2020-10-11 14:32:46 -04:00
Caleb Zulawski
75fdacde1c Add rounding to integers 2020-10-11 13:22:26 -04:00
Caleb Zulawski
ffedbe5b15 Add rounding functions 2020-10-10 00:22:36 -04:00
Thom Chiovoloni
ffd562f218 Add comment about fneg to the bitxor in float neg 2020-10-07 13:24:21 -07:00
Thom Chiovoloni
873639d6fd Use bitxor to implement Neg for floats 2020-10-07 11:51:54 -07:00
Thom Chiovoloni
8d3d616b13 Apply review feedback 2020-10-06 13:40:39 -07:00
Thom Chiovoloni
541369c38e use NEG_INFINITY and NAN constants instead computing them 2020-10-06 12:30:19 -07:00
Thom Chiovoloni
866971adf5 Implement abs, to_bits, and from_bits for float vectors 2020-10-06 11:33:29 -07:00
Ashley Mannix
0fbf64bae8
Add CI for wasm targets using wasm-bindgen (#20) 2020-10-03 16:36:51 +10:00
Caleb Zulawski
e7f133ead0 Add licenses and update Cargo.toml 2020-10-01 23:42:10 -04:00
Caleb Zulawski
43dabd1aea
Implement core::ops (#10)
* Add vector-vector arithmetic ops
* Add operators and integer conversions for masks
* Add unary traits
* Implement Index and IndexMut
* Implement by-ref ops for masks
* Document intrinsics
* Implement format traits for masks
* Add floating point ops tests
* Add integer tests
* Add mask tests
2020-10-01 19:50:15 -07:00
Caleb Zulawski
cfda50a82a Remove vectors under 64-bit width 2020-09-26 19:31:14 -04:00
Caleb Zulawski
88bfbb001e Mark trait methods inline 2020-09-26 14:41:01 -04:00
Caleb Zulawski
b9bf9ef3c2 Remove remaining derived traits 2020-09-26 14:30:00 -04:00
Caleb Zulawski
d817b56f1d Manually implement some traits, instead of derive 2020-09-26 14:12:30 -04:00
Caleb Zulawski
167c3c8100 Change doc attributes to comments 2020-09-25 23:23:02 -04:00
Caleb Zulawski
992768709f Remove pointer vectors 2020-09-25 21:45:09 -04:00
Caleb Zulawski
2178409df5 Remove some obsolete macros 2020-09-25 00:52:32 -04:00
Caleb Zulawski
b7d1f3e797 Improve Debug implementation, add additional formatting traits 2020-09-25 00:44:48 -04:00
Caleb Zulawski
613f242088 Add pointer vectors and implement a few more traits 2020-09-24 21:15:31 -04:00
Caleb Zulawski
3df72fddc2 Add masks 2020-09-24 19:48:18 -04:00
Caleb Zulawski
872e8f62d6 Simplify transmutes 2020-09-23 10:42:12 -04:00