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

Function ST2_advsimd_mult

arch/arm64/disassembler/decode2.c:24068–24134  ·  view source on GitHub ↗

st2_advsimd_mult.xml */

Source from the content-addressed store, hash-verified

24066
24067/* st2_advsimd_mult.xml */
24068int ST2_advsimd_mult(context *ctx, Instruction *instr)
24069{
24070 int rc = DECODE_STATUS_UNMATCHED;
24071 /* class iclass_as_no_post_index */
24072 /* 0|Q=x|0011000|L=0|000000|opcode=1000|size=xx|Rn=xxxxx|Rt=xxxxx */
24073 if((INSWORD & 0xBFFFF000)==0xC008000) {
24074 decode_fields32(ENC_ST2_ASISDLSE_R2, ctx, instr);
24075 ctx->t = UINT(ctx->Rt);
24076 ctx->n = UINT(ctx->Rn);
24077 ctx->m = 0;
24078 ctx->wback = FALSE;
24079 ctx->tag_checked = ctx->wback || ctx->n!=0x1f;
24080 OK(ENC_ST2_ASISDLSE_R2);
24081 }
24082 /* class iclass_as_post_index */
24083 /* 0|Q=x|0011001|L=0|0|Rm=xxxxx|opcode=1000|size=xx|Rn=xxxxx|Rt=xxxxx */
24084 if((INSWORD & 0xBFE0F000)==0xC808000) {
24085 decode_fields32(ENC_ST2_ASISDLSEP_I2_I, ctx, instr);
24086 ctx->t = UINT(ctx->Rt);
24087 ctx->n = UINT(ctx->Rn);
24088 ctx->m = UINT(ctx->Rm);
24089 ctx->wback = TRUE;
24090 ctx->tag_checked = ctx->wback || ctx->n!=0x1f;
24091 if(ctx->Rm==0x1f) OK(ENC_ST2_ASISDLSEP_I2_I);
24092 if(ctx->Rm!=0x1f) OK(ENC_ST2_ASISDLSEP_R2_R);
24093 }
24094 /* post-decode pcode */
24095 ctx->memop = (ctx->L==1) ? MemOp_LOAD : MemOp_STORE;
24096 ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40;
24097 ctx->esize = (8) << (UINT(ctx->size));
24098 ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0);
24099 if(!ctx->opcode) {
24100 ctx->rpt = 1;
24101 ctx->selem = 4;
24102 }
24103 else if(ctx->opcode==2) {
24104 ctx->rpt = 4;
24105 ctx->selem = 1;
24106 }
24107 else if(ctx->opcode==4) {
24108 ctx->rpt = 1;
24109 ctx->selem = 3;
24110 }
24111 else if(ctx->opcode==6) {
24112 ctx->rpt = 3;
24113 ctx->selem = 1;
24114 }
24115 else if(ctx->opcode==7) {
24116 ctx->rpt = 1;
24117 ctx->selem = 1;
24118 }
24119 else if(ctx->opcode==8) {
24120 ctx->rpt = 1;
24121 ctx->selem = 2;
24122 }
24123 else if(ctx->opcode==10) {
24124 ctx->rpt = 2;
24125 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