Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
crypto_aesctr_aesni: workaround for missing _mm_loadu_si64
As it happens, both intrinsics have the same "Operation" description in the Intel Intrincs Guide [1] (provided that we interpret the "MAX" byte as 127, which I think is fair). _mm_loadu_si64: dst[63:0] := MEM[mem_addr+63:mem_addr] dst[MAX:64] := 0 _mm_load_sd: dst[63:0] := MEM[mem_addr+63:mem_addr] dst[127:64] := 0 [1] https://software.intel.com/sites/landingpage/IntrinsicsGuide/#techs=SSE,SSE2&expand=3340,3340,3421,3421,3340,3421,3340&cats=Load The actual assembly instructions vary, as do the "description" fields -- for _mm_load_si64, there's no textual definition of the upper 64 bits. Interestingly, it looks like gcc7 and gcc8 both compile our load_64() function into movq (which is _mm_loadu_si64), rather than movsd (which is _mm_load_sd).
- Loading branch information