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

Function LD4_advsimd_mult

arch/arm64/disassembler/decode2.c:12630–12696  ·  view source on GitHub ↗

ld4_advsimd_mult.xml */

Source from the content-addressed store, hash-verified

12628
12629/* ld4_advsimd_mult.xml */
12630int LD4_advsimd_mult(context *ctx, Instruction *instr)
12631{
12632 int rc = DECODE_STATUS_UNMATCHED;
12633 /* class iclass_as_no_post_index */
12634 /* 0|Q=x|0011000|L=1|000000|opcode=0000|size=xx|Rn=xxxxx|Rt=xxxxx */
12635 if((INSWORD & 0xBFFFF000)==0xC400000) {
12636 decode_fields32(ENC_LD4_ASISDLSE_R4, ctx, instr);
12637 ctx->t = UINT(ctx->Rt);
12638 ctx->n = UINT(ctx->Rn);
12639 ctx->m = 0;
12640 ctx->wback = FALSE;
12641 ctx->tag_checked = ctx->wback || ctx->n!=0x1f;
12642 OK(ENC_LD4_ASISDLSE_R4);
12643 }
12644 /* class iclass_as_post_index */
12645 /* 0|Q=x|0011001|L=1|0|Rm=xxxxx|opcode=0000|size=xx|Rn=xxxxx|Rt=xxxxx */
12646 if((INSWORD & 0xBFE0F000)==0xCC00000) {
12647 decode_fields32(ENC_LD4_ASISDLSEP_I4_I, ctx, instr);
12648 ctx->t = UINT(ctx->Rt);
12649 ctx->n = UINT(ctx->Rn);
12650 ctx->m = UINT(ctx->Rm);
12651 ctx->wback = TRUE;
12652 ctx->tag_checked = ctx->wback || ctx->n!=0x1f;
12653 if(ctx->Rm==0x1f) OK(ENC_LD4_ASISDLSEP_I4_I);
12654 if(ctx->Rm!=0x1f) OK(ENC_LD4_ASISDLSEP_R4_R);
12655 }
12656 /* post-decode pcode */
12657 ctx->memop = (ctx->L==1) ? MemOp_LOAD : MemOp_STORE;
12658 ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40;
12659 ctx->esize = (8) << (UINT(ctx->size));
12660 ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0);
12661 if(!ctx->opcode) {
12662 ctx->rpt = 1;
12663 ctx->selem = 4;
12664 }
12665 else if(ctx->opcode==2) {
12666 ctx->rpt = 4;
12667 ctx->selem = 1;
12668 }
12669 else if(ctx->opcode==4) {
12670 ctx->rpt = 1;
12671 ctx->selem = 3;
12672 }
12673 else if(ctx->opcode==6) {
12674 ctx->rpt = 3;
12675 ctx->selem = 1;
12676 }
12677 else if(ctx->opcode==7) {
12678 ctx->rpt = 1;
12679 ctx->selem = 1;
12680 }
12681 else if(ctx->opcode==8) {
12682 ctx->rpt = 1;
12683 ctx->selem = 2;
12684 }
12685 else if(ctx->opcode==10) {
12686 ctx->rpt = 2;
12687 ctx->selem = 1;

Callers 2

decode_iclass_asisdlseFunction · 0.85
decode_iclass_asisdlsepFunction · 0.85

Calls 1

decode_fields32Function · 0.85

Tested by

no test coverage detected