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

Function LDEOR

arch/arm64/disassembler/decode2.c:13808–13862  ·  view source on GitHub ↗

ldeor.xml */

Source from the content-addressed store, hash-verified

13806
13807/* ldeor.xml */
13808int LDEOR(context *ctx, Instruction *instr)
13809{
13810 int rc = DECODE_STATUS_UNMATCHED;
13811 /* class iclass_general */
13812 /* size=1x|111|V=0|00|A=x|R=x|1|Rs=xxxxx|o3=0|opc=010|00|Rn=xxxxx|Rt=xxxxx */
13813 if((INSWORD & 0xBF20FC00)==0xB8202000) {
13814 decode_fields32(ENC_LDEOR_32_MEMOP, ctx, instr);
13815 if(!HaveAtomicExt()) {
13816 UNDEFINED;
13817 }
13818 ctx->t = UINT(ctx->Rt);
13819 ctx->n = UINT(ctx->Rn);
13820 ctx->s = UINT(ctx->Rs);
13821 ctx->datasize = (8) << (UINT(ctx->size));
13822 ctx->regsize = (ctx->datasize==0x40) ? 0x40 : 0x20;
13823 ctx->ldacctype = (ctx->A==1 && ctx->Rt!=0x1f) ? AccType_ORDEREDATOMICRW : AccType_ATOMICRW;
13824 ctx->stacctype = (ctx->R==1) ? AccType_ORDEREDATOMICRW : AccType_ATOMICRW;
13825 if(!ctx->opc) {
13826 ctx->op = MemAtomicOp_ADD;
13827 }
13828 else if(ctx->opc==1) {
13829 ctx->op = MemAtomicOp_BIC;
13830 }
13831 else if(ctx->opc==2) {
13832 ctx->op = MemAtomicOp_EOR;
13833 }
13834 else if(ctx->opc==3) {
13835 ctx->op = MemAtomicOp_ORR;
13836 }
13837 else if(ctx->opc==4) {
13838 ctx->op = MemAtomicOp_SMAX;
13839 }
13840 else if(ctx->opc==5) {
13841 ctx->op = MemAtomicOp_SMIN;
13842 }
13843 else if(ctx->opc==6) {
13844 ctx->op = MemAtomicOp_UMAX;
13845 }
13846 else if(ctx->opc==7) {
13847 ctx->op = MemAtomicOp_UMIN;
13848 }
13849 ctx->tag_checked = ctx->n!=0x1f;
13850 /* regular aliases */
13851 if(ctx->A==0 && ctx->Rt==0x1f) return STEOR_LDEOR(ctx, instr);
13852 if(ctx->size==2 && ctx->A==0 && ctx->R==0) OK(ENC_LDEOR_32_MEMOP);
13853 if(ctx->size==2 && ctx->A==1 && ctx->R==0) OK(ENC_LDEORA_32_MEMOP);
13854 if(ctx->size==2 && ctx->A==1 && ctx->R==1) OK(ENC_LDEORAL_32_MEMOP);
13855 if(ctx->size==2 && ctx->A==0 && ctx->R==1) OK(ENC_LDEORL_32_MEMOP);
13856 if(ctx->size==3 && ctx->A==0 && ctx->R==0) OK(ENC_LDEOR_64_MEMOP);
13857 if(ctx->size==3 && ctx->A==1 && ctx->R==0) OK(ENC_LDEORA_64_MEMOP);
13858 if(ctx->size==3 && ctx->A==1 && ctx->R==1) OK(ENC_LDEORAL_64_MEMOP);
13859 if(ctx->size==3 && ctx->A==0 && ctx->R==1) OK(ENC_LDEORL_64_MEMOP);
13860 }
13861 return rc;
13862}
13863
13864/* ldeorb.xml */
13865int LDEORB(context *ctx, Instruction *instr)

Callers 1

decode_iclass_memopFunction · 0.85

Calls 2

decode_fields32Function · 0.85
STEOR_LDEORFunction · 0.85

Tested by

no test coverage detected