• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1    /*
2     * Generic 64-bit floating-point "/2addr" binary operation.
3     * Provide an "instr" line that specifies an instruction that
4     * performs "fv0 = fa0 op fa1".
5     * This could be an MIPS instruction or a function call.
6     *
7     * For: add-double/2addr, sub-double/2addr, mul-double/2addr,
8     *      div-double/2addr, rem-double/2addr
9     */
10    /* binop/2addr vA, vB */
11    GET_OPA4(rOBJ)                         #  rOBJ <- A+
12    GET_OPB(a1)                            #  a1 <- B
13    EAS2(a1, rFP, a1)                      #  a1 <- &fp[B]
14    EAS2(t0, rFP, rOBJ)                    #  t0 <- &fp[A]
15    LOAD64_F(fa0, fa0f, t0)
16    LOAD64_F(fa1, fa1f, a1)
17
18    FETCH_ADVANCE_INST(1)                  #  advance rPC, load rINST
19    $instr
20    GET_INST_OPCODE(t0)                    #  extract opcode from rINST
21    SET_VREG64_F_GOTO(fv0, fv0f, rOBJ, t0)  #  vA/vA+1 <- fv0
22