ldaxrb.xml */
| 13557 | |
| 13558 | /* ldaxrb.xml */ |
| 13559 | int LDAXRB(context *ctx, Instruction *instr) |
| 13560 | { |
| 13561 | int rc = DECODE_STATUS_UNMATCHED; |
| 13562 | /* class iclass_base_register */ |
| 13563 | /* size=00|001000|o2=0|L=1|o1=0|Rs=(1)(1)(1)(1)(1)|o0=1|Rt2=(1)(1)(1)(1)(1)|Rn=xxxxx|Rt=xxxxx */ |
| 13564 | if((INSWORD & 0xFFE08000)==0x8408000) { |
| 13565 | decode_fields32(ENC_LDAXRB_LR32_LDSTEXCLR, ctx, instr); |
| 13566 | ctx->n = UINT(ctx->Rn); |
| 13567 | ctx->t = UINT(ctx->Rt); |
| 13568 | ctx->t2 = UINT(ctx->Rt2); |
| 13569 | ctx->s = UINT(ctx->Rs); |
| 13570 | ctx->acctype = (ctx->o0==1) ? AccType_ORDEREDATOMIC : AccType_ATOMIC; |
| 13571 | ctx->pair = FALSE; |
| 13572 | ctx->memop = (ctx->L==1) ? MemOp_LOAD : MemOp_STORE; |
| 13573 | ctx->elsize = (8) << (UINT(ctx->size)); |
| 13574 | ctx->regsize = (ctx->elsize==0x40) ? 0x40 : 0x20; |
| 13575 | ctx->datasize = (ctx->pair) ? (ctx->elsize) * (2) : ctx->elsize; |
| 13576 | ctx->tag_checked = ctx->n!=0x1f; |
| 13577 | ctx->rt_unknown = FALSE; |
| 13578 | ctx->rn_unknown = FALSE; |
| 13579 | if(ctx->memop==MemOp_LOAD && ctx->pair && ctx->t==ctx->t2) { |
| 13580 | ctx->c = ConstrainUnpredictable(Unpredictable_LDPOVERLAP); |
| 13581 | // assert |
| 13582 | // switch on constraint |
| 13583 | } |
| 13584 | if(ctx->memop==MemOp_STORE) { |
| 13585 | if(ctx->s==ctx->t || (ctx->pair && ctx->s==ctx->t2)) { |
| 13586 | ctx->c = ConstrainUnpredictable(Unpredictable_DATAOVERLAP); |
| 13587 | // assert |
| 13588 | // switch on constraint |
| 13589 | } |
| 13590 | if(ctx->s==ctx->n && ctx->n!=0x1f) { |
| 13591 | ctx->c = ConstrainUnpredictable(Unpredictable_BASEOVERLAP); |
| 13592 | // assert |
| 13593 | // switch on constraint |
| 13594 | } |
| 13595 | } |
| 13596 | OK(ENC_LDAXRB_LR32_LDSTEXCLR); |
| 13597 | } |
| 13598 | return rc; |
| 13599 | } |
| 13600 | |
| 13601 | /* ldaxrh.xml */ |
| 13602 | int LDAXRH(context *ctx, Instruction *instr) |
no test coverage detected