STREAMS 2
TYPE DOUBLE
FLOPS 3
BYTES 16

.set vec0,0; .set vec1,1; .set vec2,2; .set vec3,3;
.set vec4,4; .set vec5,5; .set vec6,6; .set vec7,7;
.set vec8,8; .set vec9,9; .set vec10,10; .set vec11,11;

mtctr r3            # move to count register
li r7, 0            # load immediate value of 0 into r7 (used as offset in addressing)

xvsubdp vec0, vec0, vec0    # set to zero
xvsubdp vec1, vec1, vec1    # set to zero
xvsubdp vec2, vec2, vec2    # set to zero
xvsubdp vec3, vec3, vec3    # set to zero
xvsubdp vec4, vec4, vec4    # set to zero
xvsubdp vec5, vec5, vec5    # set to zero
xvsubdp vec10, vec10, vec10 # set to zero

LOOP 1

lxvx vec0, STR0, r7
lxvx vec10, STR1, r7

xsmaddadp vec0, vec1, vec10 # uses both loaded values and a constant
xsmaddadp vec0, vec3, vec4  # has to wait for vec0 from previous FMA, has to wait for vec0 from previous iteration's mul
xsmuldp vec4, vec0, vec5   # has to wait for vec0 from previous FMA
stxvx vec4, STR1, r7

addi r7, r7, 8
