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

Function UMOV_advsimd

arch/arm64/disassembler/decode2.c:28920–28954  ·  view source on GitHub ↗

umov_advsimd.xml */

Source from the content-addressed store, hash-verified

28918
28919/* umov_advsimd.xml */
28920int UMOV_advsimd(context *ctx, Instruction *instr)
28921{
28922 int rc = DECODE_STATUS_UNMATCHED;
28923 /* class iclass_advsimd */
28924 /* 0|Q=x|op=0|01110000|imm5=xxxxx|0|imm4[3:2]=01|imm4[1]=1|imm4[0]=1|1|Rn=xxxxx|Rd=xxxxx */
28925 if((INSWORD & 0xBFE0FC00)==0xE003C00) {
28926 decode_fields32(ENC_UMOV_ASIMDINS_W_W, ctx, instr);
28927 ctx->d = UINT(ctx->Rd);
28928 ctx->n = UINT(ctx->Rn);
28929 if((((ctx->Q<<5)|ctx->imm5)&0x21)==1) {
28930 ctx->size = 0;
28931 }
28932 else if((((ctx->Q<<5)|ctx->imm5)&0x23)==2) {
28933 ctx->size = 1;
28934 }
28935 else if((((ctx->Q<<5)|ctx->imm5)&0x27)==4) {
28936 ctx->size = 2;
28937 }
28938 else if((((ctx->Q<<5)|ctx->imm5)&0x2f)==0x28) {
28939 ctx->size = 3;
28940 }
28941 else {
28942 UNDEFINED;
28943 }
28944 ctx->idxdsize = (SLICE(ctx->imm5,4,4)==1) ? 0x80 : 0x40;
28945 ctx->index = UINT(SLICE(ctx->imm5,4,ctx->size+1));
28946 ctx->esize = (8) << (ctx->size);
28947 ctx->datasize = (ctx->Q==1) ? 0x40 : 0x20;
28948 /* regular aliases */
28949 if(((ctx->imm5&15)==8) || ((ctx->imm5&7)==4)) return MOV_UMOV_advsimd(ctx, instr);
28950 if(ctx->Q==0) OK(ENC_UMOV_ASIMDINS_W_W);
28951 if(ctx->Q==1 && (ctx->imm5&15)==8) OK(ENC_UMOV_ASIMDINS_X_X);
28952 }
28953 return rc;
28954}
28955
28956/* umsubl.xml */
28957int UMSUBL(context *ctx, Instruction *instr)

Callers 1

decode_iclass_asimdinsFunction · 0.85

Calls 2

decode_fields32Function · 0.85
MOV_UMOV_advsimdFunction · 0.85

Tested by

no test coverage detected