MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / SQRDMLSH_advsimd_elt

Function SQRDMLSH_advsimd_elt

arch/arm64/disassembler/decode2.c:22697–22759  ·  view source on GitHub ↗

sqrdmlsh_advsimd_elt.xml */

Source from the content-addressed store, hash-verified

22695
22696/* sqrdmlsh_advsimd_elt.xml */
22697int 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;

Callers 2

decode_iclass_asisdelemFunction · 0.85
decode_iclass_asimdelemFunction · 0.85

Calls 1

decode_fields32Function · 0.85

Tested by

no test coverage detected