fmlsl_advsimd_elt.xml */
| 9067 | |
| 9068 | /* fmlsl_advsimd_elt.xml */ |
| 9069 | int FMLSL_advsimd_elt(context *ctx, Instruction *instr) |
| 9070 | { |
| 9071 | int rc = DECODE_STATUS_UNMATCHED; |
| 9072 | /* class iclass_fmlsl */ |
| 9073 | /* 0|Q=x|U=0|01111|size[1]=1|sz=0|L=x|M=x|Rm=xxxx|opcode[3]=0|S=1|opcode[1:0]=00|H=x|0|Rn=xxxxx|Rd=xxxxx */ |
| 9074 | if((INSWORD & 0xBFC0F400)==0xF804000) { |
| 9075 | decode_fields32(ENC_FMLSL_ASIMDELEM_LH, ctx, instr); |
| 9076 | if(!HaveFP16MulNoRoundingToFP32Ext()) { |
| 9077 | UNDEFINED; |
| 9078 | } |
| 9079 | ctx->d = UINT(ctx->Rd); |
| 9080 | ctx->n = UINT(ctx->Rn); |
| 9081 | ctx->m = UINT(ctx->Rm); |
| 9082 | if(ctx->sz==1) { |
| 9083 | UNDEFINED; |
| 9084 | } |
| 9085 | ctx->index = UINT(((ctx->H<<2)|(ctx->L<<1)|ctx->M)); |
| 9086 | ctx->esize = 0x20; |
| 9087 | ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40; |
| 9088 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 9089 | ctx->sub_op = (ctx->S==1); |
| 9090 | ctx->part = 0; |
| 9091 | OK(ENC_FMLSL_ASIMDELEM_LH); |
| 9092 | } |
| 9093 | /* class iclass_fmlsl2 */ |
| 9094 | /* 0|Q=x|U=1|01111|size[1]=1|sz=0|L=x|M=x|Rm=xxxx|opcode[3]=1|S=1|opcode[1:0]=00|H=x|0|Rn=xxxxx|Rd=xxxxx */ |
| 9095 | if((INSWORD & 0xBFC0F400)==0x2F80C000) { |
| 9096 | decode_fields32(ENC_FMLSL2_ASIMDELEM_LH, ctx, instr); |
| 9097 | if(!HaveFP16MulNoRoundingToFP32Ext()) { |
| 9098 | UNDEFINED; |
| 9099 | } |
| 9100 | ctx->d = UINT(ctx->Rd); |
| 9101 | ctx->n = UINT(ctx->Rn); |
| 9102 | ctx->m = UINT(ctx->Rm); |
| 9103 | if(ctx->sz==1) { |
| 9104 | UNDEFINED; |
| 9105 | } |
| 9106 | ctx->index = UINT(((ctx->H<<2)|(ctx->L<<1)|ctx->M)); |
| 9107 | ctx->esize = 0x20; |
| 9108 | ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40; |
| 9109 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 9110 | ctx->sub_op = (ctx->S==1); |
| 9111 | ctx->part = 1; |
| 9112 | OK(ENC_FMLSL2_ASIMDELEM_LH); |
| 9113 | } |
| 9114 | return rc; |
| 9115 | } |
| 9116 | |
| 9117 | /* fmlsl_advsimd_vec.xml */ |
| 9118 | int FMLSL_advsimd_vec(context *ctx, Instruction *instr) |
no test coverage detected