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