ldeor.xml */
| 13806 | |
| 13807 | /* ldeor.xml */ |
| 13808 | int 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 */ |
| 13865 | int LDEORB(context *ctx, Instruction *instr) |
no test coverage detected