GC3000 supports some 4-wide integer ops

Wladimir J. van der Laan laanwj at gmail.com
Fri Dec 9 08:37:03 UTC 2016


On Thu, Dec 08, 2016 at 01:40:50PM +0100, Wladimir J. van der Laan wrote:
> 
> Just something I happened to stumble upon after updating verify_ops in
> etnaviv_gpu_tests for GC3000. There, some of the integer shader op tests were
> failing.
> 
> First I thought they broke some instructions, but it turns out that the bitwise
> instructions went from 1-wide to 4-wide!
> 
> - add.u32 and imul variants are still scalar.

Wrong: the integer add instruction has also become 4-wide SIMD!

I was testing the add int instruction wrongly in verifyops.

(e.g. the test harness was testing

    0x00841001, 0x00202800, 0x80000000, 0x00000038
    0: add.u32    t4.x___, t2.xxxx, void, t3.xxxx

instead of:

    0x07841001, 0x39202800, 0x80000000, 0x00390038,
    0: add.u32    t4, t2, void, t3

... so my observations about it are partially wrong. Will update isa.xml)

I checked if the same mistake was made for imullo0/imulhi0/imadlo0 but no -
the integer *multiplications* are really still scalar. This makes some sense
as an integer multiplier is an expensive piece of circuitry to spam
four times, can't really re-task the floating point multiplier for it either
due to the larger range.

Wladimir


More information about the etnaviv mailing list