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

Function LDADDH

arch/arm64/disassembler/decode2.c:12909–12959  ·  view source on GitHub ↗

ldaddh.xml */

Source from the content-addressed store, hash-verified

12907
12908/* ldaddh.xml */
12909int LDADDH(context *ctx, Instruction *instr)
12910{
12911 int rc = DECODE_STATUS_UNMATCHED;
12912 /* class iclass_general */
12913 /* size=01|111|V=0|00|A=x|R=x|1|Rs=xxxxx|o3=0|opc=000|00|Rn=xxxxx|Rt=xxxxx */
12914 if((INSWORD & 0xFF20FC00)==0x78200000) {
12915 decode_fields32(ENC_LDADDAH_32_MEMOP, ctx, instr);
12916 if(!HaveAtomicExt()) {
12917 UNDEFINED;
12918 }
12919 ctx->t = UINT(ctx->Rt);
12920 ctx->n = UINT(ctx->Rn);
12921 ctx->s = UINT(ctx->Rs);
12922 ctx->datasize = (8) << (UINT(ctx->size));
12923 ctx->regsize = (ctx->datasize==0x40) ? 0x40 : 0x20;
12924 ctx->ldacctype = (ctx->A==1 && ctx->Rt!=0x1f) ? AccType_ORDEREDATOMICRW : AccType_ATOMICRW;
12925 ctx->stacctype = (ctx->R==1) ? AccType_ORDEREDATOMICRW : AccType_ATOMICRW;
12926 if(!ctx->opc) {
12927 ctx->op = MemAtomicOp_ADD;
12928 }
12929 else if(ctx->opc==1) {
12930 ctx->op = MemAtomicOp_BIC;
12931 }
12932 else if(ctx->opc==2) {
12933 ctx->op = MemAtomicOp_EOR;
12934 }
12935 else if(ctx->opc==3) {
12936 ctx->op = MemAtomicOp_ORR;
12937 }
12938 else if(ctx->opc==4) {
12939 ctx->op = MemAtomicOp_SMAX;
12940 }
12941 else if(ctx->opc==5) {
12942 ctx->op = MemAtomicOp_SMIN;
12943 }
12944 else if(ctx->opc==6) {
12945 ctx->op = MemAtomicOp_UMAX;
12946 }
12947 else if(ctx->opc==7) {
12948 ctx->op = MemAtomicOp_UMIN;
12949 }
12950 ctx->tag_checked = ctx->n!=0x1f;
12951 /* regular aliases */
12952 if(ctx->A==0 && ctx->Rt==0x1f) return STADDH_LDADDH(ctx, instr);
12953 if(ctx->A==1 && ctx->R==0) OK(ENC_LDADDAH_32_MEMOP);
12954 if(ctx->A==1 && ctx->R==1) OK(ENC_LDADDALH_32_MEMOP);
12955 if(ctx->A==0 && ctx->R==0) OK(ENC_LDADDH_32_MEMOP);
12956 if(ctx->A==0 && ctx->R==1) OK(ENC_LDADDLH_32_MEMOP);
12957 }
12958 return rc;
12959}
12960
12961/* ldapr.xml */
12962int LDAPR(context *ctx, Instruction *instr)

Callers 1

decode_iclass_memopFunction · 0.85

Calls 2

decode_fields32Function · 0.85
STADDH_LDADDHFunction · 0.85

Tested by

no test coverage detected