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

Function SHL_advsimd

arch/arm64/disassembler/decode2.c:21264–21301  ·  view source on GitHub ↗

shl_advsimd.xml */

Source from the content-addressed store, hash-verified

21262
21263/* shl_advsimd.xml */
21264int SHL_advsimd(context *ctx, Instruction *instr)
21265{
21266 int rc = DECODE_STATUS_UNMATCHED;
21267 /* class iclass_sisd */
21268 /* 01|U=0|111110|immh!=0000|immb=xxx|opcode=01010|1|Rn=xxxxx|Rd=xxxxx */
21269 if((INSWORD & 0xFF80FC00)==0x5F005400 && (INSWORD & 0x780000)!=0x0) {
21270 decode_fields32(ENC_SHL_ASISDSHF_R, ctx, instr);
21271 ctx->d = UINT(ctx->Rd);
21272 ctx->n = UINT(ctx->Rn);
21273 if(SLICE(ctx->immh,3,3)!=1) {
21274 UNDEFINED;
21275 }
21276 ctx->esize = (8) << (3);
21277 ctx->datasize = ctx->esize;
21278 ctx->elements = 1;
21279 ctx->shift = UINT(((ctx->immh<<3)|ctx->immb))-ctx->esize;
21280 OK(ENC_SHL_ASISDSHF_R);
21281 }
21282 /* class iclass_simd */
21283 /* 0|Q=x|U=0|011110|immh!=0000|immb=xxx|opcode=01010|1|Rn=xxxxx|Rd=xxxxx */
21284 if((INSWORD & 0xBF80FC00)==0xF005400 && (INSWORD & 0x780000)!=0x0) {
21285 decode_fields32(ENC_SHL_ASIMDSHF_R, ctx, instr);
21286 ctx->d = UINT(ctx->Rd);
21287 ctx->n = UINT(ctx->Rn);
21288 if(ctx->immh==0) {
21289 SEE /* asimdimm */;
21290 }
21291 if(((SLICE(ctx->immh,3,3)<<1)|ctx->Q)==2) {
21292 UNDEFINED;
21293 }
21294 ctx->esize = (8) << (HighestSetBit(ctx->immh));
21295 ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40;
21296 ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0);
21297 ctx->shift = UINT(((ctx->immh<<3)|ctx->immb))-ctx->esize;
21298 OK(ENC_SHL_ASIMDSHF_R);
21299 }
21300 return rc;
21301}
21302
21303/* shrn_advsimd.xml */
21304int SHRN_advsimd(context *ctx, Instruction *instr)

Callers 2

decode_iclass_asisdshfFunction · 0.85
decode_iclass_asimdshfFunction · 0.85

Calls 2

decode_fields32Function · 0.85
HighestSetBitFunction · 0.85

Tested by

no test coverage detected