[raspi-internals] vector questions

  • From: Volker Barthelmann <vb@xxxxxxxxxxxx>
  • To: raspi-internals@xxxxxxxxxxxxx
  • Date: Thu, 30 May 2013 14:39:30 +0200

Hi,

I am starting to implement vector stuff, but a lot is not quite working as expected. So I am starting with a few questions. Maybe someone can help.

First, the 48bit load/store instructions do not seem to work for me at all. (Of course, the huge number of unknown bits suggest that this has not been decoded yet.)

Anyway, these 80bit-instructions seem to load 16 32bit values and store them as expected:


1f0: 10f8 00c0 0000 00f0 0400 vld HY(y,0)0 3c, 0(r1+=r0) ; x=02 A=000 y=00 z=0000 1fa: 90f8 3000 0000 c003 0000 vst HY(y,0)0 3c, 0(r0+=r0) ; x=02 D=000 y=00 z=0000

However, those 48bit-instructions do not produce any results at the destination:

1d4: 00f0 00c0 0100 vld HY(y,0)0, (r1) ; x=00 r=0 A=000 y=000 z=0 1da: 80f0 3000 0000 vst HY(y,0)0, (r0) ; x=00 r=0 D=000 y=000 z=0

I did not really understand whether those are supposed to load 8, 16 or 32bit values and whether the width is supposed to come from the register encoding, but they did not seem to work for any bit width.

Next, I am confused about the H/HX/HY, especially with arithmetic instructions.

Originally, I assumed, using HY in arithmetic instructions would perform 32bit arithmetic. This does not seem to be the case, but rather cause a 16bit operation followed by a sign extend to 32bit. Is this correct?

Can the vc4 do 32bit vector operations with a single operation?
(Especially the many mul-variants suggest that it probably does not.)

Furthermore, does anybody already know how H/HX/HY are handled when different operations are used for the three operands?

Volker

Other related posts: