ldaddb.xml */
| 12854 | |
| 12855 | /* ldaddb.xml */ |
| 12856 | int 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 */ |
| 12909 | int LDADDH(context *ctx, Instruction *instr) |
no test coverage detected