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

Function SRI_advsimd

arch/arm64/disassembler/decode2.c:23458–23495  ·  view source on GitHub ↗

sri_advsimd.xml */

Source from the content-addressed store, hash-verified

23456
23457/* sri_advsimd.xml */
23458int SRI_advsimd(context *ctx, Instruction *instr)
23459{
23460 int rc = DECODE_STATUS_UNMATCHED;
23461 /* class iclass_sisd */
23462 /* 01|U=1|111110|immh!=0000|immb=xxx|opcode=01000|1|Rn=xxxxx|Rd=xxxxx */
23463 if((INSWORD & 0xFF80FC00)==0x7F004400 && (INSWORD & 0x780000)!=0x0) {
23464 decode_fields32(ENC_SRI_ASISDSHF_R, ctx, instr);
23465 ctx->d = UINT(ctx->Rd);
23466 ctx->n = UINT(ctx->Rn);
23467 if(SLICE(ctx->immh,3,3)!=1) {
23468 UNDEFINED;
23469 }
23470 ctx->esize = (8) << (3);
23471 ctx->datasize = ctx->esize;
23472 ctx->elements = 1;
23473 ctx->shift = ((ctx->esize) * (2))-UINT(((ctx->immh<<3)|ctx->immb));
23474 OK(ENC_SRI_ASISDSHF_R);
23475 }
23476 /* class iclass_simd */
23477 /* 0|Q=x|U=1|011110|immh!=0000|immb=xxx|opcode=01000|1|Rn=xxxxx|Rd=xxxxx */
23478 if((INSWORD & 0xBF80FC00)==0x2F004400 && (INSWORD & 0x780000)!=0x0) {
23479 decode_fields32(ENC_SRI_ASIMDSHF_R, ctx, instr);
23480 ctx->d = UINT(ctx->Rd);
23481 ctx->n = UINT(ctx->Rn);
23482 if(ctx->immh==0) {
23483 SEE /* asimdimm */;
23484 }
23485 if(((SLICE(ctx->immh,3,3)<<1)|ctx->Q)==2) {
23486 UNDEFINED;
23487 }
23488 ctx->esize = (8) << (HighestSetBit(ctx->immh));
23489 ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40;
23490 ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0);
23491 ctx->shift = ((ctx->esize) * (2))-UINT(((ctx->immh<<3)|ctx->immb));
23492 OK(ENC_SRI_ASIMDSHF_R);
23493 }
23494 return rc;
23495}
23496
23497/* srshl_advsimd.xml */
23498int SRSHL_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