Commit Graph

69 Commits

Author SHA1 Message Date
Alex Crichton 4d504a7767 Merge pull request #38 from kocsis1david/master
Some SSE instructions
2017-09-25 14:05:38 -05:00
Alex Crichton d888d2d350 Merge pull request #36 from alexcrichton/arm-ci
Add CI for more platforms
2017-09-25 14:04:33 -05:00
Dávid Kocsis 1d3f72c336 Some SSE instruction 2017-09-22 22:19:45 +02:00
Dávid Kocsis ca55004659 Merge remote-tracking branch 'upstream/master' 2017-09-22 21:00:21 +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
Alex Crichton 119c205632 Merge pull request #29 from gnzlbg/arm_intrinsics
[arm] bitwise manipulation instructions
2017-09-21 11:24:58 -05:00
Alex Crichton f1f513d461 Fix Windows MSVC CI
Pass the `/OPT:NOICF` flag to the linker to ensure that all functions don't get
eliminated (somethign we don't want in this scenario)
2017-09-21 09:24:15 -07:00
Alex Crichton c77c903e88 Help debug missing assembly 2017-09-21 07:32:37 -07:00
gnzlbg 0ab8c0600d [assert-instr] simplify 2017-09-21 16:14:16 +02:00
gnzlbg 868399bcc4 [appveyor] enable panic backtraces 2017-09-21 13:49:03 +02:00
gnzlbg 800b43ec59 [assert-instr] compare only the instruction prefix
When comparing the assembly instructions against
the expected instruction, depending on the platform,
we might end up with `tzcntl != tzcnt`. This
commit truncates the instructions to the length
of the expected instruction, such that `tzcntl => tzcnt`
and the comparison succeeds.
2017-09-21 09:34:06 +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
Alex Crichton 8c89593883 Merge pull request #32 from alexcrichton/tests2
Migrate existing tests to #[assert_instr]
2017-09-20 12:33:41 -05: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
Dávid Kocsis d6dceccb33 SSE4.1 dot product instructions 2017-09-20 07:30:40 +02:00
gnzlbg e64f80e479 [abm] use lzcnt and popcnt features 2017-09-19 17:10:00 -04:00
gnzlbg 08a890a0a0 [tbm] check generated code 2017-09-19 17:10:00 -04:00
gnzlbg 59f6e21751 nitpicks, whitespace, etc 2017-09-19 17:10:00 -04:00
gnzlbg 4f1f53b707 [bmi] check assembly of bmi instructions 2017-09-19 17:10:00 -04:00
gnzlbg cb1db00983 [abm] check generated assembly 2017-09-19 17:10:00 -04:00
gnzlbg 9483950d3e [bmi2] check generated assembly 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 c2af1c3fea update 2017-09-17 19:02:18 -04:00
Andrew Gallant 46ae8c2afd add contributing guide 2017-09-17 18:46:43 -04:00
Andrew Gallant 81db783a91 0.0.2 2017-09-17 18:11:04 -04:00
Andrew Gallant edabaf0763 add doc link 2017-09-17 18:10:48 -04:00
Andrew Gallant baaa64258b add scratch 2017-09-17 18:09:04 -04:00
Andrew Gallant b2ac72c2fa prepare for publish 2017-09-17 18:08:32 -04:00
Andrew Gallant 8f490e5dff fix 2017-06-19 18:34:32 -04:00
Andrew Gallant f04dd91c71 add strange example that fails 2017-06-19 18:31:05 -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