fmin_advsimd.xml */
| 8750 | |
| 8751 | /* fmin_advsimd.xml */ |
| 8752 | int FMIN_advsimd(context *ctx, Instruction *instr) |
| 8753 | { |
| 8754 | int rc = DECODE_STATUS_UNMATCHED; |
| 8755 | /* class iclass_half */ |
| 8756 | /* 0|Q=x|U=0|01110|o1=1|10|Rm=xxxxx|00|opcode=110|1|Rn=xxxxx|Rd=xxxxx */ |
| 8757 | if((INSWORD & 0xBFE0FC00)==0xEC03400) { |
| 8758 | decode_fields32(ENC_FMIN_ASIMDSAMEFP16_ONLY, ctx, instr); |
| 8759 | if(!HaveFP16Ext()) { |
| 8760 | UNDEFINED; |
| 8761 | } |
| 8762 | ctx->d = UINT(ctx->Rd); |
| 8763 | ctx->n = UINT(ctx->Rn); |
| 8764 | ctx->m = UINT(ctx->Rm); |
| 8765 | ctx->esize = 0x10; |
| 8766 | ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40; |
| 8767 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 8768 | ctx->pair = (ctx->U==1); |
| 8769 | ctx->minimum = (ctx->o1==1); |
| 8770 | OK(ENC_FMIN_ASIMDSAMEFP16_ONLY); |
| 8771 | } |
| 8772 | /* class iclass_single_and_double */ |
| 8773 | /* 0|Q=x|U=0|01110|o1=1|sz=x|1|Rm=xxxxx|opcode=11110|1|Rn=xxxxx|Rd=xxxxx */ |
| 8774 | if((INSWORD & 0xBFA0FC00)==0xEA0F400) { |
| 8775 | decode_fields32(ENC_FMIN_ASIMDSAME_ONLY, ctx, instr); |
| 8776 | ctx->d = UINT(ctx->Rd); |
| 8777 | ctx->n = UINT(ctx->Rn); |
| 8778 | ctx->m = UINT(ctx->Rm); |
| 8779 | if(((ctx->sz<<1)|ctx->Q)==2) { |
| 8780 | UNDEFINED; |
| 8781 | } |
| 8782 | ctx->esize = (0x20) << (UINT(ctx->sz)); |
| 8783 | ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40; |
| 8784 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 8785 | ctx->pair = (ctx->U==1); |
| 8786 | ctx->minimum = (ctx->o1==1); |
| 8787 | OK(ENC_FMIN_ASIMDSAME_ONLY); |
| 8788 | } |
| 8789 | return rc; |
| 8790 | } |
| 8791 | |
| 8792 | /* fmin_float.xml */ |
| 8793 | int FMIN_float(context *ctx, Instruction *instr) |
no test coverage detected