OperationCheckFPAdvSIMDEnabled64();
bits(datasize) operand1 = V[n];
bits(datasize) operand2 = V[m];
bits(datasize) operand3 = V[d];
bits(datasize) result;
bits(esize) element1;
bits(esize) element2;
bits(esize) element3;
bits(esize) element4;
FPCRType fpcr = FPCR[];
for e = 0 to (elements DIV 2) -1
case rot of
when '00'
element1 = Elem[operand2, e*2, esize];
element2 = Elem[operand1, e*2, esize];
element3 = Elem[operand2, e*2+1, esize];
element4 = Elem[operand1, e*2, esize];
when '01'
element1 = FPNeg(Elem[operand2, e*2+1, esize]);
element2 = Elem[operand1, e*2+1, esize];
element3 = Elem[operand2, e*2, esize];
element4 = Elem[operand1, e*2+1, esize];
when '10'
element1 = FPNeg(Elem[operand2, e*2, esize]);
element2 = Elem[operand1, e*2, esize];
element3 = FPNeg(Elem[operand2, e*2+1, esize]);
element4 = Elem[operand1, e*2, esize];
when '11'
element1 = Elem[operand2, e*2+1, esize];
element2 = Elem[operand1, e*2+1, esize];
element3 = FPNeg(Elem[operand2, e*2, esize]);
element4 = Elem[operand1, e*2+1, esize];
Elem[result, e*2, esize] = FPMulAdd(Elem[operand3, e*2, esize], element2, element1, fpcr);
Elem[result, e*2+1, esize] = FPMulAdd(Elem[operand3, e*2+1, esize], element4, element3, fpcr);
V[d] = result;
|