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

Function SRSHL_advsimd

arch/arm64/disassembler/decode2.c:23498–23538  ·  view source on GitHub ↗

srshl_advsimd.xml */

Source from the content-addressed store, hash-verified

23496
23497/* srshl_advsimd.xml */
23498int SRSHL_advsimd(context *ctx, Instruction *instr)
23499{
23500 int rc = DECODE_STATUS_UNMATCHED;
23501 /* class iclass_sisd */
23502 /* 01|U=0|11110|size=xx|1|Rm=xxxxx|opcode[4:2]=010|R=1|S=0|1|Rn=xxxxx|Rd=xxxxx */
23503 if((INSWORD & 0xFF20FC00)==0x5E205400) {
23504 decode_fields32(ENC_SRSHL_ASISDSAME_ONLY, ctx, instr);
23505 ctx->d = UINT(ctx->Rd);
23506 ctx->n = UINT(ctx->Rn);
23507 ctx->m = UINT(ctx->Rm);
23508 ctx->esize = (8) << (UINT(ctx->size));
23509 ctx->datasize = ctx->esize;
23510 ctx->elements = 1;
23511 ctx->unsigned_ = (ctx->U==1);
23512 ctx->rounding = (ctx->R==1);
23513 ctx->saturating = (ctx->S==1);
23514 if(ctx->S==0 && ctx->size!=3) {
23515 UNDEFINED;
23516 }
23517 OK(ENC_SRSHL_ASISDSAME_ONLY);
23518 }
23519 /* class iclass_simd */
23520 /* 0|Q=x|U=0|01110|size=xx|1|Rm=xxxxx|opcode[4:2]=010|R=1|S=0|1|Rn=xxxxx|Rd=xxxxx */
23521 if((INSWORD & 0xBF20FC00)==0xE205400) {
23522 decode_fields32(ENC_SRSHL_ASIMDSAME_ONLY, ctx, instr);
23523 ctx->d = UINT(ctx->Rd);
23524 ctx->n = UINT(ctx->Rn);
23525 ctx->m = UINT(ctx->Rm);
23526 if(((ctx->size<<1)|ctx->Q)==6) {
23527 UNDEFINED;
23528 }
23529 ctx->esize = (8) << (UINT(ctx->size));
23530 ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40;
23531 ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0);
23532 ctx->unsigned_ = (ctx->U==1);
23533 ctx->rounding = (ctx->R==1);
23534 ctx->saturating = (ctx->S==1);
23535 OK(ENC_SRSHL_ASIMDSAME_ONLY);
23536 }
23537 return rc;
23538}
23539
23540/* srshr_advsimd.xml */
23541int SRSHR_advsimd(context *ctx, Instruction *instr)

Callers 2

decode_iclass_asisdsameFunction · 0.85
decode_iclass_asimdsameFunction · 0.85

Calls 1

decode_fields32Function · 0.85

Tested by

no test coverage detected