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

Function LD2_advsimd_mult

arch/arm64/disassembler/decode2.c:12198–12264  ·  view source on GitHub ↗

ld2_advsimd_mult.xml */

Source from the content-addressed store, hash-verified

12196
12197/* ld2_advsimd_mult.xml */
12198int LD2_advsimd_mult(context *ctx, Instruction *instr)
12199{
12200 int rc = DECODE_STATUS_UNMATCHED;
12201 /* class iclass_as_no_post_index */
12202 /* 0|Q=x|0011000|L=1|000000|opcode=1000|size=xx|Rn=xxxxx|Rt=xxxxx */
12203 if((INSWORD & 0xBFFFF000)==0xC408000) {
12204 decode_fields32(ENC_LD2_ASISDLSE_R2, ctx, instr);
12205 ctx->t = UINT(ctx->Rt);
12206 ctx->n = UINT(ctx->Rn);
12207 ctx->m = 0;
12208 ctx->wback = FALSE;
12209 ctx->tag_checked = ctx->wback || ctx->n!=0x1f;
12210 OK(ENC_LD2_ASISDLSE_R2);
12211 }
12212 /* class iclass_as_post_index */
12213 /* 0|Q=x|0011001|L=1|0|Rm=xxxxx|opcode=1000|size=xx|Rn=xxxxx|Rt=xxxxx */
12214 if((INSWORD & 0xBFE0F000)==0xCC08000) {
12215 decode_fields32(ENC_LD2_ASISDLSEP_I2_I, ctx, instr);
12216 ctx->t = UINT(ctx->Rt);
12217 ctx->n = UINT(ctx->Rn);
12218 ctx->m = UINT(ctx->Rm);
12219 ctx->wback = TRUE;
12220 ctx->tag_checked = ctx->wback || ctx->n!=0x1f;
12221 if(ctx->Rm==0x1f) OK(ENC_LD2_ASISDLSEP_I2_I);
12222 if(ctx->Rm!=0x1f) OK(ENC_LD2_ASISDLSEP_R2_R);
12223 }
12224 /* post-decode pcode */
12225 ctx->memop = (ctx->L==1) ? MemOp_LOAD : MemOp_STORE;
12226 ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40;
12227 ctx->esize = (8) << (UINT(ctx->size));
12228 ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0);
12229 if(!ctx->opcode) {
12230 ctx->rpt = 1;
12231 ctx->selem = 4;
12232 }
12233 else if(ctx->opcode==2) {
12234 ctx->rpt = 4;
12235 ctx->selem = 1;
12236 }
12237 else if(ctx->opcode==4) {
12238 ctx->rpt = 1;
12239 ctx->selem = 3;
12240 }
12241 else if(ctx->opcode==6) {
12242 ctx->rpt = 3;
12243 ctx->selem = 1;
12244 }
12245 else if(ctx->opcode==7) {
12246 ctx->rpt = 1;
12247 ctx->selem = 1;
12248 }
12249 else if(ctx->opcode==8) {
12250 ctx->rpt = 1;
12251 ctx->selem = 2;
12252 }
12253 else if(ctx->opcode==10) {
12254 ctx->rpt = 2;
12255 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