gallivm: introduce 32x32->64bit lp_build_mul_32_lohi function
authorRoland Scheidegger <sroland@vmware.com>
Fri, 4 Nov 2016 03:55:09 +0000 (04:55 +0100)
committerRoland Scheidegger <sroland@vmware.com>
Tue, 8 Nov 2016 02:41:26 +0000 (03:41 +0100)
commit29279f44b3172ef3b84d470e70fc7684695ced4b
tree8fcbf94fde1aad70e60896e58606586974d81bd9
parentb0554c25e72777e974ac0dea37fd22e74e76b979
gallivm: introduce 32x32->64bit lp_build_mul_32_lohi function

This is used by shader umul_hi/imul_hi functions (and soon by draw).
It's actually useful separating this out on its own, however the real
reason for doing it is because we're using an optimized sse2 version,
since the code llvm generates is atrocious (since there's no widening
mul in llvm, and it does not recognize the widening mul pattern, so
it generates code for real 64x64->64bit mul, which the cpu can't do
natively, in contrast to 32x32->64bit mul which it could do).

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/auxiliary/gallivm/lp_bld_arit.c
src/gallium/auxiliary/gallivm/lp_bld_arit.h
src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c