- 25 2月, 2022 2 次提交
-
-
由 Caleb Zulawski 提交于
-
由 Caleb Zulawski 提交于
-
- 03 2月, 2022 2 次提交
-
-
由 Jubilee Young 提交于
-
由 Jubilee Young 提交于
-
- 02 2月, 2022 1 次提交
-
-
由 Jubilee 提交于
Add spectral_norm example from packed_simd
-
- 28 1月, 2022 1 次提交
-
-
由 Jubilee Young 提交于
-
- 27 1月, 2022 3 次提交
-
-
由 Jubilee 提交于
Add Simd::cast Add core_simd/tests/cast.rs
-
由 Jubilee Young 提交于
-
由 Jubilee Young 提交于
-
- 25 1月, 2022 2 次提交
-
-
由 Caleb Zulawski 提交于
fix documentation typo
-
由 Caleb Zulawski 提交于
Co-authored-by: NAlexander Ronald Altman <alexanderaltman@me.com>
-
- 24 1月, 2022 1 次提交
-
-
由 Alec Goncharow 提交于
Remove redundant "neither" in the documentation comment.
-
- 21 1月, 2022 1 次提交
-
-
由 Jubilee Young 提交于
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.
-
- 20 1月, 2022 1 次提交
-
-
由 Jubilee Young 提交于
This significantly simplifies codegen and should improve mask perf. Co-authored-by: NJacob Lifshay <programmerjake@gmail.com>
-
- 14 1月, 2022 2 次提交
-
-
由 Caleb Zulawski 提交于
Use intrinsic for min/max
-
由 Caleb Zulawski 提交于
-
- 10 1月, 2022 1 次提交
-
-
由 Caleb Zulawski 提交于
-
- 01 1月, 2022 3 次提交
-
-
由 Jubilee 提交于
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.
-
由 Jubilee Young 提交于
-
由 Jubilee Young 提交于
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.
-
- 30 12月, 2021 1 次提交
-
-
由 Jubilee 提交于
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
-
- 24 12月, 2021 1 次提交
-
-
由 Jubilee Young 提交于
-
- 23 12月, 2021 1 次提交
-
-
由 Jubilee Young 提交于
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.
-
- 11 12月, 2021 1 次提交
-
-
由 Jubilee Young 提交于
-
- 10 12月, 2021 1 次提交
-
-
由 Jubilee Young 提交于
This should perform a SIMD check for whether or not we can div/rem, so that we can panic several times faster!
-
- 09 12月, 2021 3 次提交
-
-
由 Jubilee Young 提交于
-
由 Jubilee Young 提交于
-
由 Jubilee Young 提交于
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}`.
-
- 05 12月, 2021 1 次提交
-
-
由 Jubilee 提交于
Remove Select trait I realized that our `select` implementation predated `Simd` being generic over element type, and we don't really need the `Select` trait at all. The function signature is much simpler now (generic over element type, rather than over the entire vector). This did require changing mask select to be a different function, but I think that's fine considering they're not necessarily vectors.
-
- 04 12月, 2021 1 次提交
-
-
由 Caleb Zulawski 提交于
-
- 03 12月, 2021 1 次提交
-
-
由 Jubilee 提交于
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.
-
- 02 12月, 2021 3 次提交
-
-
由 Jubilee Young 提交于
-
由 Jubilee Young 提交于
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.
-
由 Jubilee Young 提交于
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.
-
- 28 11月, 2021 1 次提交
-
-
由 Dean Li 提交于
-
- 27 11月, 2021 1 次提交
-
-
由 Alexander Ronald Altman 提交于
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.
-
- 25 11月, 2021 1 次提交
-
-
由 Jubilee Young 提交于
-
- 24 11月, 2021 3 次提交
-
-
由 Jubilee Young 提交于
Instead of implementing {Op}Assign traits for individual scalar type args to Simd<_, _>, use parametric impls that reassert the bounds of the binary op.
-
由 Jubilee Young 提交于
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.
-
由 Jubilee Young 提交于
-