diff options
| author | Chris Lattner <sabre@nondot.org> | 2010-08-23 17:30:29 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2010-08-23 17:30:29 +0000 |
| commit | a42202e0e49869e6a0ddb1a11b799378bf59e9a8 (patch) | |
| tree | 33b87835225a520731239e6b9cacc28c808d4150 | |
| parent | a73af6f6983f50484fdb05e7d5cd72f984dfafaf (diff) | |
| download | bcm5719-llvm-a42202e0e49869e6a0ddb1a11b799378bf59e9a8.tar.gz bcm5719-llvm-a42202e0e49869e6a0ddb1a11b799378bf59e9a8.zip | |
random improvement for variable shift codegen.
llvm-svn: 111813
| -rw-r--r-- | llvm/lib/Target/X86/README-SSE.txt | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/README-SSE.txt b/llvm/lib/Target/X86/README-SSE.txt index b6aba93f373..85cdd177819 100644 --- a/llvm/lib/Target/X86/README-SSE.txt +++ b/llvm/lib/Target/X86/README-SSE.txt @@ -2,8 +2,20 @@ // Random ideas for the X86 backend: SSE-specific stuff. //===---------------------------------------------------------------------===// -- Consider eliminating the unaligned SSE load intrinsics, replacing them with - unaligned LLVM load instructions. +//===---------------------------------------------------------------------===// + +SSE Variable shift can be custom lowered to something like this, which uses a +small table + unaligned load + shuffle instead of going through memory. + +__m128i_shift_right: + .byte 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 + .byte -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + +... +__m128i shift_right(__m128i value, unsigned long offset) { + return _mm_shuffle_epi8(value, + _mm_loadu_si128((__m128 *) (___m128i_shift_right + offset))); +} //===---------------------------------------------------------------------===// |

