sqrdmlsh_advsimd_elt.xml */
| 22695 | |
| 22696 | /* sqrdmlsh_advsimd_elt.xml */ |
| 22697 | int SQRDMLSH_advsimd_elt(context *ctx, Instruction *instr) |
| 22698 | { |
| 22699 | int rc = DECODE_STATUS_UNMATCHED; |
| 22700 | /* class iclass_2reg_scalar */ |
| 22701 | /* 01|U=1|11111|size=xx|L=x|M=x|Rm=xxxx|opcode[3:2]=11|S=1|opcode[0]=1|H=x|0|Rn=xxxxx|Rd=xxxxx */ |
| 22702 | if((INSWORD & 0xFF00F400)==0x7F00F000) { |
| 22703 | decode_fields32(ENC_SQRDMLSH_ASISDELEM_R, ctx, instr); |
| 22704 | if(!HaveQRDMLAHExt()) { |
| 22705 | UNDEFINED; |
| 22706 | } |
| 22707 | ctx->idxdsize = (ctx->H==1) ? 0x80 : 0x40; |
| 22708 | if(ctx->size==1) { |
| 22709 | ctx->index = UINT(((ctx->H<<2)|(ctx->L<<1)|ctx->M)); |
| 22710 | ctx->Rmhi = 0; |
| 22711 | } |
| 22712 | else if(ctx->size==2) { |
| 22713 | ctx->index = UINT(((ctx->H<<1)|ctx->L)); |
| 22714 | ctx->Rmhi = ctx->M; |
| 22715 | } |
| 22716 | else { |
| 22717 | UNDEFINED; |
| 22718 | } |
| 22719 | ctx->d = UINT(ctx->Rd); |
| 22720 | ctx->n = UINT(ctx->Rn); |
| 22721 | ctx->m = UINT(((ctx->Rmhi<<4)|ctx->Rm)); |
| 22722 | ctx->esize = (8) << (UINT(ctx->size)); |
| 22723 | ctx->datasize = ctx->esize; |
| 22724 | ctx->elements = 1; |
| 22725 | ctx->rounding = TRUE; |
| 22726 | ctx->sub_op = (ctx->S==1); |
| 22727 | OK(ENC_SQRDMLSH_ASISDELEM_R); |
| 22728 | } |
| 22729 | /* class iclass_2reg_element */ |
| 22730 | /* 0|Q=x|U=1|01111|size=xx|L=x|M=x|Rm=xxxx|opcode[3:2]=11|S=1|opcode[0]=1|H=x|0|Rn=xxxxx|Rd=xxxxx */ |
| 22731 | if((INSWORD & 0xBF00F400)==0x2F00F000) { |
| 22732 | decode_fields32(ENC_SQRDMLSH_ASIMDELEM_R, ctx, instr); |
| 22733 | if(!HaveQRDMLAHExt()) { |
| 22734 | UNDEFINED; |
| 22735 | } |
| 22736 | ctx->idxdsize = (ctx->H==1) ? 0x80 : 0x40; |
| 22737 | if(ctx->size==1) { |
| 22738 | ctx->index = UINT(((ctx->H<<2)|(ctx->L<<1)|ctx->M)); |
| 22739 | ctx->Rmhi = 0; |
| 22740 | } |
| 22741 | else if(ctx->size==2) { |
| 22742 | ctx->index = UINT(((ctx->H<<1)|ctx->L)); |
| 22743 | ctx->Rmhi = ctx->M; |
| 22744 | } |
| 22745 | else { |
| 22746 | UNDEFINED; |
| 22747 | } |
| 22748 | ctx->d = UINT(ctx->Rd); |
| 22749 | ctx->n = UINT(ctx->Rn); |
| 22750 | ctx->m = UINT(((ctx->Rmhi<<4)|ctx->Rm)); |
| 22751 | ctx->esize = (8) << (UINT(ctx->size)); |
| 22752 | ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40; |
| 22753 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 22754 | ctx->rounding = TRUE; |
no test coverage detected