lduminh.xml */
| 16588 | |
| 16589 | /* lduminh.xml */ |
| 16590 | int LDUMINH(context *ctx, Instruction *instr) |
| 16591 | { |
| 16592 | int rc = DECODE_STATUS_UNMATCHED; |
| 16593 | /* class iclass_general */ |
| 16594 | /* size=01|111|V=0|00|A=x|R=x|1|Rs=xxxxx|o3=0|opc=111|00|Rn=xxxxx|Rt=xxxxx */ |
| 16595 | if((INSWORD & 0xFF20FC00)==0x78207000) { |
| 16596 | decode_fields32(ENC_LDUMINAH_32_MEMOP, ctx, instr); |
| 16597 | if(!HaveAtomicExt()) { |
| 16598 | UNDEFINED; |
| 16599 | } |
| 16600 | ctx->t = UINT(ctx->Rt); |
| 16601 | ctx->n = UINT(ctx->Rn); |
| 16602 | ctx->s = UINT(ctx->Rs); |
| 16603 | ctx->datasize = (8) << (UINT(ctx->size)); |
| 16604 | ctx->regsize = (ctx->datasize==0x40) ? 0x40 : 0x20; |
| 16605 | ctx->ldacctype = (ctx->A==1 && ctx->Rt!=0x1f) ? AccType_ORDEREDATOMICRW : AccType_ATOMICRW; |
| 16606 | ctx->stacctype = (ctx->R==1) ? AccType_ORDEREDATOMICRW : AccType_ATOMICRW; |
| 16607 | if(!ctx->opc) { |
| 16608 | ctx->op = MemAtomicOp_ADD; |
| 16609 | } |
| 16610 | else if(ctx->opc==1) { |
| 16611 | ctx->op = MemAtomicOp_BIC; |
| 16612 | } |
| 16613 | else if(ctx->opc==2) { |
| 16614 | ctx->op = MemAtomicOp_EOR; |
| 16615 | } |
| 16616 | else if(ctx->opc==3) { |
| 16617 | ctx->op = MemAtomicOp_ORR; |
| 16618 | } |
| 16619 | else if(ctx->opc==4) { |
| 16620 | ctx->op = MemAtomicOp_SMAX; |
| 16621 | } |
| 16622 | else if(ctx->opc==5) { |
| 16623 | ctx->op = MemAtomicOp_SMIN; |
| 16624 | } |
| 16625 | else if(ctx->opc==6) { |
| 16626 | ctx->op = MemAtomicOp_UMAX; |
| 16627 | } |
| 16628 | else if(ctx->opc==7) { |
| 16629 | ctx->op = MemAtomicOp_UMIN; |
| 16630 | } |
| 16631 | ctx->tag_checked = ctx->n!=0x1f; |
| 16632 | /* regular aliases */ |
| 16633 | if(ctx->A==0 && ctx->Rt==0x1f) return STUMINH_LDUMINH(ctx, instr); |
| 16634 | if(ctx->A==1 && ctx->R==0) OK(ENC_LDUMINAH_32_MEMOP); |
| 16635 | if(ctx->A==1 && ctx->R==1) OK(ENC_LDUMINALH_32_MEMOP); |
| 16636 | if(ctx->A==0 && ctx->R==0) OK(ENC_LDUMINH_32_MEMOP); |
| 16637 | if(ctx->A==0 && ctx->R==1) OK(ENC_LDUMINLH_32_MEMOP); |
| 16638 | } |
| 16639 | return rc; |
| 16640 | } |
| 16641 | |
| 16642 | /* ldurb.xml */ |
| 16643 | int LDURB(context *ctx, Instruction *instr) |
no test coverage detected