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

Function ST4_advsimd_mult

arch/arm64/disassembler/decode2.c:24362–24428  ·  view source on GitHub ↗

st4_advsimd_mult.xml */

Source from the content-addressed store, hash-verified

24360
24361/* st4_advsimd_mult.xml */
24362int ST4_advsimd_mult(context *ctx, Instruction *instr)
24363{
24364 int rc = DECODE_STATUS_UNMATCHED;
24365 /* class iclass_as_no_post_index */
24366 /* 0|Q=x|0011000|L=0|000000|opcode=0000|size=xx|Rn=xxxxx|Rt=xxxxx */
24367 if((INSWORD & 0xBFFFF000)==0xC000000) {
24368 decode_fields32(ENC_ST4_ASISDLSE_R4, ctx, instr);
24369 ctx->t = UINT(ctx->Rt);
24370 ctx->n = UINT(ctx->Rn);
24371 ctx->m = 0;
24372 ctx->wback = FALSE;
24373 ctx->tag_checked = ctx->wback || ctx->n!=0x1f;
24374 OK(ENC_ST4_ASISDLSE_R4);
24375 }
24376 /* class iclass_as_post_index */
24377 /* 0|Q=x|0011001|L=0|0|Rm=xxxxx|opcode=0000|size=xx|Rn=xxxxx|Rt=xxxxx */
24378 if((INSWORD & 0xBFE0F000)==0xC800000) {
24379 decode_fields32(ENC_ST4_ASISDLSEP_I4_I, ctx, instr);
24380 ctx->t = UINT(ctx->Rt);
24381 ctx->n = UINT(ctx->Rn);
24382 ctx->m = UINT(ctx->Rm);
24383 ctx->wback = TRUE;
24384 ctx->tag_checked = ctx->wback || ctx->n!=0x1f;
24385 if(ctx->Rm==0x1f) OK(ENC_ST4_ASISDLSEP_I4_I);
24386 if(ctx->Rm!=0x1f) OK(ENC_ST4_ASISDLSEP_R4_R);
24387 }
24388 /* post-decode pcode */
24389 ctx->memop = (ctx->L==1) ? MemOp_LOAD : MemOp_STORE;
24390 ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40;
24391 ctx->esize = (8) << (UINT(ctx->size));
24392 ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0);
24393 if(!ctx->opcode) {
24394 ctx->rpt = 1;
24395 ctx->selem = 4;
24396 }
24397 else if(ctx->opcode==2) {
24398 ctx->rpt = 4;
24399 ctx->selem = 1;
24400 }
24401 else if(ctx->opcode==4) {
24402 ctx->rpt = 1;
24403 ctx->selem = 3;
24404 }
24405 else if(ctx->opcode==6) {
24406 ctx->rpt = 3;
24407 ctx->selem = 1;
24408 }
24409 else if(ctx->opcode==7) {
24410 ctx->rpt = 1;
24411 ctx->selem = 1;
24412 }
24413 else if(ctx->opcode==8) {
24414 ctx->rpt = 1;
24415 ctx->selem = 2;
24416 }
24417 else if(ctx->opcode==10) {
24418 ctx->rpt = 2;
24419 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