Home | History | Annotate | Download | only in mips
      1 %default {"preinstr":"", "load":"LOAD64_F(fa0, fa0f, a1)"}
      2     /*
      3      * Generic 64bit-to-32bit unary operation.  Provide an "instr" line
      4      * that specifies an instruction that performs "result = op a0/a1", where
      5      * "result" is a 32-bit quantity in a0.
      6      *
      7      * For: long-to-float, double-to-int, double-to-float
      8      * If hard floating point support is available, use fa0 as the parameter, except for
      9      * long-to-float opcode.
     10      * (This would work for long-to-int, but that instruction is actually
     11      * an exact match for OP_MOVE.)
     12      *
     13      * On entry:
     14      *     a0 = target dalvik register address
     15      *     a1 = src dalvik register address
     16      *
     17      */
     18     move rINST, a0                      # save a0
     19 #ifdef  SOFT_FLOAT
     20     move t0, a1                         # save a1
     21     LOAD64(rARG0, rARG1, t0)            # a0/a1<- vB/vB+1
     22     $preinstr                           # optional op
     23     $instr                              # v0<- op, a0-a3 changed
     24 .L${opcode}_set_vreg:
     25     STORE(v0, rINST)                    # vA<- v0
     26 #else
     27     $load
     28     $preinstr                           # optional op
     29     $instr_f                            # fv0 = result
     30 .L${opcode}_set_vreg_f:
     31     STORE_F(fv0, rINST)                 # vA<- fv0
     32 #endif
     33     RETURN
     34