Home | History | Annotate | Download | only in mips
      1 %verify "executed"
      2     /*
      3      * Signed 64-bit integer multiply.
      4      *
      5      * For JIT: op1 in a0/a1, op2 in a2/a3, return in v0/v1
      6      *
      7      * Consider WXxYZ (a1a0 x a3a2) with a long multiply:
      8      *
      9      *         a1   a0
     10      *   x     a3   a2
     11      *   -------------
     12      *       a2a1 a2a0
     13      *       a3a0
     14      *  a3a1 (<= unused)
     15      *  ---------------
     16      *         v1   v0
     17      *
     18      */
     19     /* mul-long vAA, vBB, vCC */
     20     mul     rRESULT1,rARG3,rARG0              #  v1= a3a0
     21     multu   rARG2,rARG0
     22     mfhi    t1
     23     mflo    rRESULT0                          #  v0= a2a0
     24     mul     t0,rARG2,rARG1                    #  t0= a2a1
     25     addu    rRESULT1,rRESULT1,t1              #  v1= a3a0 + hi(a2a0)
     26     addu    rRESULT1,rRESULT1,t0              #  v1= a3a0 + hi(a2a0) + a2a1;
     27     RETURN
     28