llvmpipe: add POWER8 portability file - u_pwr8.h
authorOded Gabbay <oded.gabbay@gmail.com>
Thu, 3 Dec 2015 07:11:13 +0000 (09:11 +0200)
committerOded Gabbay <oded.gabbay@gmail.com>
Wed, 6 Jan 2016 12:54:16 +0000 (14:54 +0200)
commite99555ef0bf1b786a1bf1e93f3304507dbb6e939
tree52f453f225000a16e93846adce45cbd1ec66df97
parentafe88f66a8a9cf3c6bf6ea5d3e00589c22219c30
llvmpipe: add POWER8 portability file - u_pwr8.h

This file provides a portability layer that will make it easier to convert
SSE-based functions to VMX/VSX-based functions.

All the functions implemented in this file are prefixed using "vec_".
Therefore, when converting from SSE-based function, one needs to simply
replace the "_mm_" prefix of the SSE function being called to "vec_".

Having said that, not all functions could be converted as such, due to the
differences between the architectures. So, when doing such
conversion hurt the performance, I preferred to implement a more ad-hoc
solution. For example, converting the _mm_shuffle_epi32 needed to be done
using ad-hoc masks instead of a generic function.

All the functions in this file support both little-endian and big-endian
but currently the file is build only on POWER8 LE machine.

All of the functions are implemented using the Altivec/VMX intrinsics,
except one where I needed to use inline assembly (due to missing
intrinsic).

v2:
- Use vec_vgbbd instead of __builtin_vec_vgbbd
- Add an aligned load function
- Don't use typeof()
- Make file build only on POWER8 LE machine

Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
src/gallium/auxiliary/util/u_pwr8.h [new file with mode: 0644]