fmul_advsimd_vec.xml */
| 9882 | |
| 9883 | /* fmul_advsimd_vec.xml */ |
| 9884 | int FMUL_advsimd_vec(context *ctx, Instruction *instr) |
| 9885 | { |
| 9886 | int rc = DECODE_STATUS_UNMATCHED; |
| 9887 | /* class iclass_half */ |
| 9888 | /* 0|Q=x|U=1|01110|a=0|10|Rm=xxxxx|00|opcode=011|1|Rn=xxxxx|Rd=xxxxx */ |
| 9889 | if((INSWORD & 0xBFE0FC00)==0x2E401C00) { |
| 9890 | decode_fields32(ENC_FMUL_ASIMDSAMEFP16_ONLY, ctx, instr); |
| 9891 | if(!HaveFP16Ext()) { |
| 9892 | UNDEFINED; |
| 9893 | } |
| 9894 | ctx->d = UINT(ctx->Rd); |
| 9895 | ctx->n = UINT(ctx->Rn); |
| 9896 | ctx->m = UINT(ctx->Rm); |
| 9897 | ctx->esize = 0x10; |
| 9898 | ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40; |
| 9899 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 9900 | OK(ENC_FMUL_ASIMDSAMEFP16_ONLY); |
| 9901 | } |
| 9902 | /* class iclass_single_and_double */ |
| 9903 | /* 0|Q=x|U=1|01110|size[1]=0|sz=x|1|Rm=xxxxx|opcode=11011|1|Rn=xxxxx|Rd=xxxxx */ |
| 9904 | if((INSWORD & 0xBFA0FC00)==0x2E20DC00) { |
| 9905 | decode_fields32(ENC_FMUL_ASIMDSAME_ONLY, ctx, instr); |
| 9906 | ctx->d = UINT(ctx->Rd); |
| 9907 | ctx->n = UINT(ctx->Rn); |
| 9908 | ctx->m = UINT(ctx->Rm); |
| 9909 | if(((ctx->sz<<1)|ctx->Q)==2) { |
| 9910 | UNDEFINED; |
| 9911 | } |
| 9912 | ctx->esize = (0x20) << (UINT(ctx->sz)); |
| 9913 | ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40; |
| 9914 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 9915 | OK(ENC_FMUL_ASIMDSAME_ONLY); |
| 9916 | } |
| 9917 | return rc; |
| 9918 | } |
| 9919 | |
| 9920 | /* fmul_float.xml */ |
| 9921 | int FMUL_float(context *ctx, Instruction *instr) |
no test coverage detected