Home | History | Annotate | Download | only in mips64
      1 %default {}
      2     /*
      3      * Compare two floating-point values.  Puts 0, 1, or -1 into the
      4      * destination register based on the results of the comparison.
      5      *
      6      * For: cmpl-double, cmpg-double
      7      */
      8     /* op vAA, vBB, vCC */
      9     srl     a4, rINST, 8                # a4 <- AA
     10     lbu     a2, 2(rPC)                  # a2 <- BB
     11     lbu     a3, 3(rPC)                  # a3 <- CC
     12     GET_VREG_DOUBLE f0, a2              # f0 <- vBB
     13     GET_VREG_DOUBLE f1, a3              # f1 <- vCC
     14     cmp.eq.d f2, f0, f1
     15     li      a0, 0
     16     bc1nez  f2, 1f                      # done if vBB == vCC (ordered)
     17     .if $gt_bias
     18     cmp.lt.d f2, f0, f1
     19     li      a0, -1
     20     bc1nez  f2, 1f                      # done if vBB < vCC (ordered)
     21     li      a0, 1                       # vBB > vCC or unordered
     22     .else
     23     cmp.lt.d f2, f1, f0
     24     li      a0, 1
     25     bc1nez  f2, 1f                      # done if vBB > vCC (ordered)
     26     li      a0, -1                      # vBB < vCC or unordered
     27     .endif
     28 1:
     29     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
     30     GET_INST_OPCODE v0                  # extract opcode from rINST
     31     SET_VREG a0, a4                     # vAA <- a0
     32     GOTO_OPCODE v0                      # jump to next instruction
     33