ldtrsb.xml */
| 16112 | |
| 16113 | /* ldtrsb.xml */ |
| 16114 | int LDTRSB(context *ctx, Instruction *instr) |
| 16115 | { |
| 16116 | int rc = DECODE_STATUS_UNMATCHED; |
| 16117 | /* class iclass_base_plus_offset */ |
| 16118 | /* size=00|111|V=0|00|opc=1x|0|imm9=xxxxxxxxx|10|Rn=xxxxx|Rt=xxxxx */ |
| 16119 | if((INSWORD & 0xFFA00C00)==0x38800800) { |
| 16120 | decode_fields32(ENC_LDTRSB_32_LDST_UNPRIV, ctx, instr); |
| 16121 | ctx->wback = FALSE; |
| 16122 | ctx->postindex = FALSE; |
| 16123 | ctx->scale = UINT(ctx->size); |
| 16124 | ctx->offset = SignExtend(ctx->imm9,9); |
| 16125 | if(ctx->opc==3) OK(ENC_LDTRSB_32_LDST_UNPRIV); |
| 16126 | if(ctx->opc==2) OK(ENC_LDTRSB_64_LDST_UNPRIV); |
| 16127 | } |
| 16128 | /* post-decode pcode */ |
| 16129 | ctx->n = UINT(ctx->Rn); |
| 16130 | ctx->t = UINT(ctx->Rt); |
| 16131 | ctx->unpriv_at_el1 = ctx->pstate_el==EL1 && !(EL2Enabled() && HaveNVExt() && CONCAT(ctx->HCR_EL2_NV,ctx->HCR_EL2_NV1,1)==3); |
| 16132 | ctx->unpriv_at_el2 = ctx->pstate_el==EL2 && HaveVirtHostExt() && CONCAT(ctx->HCR_EL2_E2H,ctx->HCR_EL2_TGE,1)==3; |
| 16133 | ctx->user_access_override = HaveUAOExt() && ctx->pstate_uao==1; |
| 16134 | if(!ctx->user_access_override && (ctx->unpriv_at_el1 || ctx->unpriv_at_el2)) { |
| 16135 | ctx->acctype = ctx->AccType_UNPRIV; |
| 16136 | } |
| 16137 | else { |
| 16138 | ctx->acctype = ctx->AccType_NORMAL; |
| 16139 | } |
| 16140 | if(SLICE(ctx->opc,1,1)==0) { |
| 16141 | if(SLICE(ctx->opc,0,0)==1) { |
| 16142 | ctx->memop = MemOp_LOAD; |
| 16143 | }; |
| 16144 | if(ctx->size==3) { |
| 16145 | ctx->regsize = 0x40; |
| 16146 | }; |
| 16147 | ctx->signed_ = FALSE; |
| 16148 | } |
| 16149 | else { |
| 16150 | if(ctx->size==3) { |
| 16151 | UNDEFINED; |
| 16152 | } |
| 16153 | else { |
| 16154 | ctx->memop = MemOp_LOAD; |
| 16155 | if(ctx->size==2 && SLICE(ctx->opc,0,0)==1) { |
| 16156 | UNDEFINED; |
| 16157 | } |
| 16158 | if(SLICE(ctx->opc,0,0)==1) { |
| 16159 | ctx->regsize = 0x20; |
| 16160 | }; |
| 16161 | ctx->signed_ = TRUE; |
| 16162 | } |
| 16163 | } |
| 16164 | ctx->datasize = (8) << (ctx->scale); |
| 16165 | ctx->tag_checked = ctx->memop!=MemOp_PREFETCH && (ctx->wback || ctx->n!=0x1f); |
| 16166 | ctx->wb_unknown = FALSE; |
| 16167 | ctx->rt_unknown = FALSE; |
| 16168 | if(ctx->memop==MemOp_LOAD && ctx->wback && ctx->n==ctx->t && ctx->n!=0x1f) { |
| 16169 | // assignment from ConstrainUnpredictable() |
| 16170 | // assert |
| 16171 | // switch on constraint |
no test coverage detected