* Define _mm_aes*_si128 intrinsics
* Add tests for _mm_aes*_si128 intrinsics
These tests are based on the examples in Microsoft's documentation.
Same input should result in the same output in any case.
* Constify imm8 argument of aeskeygenassist
* Do not rely on internal layout of __m128
Use _mm_set_epi64x instead to construct constants.
* Move AES vendor intrinsics from x86_64 to i686
Although i686 does not have the AES New Instructions, making code
compatible across x86 and x64_64 tends to be easier if the intrinsics
are available everywhere.
* Pass constant for assert_instr(aeskeygenassist)
Pass a particular value for the disassembly test, so we end up with one
instruction, instead of the match arm that matches on all 256 values.
* Make aeskeygenassist imm8 argument i32, not u8
Intel documentation specifies it as an "8-bit round constant", but then
goes on to give it a type "const int", which translates to i32 in Rust.
The test that verifies the Rust signatures against Intel documentation
failed on this.
For now we will replicate the C API verbatim. Even when Rust could have
a more accurate type signature that makes passing values more than 8
bits impossible, rather than silently mapping out-of-range values to
255.
* Reflow doc comment as proposed by rustfmt
* Add module doc comment for i686::aes