| %default {} |
| /* |
| * Specialised 64-bit floating point operation. |
| * |
| * Note: The result will be returned in d2. |
| * |
| * For: long-to-double |
| */ |
| mov r3, rINST, lsr #12 @ r3<- B |
| ubfx r9, rINST, #8, #4 @ r9<- A |
| VREG_INDEX_TO_ADDR r3, r3 @ r3<- &fp[B] |
| VREG_INDEX_TO_ADDR r9, r9 @ r9<- &fp[A] |
| vldr d0, [r3] @ d0<- vAA |
| FETCH_ADVANCE_INST 1 @ advance rPC, load rINST |
| |
| vcvt.f64.s32 d1, s1 @ d1<- (double)(vAAh) |
| vcvt.f64.u32 d2, s0 @ d2<- (double)(vAAl) |
| vldr d3, constval$opcode |
| vmla.f64 d2, d1, d3 @ d2<- vAAh*2^32 + vAAl |
| |
| GET_INST_OPCODE ip @ extract opcode from rINST |
| vstr.64 d2, [r9] @ vAA<- d2 |
| GOTO_OPCODE ip @ jump to next instruction |
| |
| /* literal pool helper */ |
| constval${opcode}: |
| .8byte 0x41f0000000000000 |