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

Function LD3_advsimd_mult

arch/arm64/disassembler/decode2.c:12414–12480  ·  view source on GitHub ↗

ld3_advsimd_mult.xml */

Source from the content-addressed store, hash-verified

12412
12413/* ld3_advsimd_mult.xml */
12414int LD3_advsimd_mult(context *ctx, Instruction *instr)
12415{
12416 int rc = DECODE_STATUS_UNMATCHED;
12417 /* class iclass_as_no_post_index */
12418 /* 0|Q=x|0011000|L=1|000000|opcode=0100|size=xx|Rn=xxxxx|Rt=xxxxx */
12419 if((INSWORD & 0xBFFFF000)==0xC404000) {
12420 decode_fields32(ENC_LD3_ASISDLSE_R3, ctx, instr);
12421 ctx->t = UINT(ctx->Rt);
12422 ctx->n = UINT(ctx->Rn);
12423 ctx->m = 0;
12424 ctx->wback = FALSE;
12425 ctx->tag_checked = ctx->wback || ctx->n!=0x1f;
12426 OK(ENC_LD3_ASISDLSE_R3);
12427 }
12428 /* class iclass_as_post_index */
12429 /* 0|Q=x|0011001|L=1|0|Rm=xxxxx|opcode=0100|size=xx|Rn=xxxxx|Rt=xxxxx */
12430 if((INSWORD & 0xBFE0F000)==0xCC04000) {
12431 decode_fields32(ENC_LD3_ASISDLSEP_I3_I, ctx, instr);
12432 ctx->t = UINT(ctx->Rt);
12433 ctx->n = UINT(ctx->Rn);
12434 ctx->m = UINT(ctx->Rm);
12435 ctx->wback = TRUE;
12436 ctx->tag_checked = ctx->wback || ctx->n!=0x1f;
12437 if(ctx->Rm==0x1f) OK(ENC_LD3_ASISDLSEP_I3_I);
12438 if(ctx->Rm!=0x1f) OK(ENC_LD3_ASISDLSEP_R3_R);
12439 }
12440 /* post-decode pcode */
12441 ctx->memop = (ctx->L==1) ? MemOp_LOAD : MemOp_STORE;
12442 ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40;
12443 ctx->esize = (8) << (UINT(ctx->size));
12444 ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0);
12445 if(!ctx->opcode) {
12446 ctx->rpt = 1;
12447 ctx->selem = 4;
12448 }
12449 else if(ctx->opcode==2) {
12450 ctx->rpt = 4;
12451 ctx->selem = 1;
12452 }
12453 else if(ctx->opcode==4) {
12454 ctx->rpt = 1;
12455 ctx->selem = 3;
12456 }
12457 else if(ctx->opcode==6) {
12458 ctx->rpt = 3;
12459 ctx->selem = 1;
12460 }
12461 else if(ctx->opcode==7) {
12462 ctx->rpt = 1;
12463 ctx->selem = 1;
12464 }
12465 else if(ctx->opcode==8) {
12466 ctx->rpt = 1;
12467 ctx->selem = 2;
12468 }
12469 else if(ctx->opcode==10) {
12470 ctx->rpt = 2;
12471 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