fmaxnm_advsimd.xml */
| 8141 | |
| 8142 | /* fmaxnm_advsimd.xml */ |
| 8143 | int FMAXNM_advsimd(context *ctx, Instruction *instr) |
| 8144 | { |
| 8145 | int rc = DECODE_STATUS_UNMATCHED; |
| 8146 | /* class iclass_half */ |
| 8147 | /* 0|Q=x|U=0|01110|a=0|10|Rm=xxxxx|00|Op3=000|1|Rn=xxxxx|Rd=xxxxx */ |
| 8148 | if((INSWORD & 0xBFE0FC00)==0xE400400) { |
| 8149 | decode_fields32(ENC_FMAXNM_ASIMDSAMEFP16_ONLY, ctx, instr); |
| 8150 | if(!HaveFP16Ext()) { |
| 8151 | UNDEFINED; |
| 8152 | } |
| 8153 | ctx->d = UINT(ctx->Rd); |
| 8154 | ctx->n = UINT(ctx->Rn); |
| 8155 | ctx->m = UINT(ctx->Rm); |
| 8156 | ctx->esize = 0x10; |
| 8157 | ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40; |
| 8158 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 8159 | ctx->pair = (ctx->U==1); |
| 8160 | ctx->minimum = (ctx->a==1); |
| 8161 | OK(ENC_FMAXNM_ASIMDSAMEFP16_ONLY); |
| 8162 | } |
| 8163 | /* class iclass_single_and_double */ |
| 8164 | /* 0|Q=x|U=0|01110|o1=0|sz=x|1|Rm=xxxxx|opcode=11000|1|Rn=xxxxx|Rd=xxxxx */ |
| 8165 | if((INSWORD & 0xBFA0FC00)==0xE20C400) { |
| 8166 | decode_fields32(ENC_FMAXNM_ASIMDSAME_ONLY, ctx, instr); |
| 8167 | ctx->d = UINT(ctx->Rd); |
| 8168 | ctx->n = UINT(ctx->Rn); |
| 8169 | ctx->m = UINT(ctx->Rm); |
| 8170 | if(((ctx->sz<<1)|ctx->Q)==2) { |
| 8171 | UNDEFINED; |
| 8172 | } |
| 8173 | ctx->esize = (0x20) << (UINT(ctx->sz)); |
| 8174 | ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40; |
| 8175 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 8176 | ctx->pair = (ctx->U==1); |
| 8177 | ctx->minimum = (ctx->o1==1); |
| 8178 | OK(ENC_FMAXNM_ASIMDSAME_ONLY); |
| 8179 | } |
| 8180 | return rc; |
| 8181 | } |
| 8182 | |
| 8183 | /* fmaxnm_float.xml */ |
| 8184 | int FMAXNM_float(context *ctx, Instruction *instr) |
no test coverage detected