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

Function LDADDB

arch/arm64/disassembler/decode2.c:12856–12906  ·  view source on GitHub ↗

ldaddb.xml */

Source from the content-addressed store, hash-verified

12854
12855/* ldaddb.xml */
12856int LDADDB(context *ctx, Instruction *instr)
12857{
12858 int rc = DECODE_STATUS_UNMATCHED;
12859 /* class iclass_general */
12860 /* size=00|111|V=0|00|A=x|R=x|1|Rs=xxxxx|o3=0|opc=000|00|Rn=xxxxx|Rt=xxxxx */
12861 if((INSWORD & 0xFF20FC00)==0x38200000) {
12862 decode_fields32(ENC_LDADDAB_32_MEMOP, ctx, instr);
12863 if(!HaveAtomicExt()) {
12864 UNDEFINED;
12865 }
12866 ctx->t = UINT(ctx->Rt);
12867 ctx->n = UINT(ctx->Rn);
12868 ctx->s = UINT(ctx->Rs);
12869 ctx->datasize = (8) << (UINT(ctx->size));
12870 ctx->regsize = (ctx->datasize==0x40) ? 0x40 : 0x20;
12871 ctx->ldacctype = (ctx->A==1 && ctx->Rt!=0x1f) ? AccType_ORDEREDATOMICRW : AccType_ATOMICRW;
12872 ctx->stacctype = (ctx->R==1) ? AccType_ORDEREDATOMICRW : AccType_ATOMICRW;
12873 if(!ctx->opc) {
12874 ctx->op = MemAtomicOp_ADD;
12875 }
12876 else if(ctx->opc==1) {
12877 ctx->op = MemAtomicOp_BIC;
12878 }
12879 else if(ctx->opc==2) {
12880 ctx->op = MemAtomicOp_EOR;
12881 }
12882 else if(ctx->opc==3) {
12883 ctx->op = MemAtomicOp_ORR;
12884 }
12885 else if(ctx->opc==4) {
12886 ctx->op = MemAtomicOp_SMAX;
12887 }
12888 else if(ctx->opc==5) {
12889 ctx->op = MemAtomicOp_SMIN;
12890 }
12891 else if(ctx->opc==6) {
12892 ctx->op = MemAtomicOp_UMAX;
12893 }
12894 else if(ctx->opc==7) {
12895 ctx->op = MemAtomicOp_UMIN;
12896 }
12897 ctx->tag_checked = ctx->n!=0x1f;
12898 /* regular aliases */
12899 if(ctx->A==0 && ctx->Rt==0x1f) return STADDB_LDADDB(ctx, instr);
12900 if(ctx->A==1 && ctx->R==0) OK(ENC_LDADDAB_32_MEMOP);
12901 if(ctx->A==1 && ctx->R==1) OK(ENC_LDADDALB_32_MEMOP);
12902 if(ctx->A==0 && ctx->R==0) OK(ENC_LDADDB_32_MEMOP);
12903 if(ctx->A==0 && ctx->R==1) OK(ENC_LDADDLB_32_MEMOP);
12904 }
12905 return rc;
12906}
12907
12908/* ldaddh.xml */
12909int LDADDH(context *ctx, Instruction *instr)

Callers 1

decode_iclass_memopFunction · 0.85

Calls 2

decode_fields32Function · 0.85
STADDB_LDADDBFunction · 0.85

Tested by

no test coverage detected