frinta_float.xml */
| 10595 | |
| 10596 | /* frinta_float.xml */ |
| 10597 | int FRINTA_float(context *ctx, Instruction *instr) |
| 10598 | { |
| 10599 | int rc = DECODE_STATUS_UNMATCHED; |
| 10600 | /* class iclass_float */ |
| 10601 | /* M=0|0|S=0|11110|ftype=xx|1|opcode[5:3]=001|rmode=100|10000|Rn=xxxxx|Rd=xxxxx */ |
| 10602 | if((INSWORD & 0xFF3FFC00)==0x1E264000) { |
| 10603 | decode_fields32(ENC_FRINTA_H_FLOATDP1, ctx, instr); |
| 10604 | ctx->d = UINT(ctx->Rd); |
| 10605 | ctx->n = UINT(ctx->Rn); |
| 10606 | if(!ctx->ftype) { |
| 10607 | ctx->esize = 0x20; |
| 10608 | } |
| 10609 | else if(ctx->ftype==1) { |
| 10610 | ctx->esize = 0x40; |
| 10611 | } |
| 10612 | else if(ctx->ftype==2) { |
| 10613 | UNDEFINED; |
| 10614 | } |
| 10615 | else if(ctx->ftype==3) { |
| 10616 | if(HaveFP16Ext()) { |
| 10617 | ctx->esize = 0x10; |
| 10618 | } |
| 10619 | else { |
| 10620 | UNDEFINED; |
| 10621 | } |
| 10622 | } |
| 10623 | ctx->exact = FALSE; |
| 10624 | if(!(ctx->rmode&4)) { |
| 10625 | ctx->rounding = FPDecodeRounding(SLICE(ctx->rmode,1,0)); |
| 10626 | } |
| 10627 | else if(ctx->rmode==4) { |
| 10628 | ctx->rounding = FPRounding_TIEAWAY; |
| 10629 | } |
| 10630 | else if(ctx->rmode==5) { |
| 10631 | UNDEFINED; |
| 10632 | } |
| 10633 | else if(ctx->rmode==6) { |
| 10634 | ctx->rounding = FPRoundingMode(ctx->FPCR); |
| 10635 | ctx->exact = TRUE; |
| 10636 | } |
| 10637 | else if(ctx->rmode==7) { |
| 10638 | ctx->rounding = FPRoundingMode(ctx->FPCR); |
| 10639 | } |
| 10640 | if(ctx->ftype==3) OK(ENC_FRINTA_H_FLOATDP1); |
| 10641 | if(ctx->ftype==0) OK(ENC_FRINTA_S_FLOATDP1); |
| 10642 | if(ctx->ftype==1) OK(ENC_FRINTA_D_FLOATDP1); |
| 10643 | } |
| 10644 | return rc; |
| 10645 | } |
| 10646 | |
| 10647 | /* frinti_advsimd.xml */ |
| 10648 | int FRINTI_advsimd(context *ctx, Instruction *instr) |
no test coverage detected