Commit graph

55 commits

Author SHA1 Message Date
Alex Crichton
129f7191dd Merge pull request #44 from alexcrichton/assert
Add AVX2 instruction assertiosn
2017-09-26 16:49:51 -05:00
Alex Crichton
b8bcdd93c6 Always test intrinsics unconditionally
This commit alters the test suite to unconditionally compile and run all tests,
regardless of the ambient target features enabled. This then uses a new
convenience macro, `#[simd_test]`, to guard all tests with the appropriate
`cfg_feature_enabled!` and also enable the `#[target_feature]` appropriately.
2017-09-26 14:38:58 -07:00
Alex Crichton
1fa49dfe5d Add AVX2 instruction assertiosn
Also a few other assorted modules
2017-09-26 11:12:16 -07:00
Alex Crichton
a03935143f Add links to docs 2017-09-25 13:39:02 -07:00
Alex Crichton
d978ac4c81 Write some short crate docs 2017-09-25 13:36:32 -07:00
Alex Crichton
d30ac624f8 Merge pull request #31 from gnzlbg/runtime_detection
[runtime] initial run-time feature detection support
2017-09-25 14:09:26 -05:00
Alex Crichton
4d504a7767 Merge pull request #38 from kocsis1david/master
Some SSE instructions
2017-09-25 14:05:38 -05:00
Dávid Kocsis
1d3f72c336 Some SSE instruction 2017-09-22 22:19:45 +02:00
Alex Crichton
5a8887b0c0 Add CI for more platforms
This commit adds CI for a few more targets:

* i686-unknown-linux-gnu
* arm-unknown-linux-gnueabihf
* armv7-unknown-linux-gnueabihf
* aarch64-unknown-linux-gnu

The CI here is structured around using a Docker container to set up a test
environment and then QEMU is used to actually execute code from these platforms.
QEMU's emulation actually makes it so we can continue to just use `cargo test`,
as processes can be spawned from QEMU like `objdump` and files can be read (for
libbacktrace). Ends up being a relatively seamless experience!

Note that a number of intrinsics were disabled on i686 because they were failing
tests, and otherwise a few ARM touch-ups were made to get tests passing.
2017-09-21 12:35:46 -07:00
gnzlbg
4e52b8641a Merge branch 'master' into runtime_detection 2017-09-21 13:09:46 +02:00
gnzlbg
bbeec63f52 [bmi] add some more code-gen tests 2017-09-21 09:07:52 +02:00
gnzlbg
53540f0eee [arm] bitwise manipulation instructions 2017-09-20 21:53:21 +02:00
gnzlbg
7ac777c523 remove explicit discriminant values 2017-09-20 20:56:33 +02:00
gnzlbg
0dc630020a [runtime] initial run-time feature detection support 2017-09-20 20:25:37 +02:00
Alex Crichton
124f731ce2 Migrate existing tests to #[assert_instr]
Also add some documentation to the assert_instr infrastructure
2017-09-20 10:29:39 -07:00
Alex Crichton
5e8f0e72b5 Merge pull request #28 from alexcrichton/tests
Add assertions correct instructions are generated
2017-09-20 12:01:51 -05:00
Alex Crichton
ba7f62715a Add assertions correct instructions are generated
This commit adds a procedural macro which can be used to test instruction
generation in a lightweight way. The intention is that all functions are
annotated with:

    #[cfg_attr(test, assert_instr(maxps))]
    fn foo(...) {
        // ...
    }

and then during `cargo test --release` it'll assert the function `foo` does
indeed generate the instruction `maxps`. This only activates tests in optimized
mode to avoid debug mode inefficiencies, and it uses a literal invocation of
`objdump` and some parsing to figure out what instructions are inside each
function. Finally it also uses the `backtrace` crate to figure out the symbol
name of the relevant function and hook that up to the output of `objdump`.

I added a few assertions in the `sse` module to get some feedback, but curious
what y'all think of this!
2017-09-20 09:57:43 -07:00
Dávid Kocsis
fe5d8f939f SSE4.1 dot product instructions 2017-09-20 12:35:43 -04:00
Mohan Rajendran
9b96985000 Added _mm_unpackhi_ps function (#16)
Added _mm_unpackhi_ps
2017-09-20 06:50:06 -04:00
gnzlbg
e64f80e479 [abm] use lzcnt and popcnt features 2017-09-19 17:10:00 -04:00
gnzlbg
59f6e21751 nitpicks, whitespace, etc 2017-09-19 17:10:00 -04:00
gnzlbg
21091b0d71 [bmi] export all intrinsics 2017-09-19 17:10:00 -04:00
gnzlbg
4446e941ed [bmi] use llvm intrinsics instead of platform-intrinsic 2017-09-19 17:10:00 -04:00
gnzlbg
5c483e3773 [tbm] adds all tbm intrinsics 2017-09-19 17:10:00 -04:00
gnzlbg
c66003d259 [bmi] add module-level docs to bmi and bmi2 modules 2017-09-19 17:10:00 -04:00
gnzlbg
778d55a0bc [abm] support popcnt and lzcnt 2017-09-19 17:10:00 -04:00
gnzlbg
bf68b58e6b [bmi2] implement all bmi2 instructions 2017-09-19 17:10:00 -04:00
gnzlbg
14144a3b38 [bmi] implement all bmi1 intrinsics 2017-09-19 17:10:00 -04:00
gnzlbg
ad5ff722de run tests only in architectures that support them 2017-09-19 17:10:00 -04:00
Paul Masurel
045f931b1a Implementing _mm_shuffle_epi8. (#18)
Implementing `_mm_shuffle_epi8`.
2017-09-19 08:55:21 -04:00
Andrew Gallant
e975e22c20
refactor 2017-06-19 17:06:53 -04:00
Alex Crichton
1450e641a5 Add bindings for _mm_blendv_epi8
Just wanted to test this out!
2017-06-19 16:15:54 -04:00
Alex Crichton
91a4849bba Add #[inline] to cast methods
Avoids function calls in release builds!
2017-06-19 16:01:03 -04:00
Alex Crichton
da7dc55140 Add fmt::LowerHex to integer simd for debugging
Helped me locally at least! Curious what you think.
2017-06-19 16:00:50 -04:00
Jack Mott
90a4379f1a avx2 lhf complete 2017-06-01 07:26:02 -04:00
Jack Mott
59aa3f75ac Another batch of AVX2 intrinsics (#4)
add more avx2 intrinsics
2017-05-29 10:36:08 -04:00
Jack Mott
0b760d7e20 Start on AVX (#3)
start on avx
2017-05-28 16:08:12 -04:00
Jack Mott
15b8068c8b Start of AVX2 functions (#2)
start adding avx2
2017-05-28 15:46:54 -04:00
Andrew Gallant
27e307278a Add 256-bit vectors and some SSE intrinsics. 2017-03-18 15:21:32 -04:00
Andrew Gallant
df03dc4d80 progress 2017-03-14 15:53:20 -04:00
Andrew Gallant
1203e97ac0 progress 2017-03-13 20:56:22 -04:00
Andrew Gallant
52cb807e6e progress 2017-03-13 20:42:45 -04:00
Andrew Gallant
440ecbaee7 progress 2017-03-13 20:11:56 -04:00
Andrew Gallant
5bfc38a994 progress 2016-12-28 18:22:09 -05:00
Andrew Gallant
8b27771cc5 progress 2016-12-11 20:35:28 -05:00
Andrew Gallant
c01240299f progress 2016-12-11 18:26:04 -05:00
Andrew Gallant
f268844dc9 progress 2016-12-02 21:46:58 -05:00
Andrew Gallant
7c2915767e switch to more typed API 2016-12-01 20:57:33 -05:00
Andrew Gallant
535794f129 progress 2016-11-30 19:35:14 -05:00
Andrew Gallant
a8dc7af480 progress 2016-11-29 01:10:28 -05:00