blob: e36f1f874d18482a5b92dab5e4c8fff92c6fd7f1 [file] [log] [blame]
%def fbinopWide2addr(instr=""):
/*
* Generic 64-bit floating-point "/2addr" binary operation.
* Provide an "instr" line that specifies an instruction that
* performs "fv0 = fa0 op fa1".
* This could be an MIPS instruction or a function call.
*
* For: add-double/2addr, sub-double/2addr, mul-double/2addr,
* div-double/2addr, rem-double/2addr
*/
/* binop/2addr vA, vB */
GET_OPA4(rOBJ) # rOBJ <- A+
GET_OPB(a1) # a1 <- B
EAS2(a1, rFP, a1) # a1 <- &fp[B]
EAS2(t0, rFP, rOBJ) # t0 <- &fp[A]
LOAD64_F(fa0, fa0f, t0)
LOAD64_F(fa1, fa1f, a1)
FETCH_ADVANCE_INST(1) # advance rPC, load rINST
$instr
GET_INST_OPCODE(t0) # extract opcode from rINST
SET_VREG64_F_GOTO(fv0, fv0f, rOBJ, t0) # vA/vA+1 <- fv0