funopNarrower.S revision a8b91c52fd8a90b784835dfe1f8898035266c4dd
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