fsub_float.xml */
| 11610 | |
| 11611 | /* fsub_float.xml */ |
| 11612 | int FSUB_float(context *ctx, Instruction *instr) |
| 11613 | { |
| 11614 | int rc = DECODE_STATUS_UNMATCHED; |
| 11615 | /* class iclass_float */ |
| 11616 | /* M=0|0|S=0|11110|ftype=xx|1|Rm=xxxxx|opcode[3:1]=001|op=1|10|Rn=xxxxx|Rd=xxxxx */ |
| 11617 | if((INSWORD & 0xFF20FC00)==0x1E203800) { |
| 11618 | decode_fields32(ENC_FSUB_H_FLOATDP2, ctx, instr); |
| 11619 | ctx->d = UINT(ctx->Rd); |
| 11620 | ctx->n = UINT(ctx->Rn); |
| 11621 | ctx->m = UINT(ctx->Rm); |
| 11622 | if(!ctx->ftype) { |
| 11623 | ctx->esize = 0x20; |
| 11624 | } |
| 11625 | else if(ctx->ftype==1) { |
| 11626 | ctx->esize = 0x40; |
| 11627 | } |
| 11628 | else if(ctx->ftype==2) { |
| 11629 | UNDEFINED; |
| 11630 | } |
| 11631 | else if(ctx->ftype==3) { |
| 11632 | if(HaveFP16Ext()) { |
| 11633 | ctx->esize = 0x10; |
| 11634 | } |
| 11635 | else { |
| 11636 | UNDEFINED; |
| 11637 | } |
| 11638 | } |
| 11639 | ctx->sub_op = (ctx->op==1); |
| 11640 | if(ctx->ftype==3) OK(ENC_FSUB_H_FLOATDP2); |
| 11641 | if(ctx->ftype==0) OK(ENC_FSUB_S_FLOATDP2); |
| 11642 | if(ctx->ftype==1) OK(ENC_FSUB_D_FLOATDP2); |
| 11643 | } |
| 11644 | return rc; |
| 11645 | } |
| 11646 | |
| 11647 | /* gmi.xml */ |
| 11648 | int GMI(context *ctx, Instruction *instr) |
no test coverage detected