ldaddh.xml */
| 12907 | |
| 12908 | /* ldaddh.xml */ |
| 12909 | int 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 */ |
| 12962 | int LDAPR(context *ctx, Instruction *instr) |
no test coverage detected