%default {"preinstr":"", "load":"LOAD64_F(fa0, fa0f, a1)"} /* * Generic 64bit-to-32bit unary operation. Provide an "instr" line * that specifies an instruction that performs "result = op a0/a1", where * "result" is a 32-bit quantity in a0. * * For: long-to-float, double-to-int, double-to-float * If hard floating point support is available, use fa0 as the parameter, except for * long-to-float opcode. * (This would work for long-to-int, but that instruction is actually * an exact match for OP_MOVE.) * * On entry: * a0 = target dalvik register address * a1 = src dalvik register address * */ move rINST, a0 # save a0 #ifdef SOFT_FLOAT move t0, a1 # save a1 LOAD64(rARG0, rARG1, t0) # a0/a1<- vB/vB+1 $preinstr # optional op $instr # v0<- op, a0-a3 changed .L${opcode}_set_vreg: STORE(v0, rINST) # vA<- v0 #else $load $preinstr # optional op $instr_f # fv0 = result .L${opcode}_set_vreg_f: STORE_F(fv0, rINST) # vA<- fv0 #endif RETURN