fmaxnmp_advsimd_vec.xml */
| 8063 | |
| 8064 | /* fmaxnmp_advsimd_vec.xml */ |
| 8065 | int FMAXNMP_advsimd_vec(context *ctx, Instruction *instr) |
| 8066 | { |
| 8067 | int rc = DECODE_STATUS_UNMATCHED; |
| 8068 | /* class iclass_half */ |
| 8069 | /* 0|Q=x|U=1|01110|a=0|10|Rm=xxxxx|00|Op3=000|1|Rn=xxxxx|Rd=xxxxx */ |
| 8070 | if((INSWORD & 0xBFE0FC00)==0x2E400400) { |
| 8071 | decode_fields32(ENC_FMAXNMP_ASIMDSAMEFP16_ONLY, ctx, instr); |
| 8072 | if(!HaveFP16Ext()) { |
| 8073 | UNDEFINED; |
| 8074 | } |
| 8075 | ctx->d = UINT(ctx->Rd); |
| 8076 | ctx->n = UINT(ctx->Rn); |
| 8077 | ctx->m = UINT(ctx->Rm); |
| 8078 | ctx->esize = 0x10; |
| 8079 | ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40; |
| 8080 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 8081 | ctx->pair = (ctx->U==1); |
| 8082 | ctx->minimum = (ctx->a==1); |
| 8083 | OK(ENC_FMAXNMP_ASIMDSAMEFP16_ONLY); |
| 8084 | } |
| 8085 | /* class iclass_single_and_double */ |
| 8086 | /* 0|Q=x|U=1|01110|o1=0|sz=x|1|Rm=xxxxx|opcode=11000|1|Rn=xxxxx|Rd=xxxxx */ |
| 8087 | if((INSWORD & 0xBFA0FC00)==0x2E20C400) { |
| 8088 | decode_fields32(ENC_FMAXNMP_ASIMDSAME_ONLY, ctx, instr); |
| 8089 | ctx->d = UINT(ctx->Rd); |
| 8090 | ctx->n = UINT(ctx->Rn); |
| 8091 | ctx->m = UINT(ctx->Rm); |
| 8092 | if(((ctx->sz<<1)|ctx->Q)==2) { |
| 8093 | UNDEFINED; |
| 8094 | } |
| 8095 | ctx->esize = (0x20) << (UINT(ctx->sz)); |
| 8096 | ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40; |
| 8097 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 8098 | ctx->pair = (ctx->U==1); |
| 8099 | ctx->minimum = (ctx->o1==1); |
| 8100 | OK(ENC_FMAXNMP_ASIMDSAME_ONLY); |
| 8101 | } |
| 8102 | return rc; |
| 8103 | } |
| 8104 | |
| 8105 | /* fmaxnmv_advsimd.xml */ |
| 8106 | int FMAXNMV_advsimd(context *ctx, Instruction *instr) |
no test coverage detected