if (dst == src3) {                                                           \
    instr(dst.fp().V##format(), src1.fp().V##format(), src2.fp().V##format()); \
  } else if (dst != src1 && dst != src2) {                                     \
    Mov(dst.fp().V##format(), src3.fp().V##format());                          \
    instr(dst.fp().V##format(), src1.fp().V##format(), src2.fp().V##format()); \
  } else {                                                                     \
    DCHECK(dst == src1 || dst == src2);                                        \
    UseScratchRegisterScope temps(this);                                       \
    VRegister tmp = temps.AcquireV(kFormat##format);                           \
    Mov(tmp, src3.fp().V##format());                                           \
    instr(tmp, src1.fp().V##format(), src2.fp().V##format());                  \
    Mov(dst.fp().V##format(), tmp);                                            \
  }