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

Function ST3_advsimd_mult

arch/arm64/disassembler/decode2.c:24215–24281  ·  view source on GitHub ↗

st3_advsimd_mult.xml */

Source from the content-addressed store, hash-verified

24213
24214/* st3_advsimd_mult.xml */
24215int ST3_advsimd_mult(context *ctx, Instruction *instr)
24216{
24217 int rc = DECODE_STATUS_UNMATCHED;
24218 /* class iclass_as_no_post_index */
24219 /* 0|Q=x|0011000|L=0|000000|opcode=0100|size=xx|Rn=xxxxx|Rt=xxxxx */
24220 if((INSWORD & 0xBFFFF000)==0xC004000) {
24221 decode_fields32(ENC_ST3_ASISDLSE_R3, ctx, instr);
24222 ctx->t = UINT(ctx->Rt);
24223 ctx->n = UINT(ctx->Rn);
24224 ctx->m = 0;
24225 ctx->wback = FALSE;
24226 ctx->tag_checked = ctx->wback || ctx->n!=0x1f;
24227 OK(ENC_ST3_ASISDLSE_R3);
24228 }
24229 /* class iclass_as_post_index */
24230 /* 0|Q=x|0011001|L=0|0|Rm=xxxxx|opcode=0100|size=xx|Rn=xxxxx|Rt=xxxxx */
24231 if((INSWORD & 0xBFE0F000)==0xC804000) {
24232 decode_fields32(ENC_ST3_ASISDLSEP_I3_I, ctx, instr);
24233 ctx->t = UINT(ctx->Rt);
24234 ctx->n = UINT(ctx->Rn);
24235 ctx->m = UINT(ctx->Rm);
24236 ctx->wback = TRUE;
24237 ctx->tag_checked = ctx->wback || ctx->n!=0x1f;
24238 if(ctx->Rm==0x1f) OK(ENC_ST3_ASISDLSEP_I3_I);
24239 if(ctx->Rm!=0x1f) OK(ENC_ST3_ASISDLSEP_R3_R);
24240 }
24241 /* post-decode pcode */
24242 ctx->memop = (ctx->L==1) ? MemOp_LOAD : MemOp_STORE;
24243 ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40;
24244 ctx->esize = (8) << (UINT(ctx->size));
24245 ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0);
24246 if(!ctx->opcode) {
24247 ctx->rpt = 1;
24248 ctx->selem = 4;
24249 }
24250 else if(ctx->opcode==2) {
24251 ctx->rpt = 4;
24252 ctx->selem = 1;
24253 }
24254 else if(ctx->opcode==4) {
24255 ctx->rpt = 1;
24256 ctx->selem = 3;
24257 }
24258 else if(ctx->opcode==6) {
24259 ctx->rpt = 3;
24260 ctx->selem = 1;
24261 }
24262 else if(ctx->opcode==7) {
24263 ctx->rpt = 1;
24264 ctx->selem = 1;
24265 }
24266 else if(ctx->opcode==8) {
24267 ctx->rpt = 1;
24268 ctx->selem = 2;
24269 }
24270 else if(ctx->opcode==10) {
24271 ctx->rpt = 2;
24272 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