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

Function LDUMINH

arch/arm64/disassembler/decode2.c:16590–16640  ·  view source on GitHub ↗

lduminh.xml */

Source from the content-addressed store, hash-verified

16588
16589/* lduminh.xml */
16590int LDUMINH(context *ctx, Instruction *instr)
16591{
16592 int rc = DECODE_STATUS_UNMATCHED;
16593 /* class iclass_general */
16594 /* size=01|111|V=0|00|A=x|R=x|1|Rs=xxxxx|o3=0|opc=111|00|Rn=xxxxx|Rt=xxxxx */
16595 if((INSWORD & 0xFF20FC00)==0x78207000) {
16596 decode_fields32(ENC_LDUMINAH_32_MEMOP, ctx, instr);
16597 if(!HaveAtomicExt()) {
16598 UNDEFINED;
16599 }
16600 ctx->t = UINT(ctx->Rt);
16601 ctx->n = UINT(ctx->Rn);
16602 ctx->s = UINT(ctx->Rs);
16603 ctx->datasize = (8) << (UINT(ctx->size));
16604 ctx->regsize = (ctx->datasize==0x40) ? 0x40 : 0x20;
16605 ctx->ldacctype = (ctx->A==1 && ctx->Rt!=0x1f) ? AccType_ORDEREDATOMICRW : AccType_ATOMICRW;
16606 ctx->stacctype = (ctx->R==1) ? AccType_ORDEREDATOMICRW : AccType_ATOMICRW;
16607 if(!ctx->opc) {
16608 ctx->op = MemAtomicOp_ADD;
16609 }
16610 else if(ctx->opc==1) {
16611 ctx->op = MemAtomicOp_BIC;
16612 }
16613 else if(ctx->opc==2) {
16614 ctx->op = MemAtomicOp_EOR;
16615 }
16616 else if(ctx->opc==3) {
16617 ctx->op = MemAtomicOp_ORR;
16618 }
16619 else if(ctx->opc==4) {
16620 ctx->op = MemAtomicOp_SMAX;
16621 }
16622 else if(ctx->opc==5) {
16623 ctx->op = MemAtomicOp_SMIN;
16624 }
16625 else if(ctx->opc==6) {
16626 ctx->op = MemAtomicOp_UMAX;
16627 }
16628 else if(ctx->opc==7) {
16629 ctx->op = MemAtomicOp_UMIN;
16630 }
16631 ctx->tag_checked = ctx->n!=0x1f;
16632 /* regular aliases */
16633 if(ctx->A==0 && ctx->Rt==0x1f) return STUMINH_LDUMINH(ctx, instr);
16634 if(ctx->A==1 && ctx->R==0) OK(ENC_LDUMINAH_32_MEMOP);
16635 if(ctx->A==1 && ctx->R==1) OK(ENC_LDUMINALH_32_MEMOP);
16636 if(ctx->A==0 && ctx->R==0) OK(ENC_LDUMINH_32_MEMOP);
16637 if(ctx->A==0 && ctx->R==1) OK(ENC_LDUMINLH_32_MEMOP);
16638 }
16639 return rc;
16640}
16641
16642/* ldurb.xml */
16643int LDURB(context *ctx, Instruction *instr)

Callers 1

decode_iclass_memopFunction · 0.85

Calls 2

decode_fields32Function · 0.85
STUMINH_LDUMINHFunction · 0.85

Tested by

no test coverage detected