Commit Graph

395 Commits

Author SHA1 Message Date
Caleb Zulawski
e5db1ecc82 Fix documentation 2022-10-29 11:55:01 -04:00
Caleb Zulawski
dadf98a290 Remove duplicate intrinsic 2022-10-29 11:55:01 -04:00
Caleb Zulawski
176cc81324 Update for new intrinsics 2022-10-29 11:55:01 -04:00
Caleb Zulawski
8a5a5732a1 Clarify addr and with_addr implementations 2022-10-29 11:55:01 -04:00
Caleb Zulawski
e7cc021189 Fix casts 2022-10-29 11:55:01 -04:00
Caleb Zulawski
da25087f79 Test a more useful pointer 2022-10-29 11:55:01 -04:00
Caleb Zulawski
f10e591de1 Fix wrapping pointer arithmetic 2022-10-29 11:55:01 -04:00
Caleb Zulawski
6b3c599ba2 Add missing safety comment 2022-10-29 11:55:01 -04:00
Caleb Zulawski
4076ba8a77 Implement scatter/gather with new pointer vector and add tests 2022-10-29 11:55:01 -04:00
Caleb Zulawski
7e96f5dbea Use safe casts 2022-10-29 11:53:48 -04:00
Caleb Zulawski
d3cfd7c5c9 Add vectors of pointers 2022-10-29 11:53:48 -04:00
Caleb Zulawski
402b50a272 Improve variable names 2022-10-16 23:46:18 -04:00
Caleb Zulawski
61a6f1854f Specify aliases in one place, and make it more uniform which are defined 2022-10-16 21:38:13 -04:00
Caleb Zulawski
4491309cb0 Mark more mask functions inline 2022-10-16 13:31:42 -04:00
Jacob Lifshay
d5cd4a8112
Merge pull request #300 from programmerjake/all_lane_counts
add all_lane_counts feature to enable non-power-of-2 lane counts <= 64
2022-08-15 14:11:13 -07:00
Caleb Zulawski
7145dc5a41
Merge pull request #299 from rust-lang/interleave-one
Fix interleave/deinterleave for vectors with only one lane
2022-08-03 23:23:19 -04:00
Caleb Zulawski
5f7066430b Simplify expression 2022-08-01 19:57:41 -04:00
Caleb Zulawski
d030301161 Remove special case for length-1 vectors 2022-08-01 19:52:35 -04:00
Caleb Zulawski
c739af3908 Hide rustc unstable feature from docs 2022-08-01 00:38:29 -04:00
Caleb Zulawski
6bf5128235 Simplify interleave/deinterleave and fix for odd-length vectors. 2022-08-01 00:34:58 -04:00
Jacob Lifshay
8742a86b1d add all_lane_counts feature to enable non-power-of-2 lane counts <= 64 2022-07-29 16:12:24 -07:00
Caleb Zulawski
3183afb6b5 Fix interleave/deinterleave for vectors with only one lane 2022-07-29 11:57:05 -04:00
Ralf Jung
ddede9fb9b make some Miri backtraces more pretty 2022-07-22 09:39:23 -04:00
Thom Chiovoloni
b5f9d43ff1
rust-lang/portable-simd#289: Strengthen warnings about relying on Mask layout
This makes it more clear that you can't rely on the layout of these,
which seems worth doing given that the names vaguely suggest that you can
(and the docs only clarify that you can't on Mask but not the maskNxM aliases).
2022-07-21 14:53:07 -07:00
The Atelier
2e081db92a Fix doctest imports using as_crate feature
Within core, `use self::` does not work to import these items.
And because core is not core_simd, neither does the existing `use`.
So, use this quirky hack instead, switching the import on a feature.
2022-07-20 17:55:47 -07:00
Mark Rousskov
bbf31f9c78 Finish bumping stage0
It looks like the last time had left some remaining cfg's -- which made me think
that the stage0 bump was actually successful. This brings us to a released 1.62
beta though.
2022-07-19 16:37:34 -07:00
Ralf Jung
64bef2910b portable-simd: use simd_arith_offset to avoid ptr-int transmutation 2022-07-19 16:37:34 -07:00
Caleb Zulawski
ed8092e96b Clarify comment 2022-06-21 20:52:43 -04:00
Caleb Zulawski
0f6399b166
Merge pull request #284 from programmerjake/fix_splat
Change `Simd::splat` to not generate a loop
2022-06-21 20:50:11 -04:00
Jacob Lifshay
f7412ad7b9 add workaround comment in Simd::splat 2022-06-06 12:43:29 -07:00
Jacob Lifshay
c9636158d9 Change Simd::splat to not generate a loop
This fixes poor codegen in some circumstances for `u16x8::splat` on x86_64
https://rust-lang.zulipchat.com/#narrow/stream/257879-project-portable-simd/topic/Very.20bad.20.60u16x8.3A.3Asplat.60.20codegen.20on.20x86_64
2022-06-06 12:16:17 -07:00
Caleb Zulawski
5562b02ff0 Deduplicate to_int_unchecked 2022-06-02 10:19:20 -04:00
Caleb Zulawski
05c92c73c1 Document remaining internal unsafety, and deny undocumented unsafety 2022-05-31 14:44:23 -04:00
Caleb Zulawski
5e320046ec
Merge pull request #246 from rust-lang/feature/bitmask_array
Add bitmask array
2022-05-31 14:42:34 -04:00
Caleb Zulawski
c44a608f5f
Merge pull request #278 from rust-lang/feature/simd-traits
Move element-specific functions to traits
2022-05-31 14:26:30 -04:00
Caleb Zulawski
bca8dec404 Remove incorrect comment 2022-05-22 01:20:28 -04:00
Caleb Zulawski
1cee9304b3 Fix generic_const_exprs feature 2022-05-21 20:08:38 -04:00
Caleb Zulawski
b7fea94c96 Generically implement ToBitMaskArray 2022-05-21 20:02:31 -04:00
Caleb Zulawski
c9f4e0ef98 Use Mask::cast in From impl 2022-05-21 16:49:03 -04:00
Caleb Zulawski
aa11959f19 Add mask cast tests 2022-05-21 16:34:27 -04:00
Jubilee Young
98cd636d58 Add Mask::cast 2022-05-21 15:13:33 -04:00
Caleb Zulawski
af53b5de24
rust-lang/portable-simd#279: Silence clippy false alarms 2022-04-25 13:32:56 -07:00
Caleb Zulawski
62d3b2e39c Add Copy bound to SIMD traits 2022-04-16 16:17:43 -04:00
Caleb Zulawski
528bc8593a Improve copysign documentation 2022-04-15 13:47:43 -04:00
Caleb Zulawski
04be48ff97 Add float trait, and seal traits. 2022-04-15 02:11:16 -04:00
Caleb Zulawski
376957ad8c Move integer functions to traits. 2022-04-15 02:00:50 -04:00
Sean Stangl
fcc5ca0f93
rust-lang/portable-simd#273: Documentation update for reduce functions, swizzle
Working through giving example documentation to every Simd function.

The major change in this patch is using doc macros to generate
type-specific examples for each function, using a visually-apparent type
constructor. This makes it feel nicer to have twelve separate
documentation entries for reduce_product(), for example.
2022-04-10 23:08:34 -07:00
Sean Stangl
7136841cbd
rust-lang/portable-simd#274: Use SIMD equality for PartialEq on SIMD vectors 2022-04-10 23:05:14 -07:00
Jubilee
1ec010db2a
rust-lang/portable-simd#265: Move comparisons to traits
A simpler variant of rust-lang/portable-simd#206.

* Comparisons are moved to `SimdPartialEq`, `SimdPartialOrd`, and `SimdOrd`.  The function names are prefixed with `simd_` to disambiguate from the regular `PartialEq` etc functions.  With the functions on traits instead of `Simd` directly, shadowing the function names doesn't work very well.
* Floating point `Ord`-like functions are put into a `SimdFloat` trait.  The intention is that eventually (some time after this PR) all floating point functions will be moved from `Simd` to `SimdFloat`, and the same goes for future `SimdInt`/`SimdUint` traits.
2022-04-04 10:19:20 -07:00
Sean Stangl
8cd9325e20 Add a *small* blurb to Mask that is likely unobjectionable 2022-04-03 16:22:31 -06:00
Sean Stangl
21b070ce43 Correct the Mask docs, and get them to fit in search results 2022-04-03 16:15:27 -06:00
Sean Stangl
c73f1fbdde
Update crates/core_simd/src/masks.rs
Co-authored-by: Jacob Lifshay <programmerjake@gmail.com>
2022-04-03 15:59:22 -06:00
Sean Stangl
4e14017f3d Standardize documentation for SIMD vector and mask types 2022-04-03 15:20:00 -06:00
Jubilee
0711e11593
rust-lang/portable-simd#267: fix big-endian bitmasks smaller than a byte 2022-03-21 00:05:38 -07:00
Ralf Jung
35e16a1e06
rust-lang/portable-simd#266: reduce Miri test count in round.rs 2022-03-20 16:17:33 -07:00
Ralf Jung
60555b57f1 fix big-endian bitmasks smaller than a byte 2022-03-17 10:42:39 -04:00
Ralf Jung
50fbfa4eba add bitmask roundtrip test for vector length below 8 2022-03-16 20:28:18 -04:00
Caleb Zulawski
60486e08ed SimdPartialOrd implies SimdPartialEq 2022-03-15 00:17:14 +00:00
Caleb Zulawski
2a02c4d9cb Create SimdFloat trait 2022-03-13 19:57:06 +00:00
Caleb Zulawski
80469c66d6 Move comparisons to SimdPartialOrd and SimdOrd traits 2022-03-13 19:07:36 +00:00
Jubilee
72df4c4505
portable-simd#261: Rename horizontal_* to reduce_* 2022-03-12 15:34:58 -08:00
Ralf Jung
49043f4434
rust-lang/portable-simd#262: also implement clamp for integer vectors
* add test from issue rust-lang/portable-simd#253
2022-03-12 15:32:28 -08:00
Jacob Lifshay
c196b8abaa replace horizontal_* with reduce_* 2022-03-11 14:49:06 -08:00
Jorge Leitao
86b9f69622
rust-lang/portable-simd#260: Add .min and .max for integers 2022-03-10 15:12:40 -08:00
Ralf Jung
adbd47973e reduce number of tests being run under Miri 2022-03-09 07:54:49 -05:00
Jubilee Young
2d13059ae9 Clean up use of cargo feature "std" 2022-03-08 13:36:29 -08:00
Jubilee Young
2e5e0ec380 Remove #![feature(const_fn_trait_bound)] 2022-03-08 13:36:29 -08:00
Ralf Jung
4ddcc006a9
rust-lang/portable-simd#252: extern blocks don't have doc comments 2022-03-04 11:14:49 -08:00
Jubilee
30975615b7
rust-lang/portable-simd#250: Add bitmask i{N <8} -> u8 impls
...and copy the notes for why they're legal.
2022-03-01 16:10:49 -08:00
Jubilee
a5789d17bf
rust-lang/portable-simd#248: Remove default features
Now that we are thoroughly embedded in libcore, we don't need these on by default.
Indeed, their presence may provide confusing results during integration attempts.
2022-02-28 19:56:31 -08:00
Jubilee
5f49d4c843
rust-lang/portable-simd#239: Bitmask conversion trait
Another approach that fixes rust-lang/portable-simd#223, as an alternative to rust-lang/portable-simd#238.

This adds the `ToBitMask` trait, which is implemented on a vector for each bitmask type it supports.  This includes all unsigned integers with enough bits to contain it.  The byte array variant has been separated out for now into rust-lang/portable-simd#246 and still requires `generic_const_exprs`, but the integer variants no longer require it and can make it to nightly.
2022-02-26 12:56:23 -08:00
Caleb Zulawski
20fa4b7623 Make internal mask implementation safe 2022-02-24 18:04:02 -08:00
Caleb Zulawski
11c3eefa35 Manually implement for supported lanes 2022-02-24 18:03:40 -08:00
Caleb Zulawski
842ac87747 Use bitmask trait 2022-02-24 18:02:39 -08:00
Jubilee
78a18c3433
rust-lang/portable-simd#245: Explain unsafe contracts of core::simd
* Explain unsafe contracts of core::simd

This permeates the module with remarks on safety for pub methods,
layout of the Simd type, correct use of intrinsics, et cetera.
This is mostly to help others curious about how core::simd works,
including other Rust contributors, `unsafe` library authors,
and eventually ourselves.
2022-02-10 09:32:44 -08:00
Caleb Zulawski
dddfffcfb3 Add some safety comments 2022-02-09 16:15:01 -08:00
Jubilee
5d52455c65 Review for clarity and concision
Co-authored-by: Caleb Zulawski <caleb.zulawski@gmail.com>
2022-02-08 17:43:26 -08:00
Jubilee Young
e628a2991c Document Simd is Simd<Wrapping<T>, N>
and other quirks like panicking
and the equivalence to zipping and mapping binary ops
2022-02-08 15:40:52 -08:00
Jubilee Young
672bfebfd8 Remove overflow panic from divrem
Includes some remarks in intrinsics.rs,
generated while auditing the interface for remaining UB.
2022-02-08 15:39:55 -08:00
Jubilee Young
4910274686 Genericize to_int_unchecked 2022-02-03 03:46:16 -08:00
Jubilee Young
ebf65de2ce Delete outmoded fn round_from_int 2022-02-03 03:46:16 -08:00
Jubilee
01350a222a
Merge portable-simd#203 - deantvv/add-spectral-norm
Add spectral_norm example from packed_simd
2022-02-01 23:17:17 -08:00
Jubilee Young
03f6fbb21e Omit Simd::cast during bootstrap 2022-01-27 10:59:23 -08:00
Jubilee Young
0031b02cee Add core_simd/tests/cast.rs 2022-01-26 21:04:47 -08:00
Jubilee Young
a991d48e95 Add Simd::cast 2022-01-26 18:37:02 -08:00
Caleb Zulawski
36cca22f16
Update crates/core_simd/src/vector/float.rs
Co-authored-by: Alexander Ronald Altman <alexanderaltman@me.com>
2022-01-24 20:11:17 -05:00
Alec Goncharow
4fc62c2082
fix documentation typo
Remove redundant "neither" in the documentation comment.
2022-01-23 16:42:57 -05:00
Jubilee Young
56566d816d Annotate signed type in int_divrem_guard
The way the macro expands, it may sometimes infer
"this is a uint, but doesn't impl Neg???"
Also, I made the "wrong path for intrinsics" error.
These fixes allow integration into libcore.
2022-01-20 19:22:14 -08:00
Jubilee Young
a4f5f01b8a Use intrinsics for Mask::{to,from}_array
This significantly simplifies codegen and should improve mask perf.

Co-authored-by: Jacob Lifshay <programmerjake@gmail.com>
2022-01-19 21:00:21 -08:00
Caleb Zulawski
138b9cf4bf Use intrinsic for min/max 2022-01-13 17:59:55 -05:00
Caleb Zulawski
65cb2c90a0 Fix mask alias 2022-01-09 13:12:22 -05:00
Jubilee
09fa72ae84 Merge portable-simd#219 - ./std-float
impl std::simd::StdFloat

 This introduces an extension trait to allow use of floating point methods
 that need runtime support. It is *excessively* documented because its mere
 existence is quite vexing, as the entire thing constitutes a leakage of
 implementation details into user observable space. Eventually the entire
 thing will ideally be folded into core and restructured to match the rest
 of the library, whatever that structure might look like at the time. This
 is preferred in lieu of the "lang item" path because any energy the lang
 items require (and it will be significant, by Simulacrum's estimation) is
 better spent on implementing our libmvec.
2021-12-31 15:50:20 -08:00
Jubilee Young
af26e3b9fd Tear down and rewrite support for float testing 2021-12-31 14:28:14 -08:00
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
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