sttrb.xml */
| 26251 | |
| 26252 | /* sttrb.xml */ |
| 26253 | int STTRB(context *ctx, Instruction *instr) |
| 26254 | { |
| 26255 | int rc = DECODE_STATUS_UNMATCHED; |
| 26256 | /* class iclass_base_plus_offset */ |
| 26257 | /* size=00|111|V=0|00|opc=00|0|imm9=xxxxxxxxx|10|Rn=xxxxx|Rt=xxxxx */ |
| 26258 | if((INSWORD & 0xFFE00C00)==0x38000800) { |
| 26259 | decode_fields32(ENC_STTRB_32_LDST_UNPRIV, ctx, instr); |
| 26260 | ctx->wback = FALSE; |
| 26261 | ctx->postindex = FALSE; |
| 26262 | ctx->scale = UINT(ctx->size); |
| 26263 | ctx->offset = SignExtend(ctx->imm9,9); |
| 26264 | OK(ENC_STTRB_32_LDST_UNPRIV); |
| 26265 | } |
| 26266 | /* post-decode pcode */ |
| 26267 | ctx->n = UINT(ctx->Rn); |
| 26268 | ctx->t = UINT(ctx->Rt); |
| 26269 | ctx->unpriv_at_el1 = ctx->pstate_el==EL1 && !(EL2Enabled() && HaveNVExt() && CONCAT(ctx->HCR_EL2_NV,ctx->HCR_EL2_NV1,1)==3); |
| 26270 | ctx->unpriv_at_el2 = ctx->pstate_el==EL2 && HaveVirtHostExt() && CONCAT(ctx->HCR_EL2_E2H,ctx->HCR_EL2_TGE,1)==3; |
| 26271 | ctx->user_access_override = HaveUAOExt() && ctx->pstate_uao==1; |
| 26272 | if(!ctx->user_access_override && (ctx->unpriv_at_el1 || ctx->unpriv_at_el2)) { |
| 26273 | ctx->acctype = ctx->AccType_UNPRIV; |
| 26274 | } |
| 26275 | else { |
| 26276 | ctx->acctype = ctx->AccType_NORMAL; |
| 26277 | } |
| 26278 | if(SLICE(ctx->opc,1,1)==0) { |
| 26279 | if(SLICE(ctx->opc,0,0)==1) { |
| 26280 | ctx->memop = MemOp_LOAD; |
| 26281 | }; |
| 26282 | if(ctx->size==3) { |
| 26283 | ctx->regsize = 0x40; |
| 26284 | }; |
| 26285 | ctx->signed_ = FALSE; |
| 26286 | } |
| 26287 | else { |
| 26288 | if(ctx->size==3) { |
| 26289 | UNDEFINED; |
| 26290 | } |
| 26291 | else { |
| 26292 | ctx->memop = MemOp_LOAD; |
| 26293 | if(ctx->size==2 && SLICE(ctx->opc,0,0)==1) { |
| 26294 | UNDEFINED; |
| 26295 | } |
| 26296 | if(SLICE(ctx->opc,0,0)==1) { |
| 26297 | ctx->regsize = 0x20; |
| 26298 | }; |
| 26299 | ctx->signed_ = TRUE; |
| 26300 | } |
| 26301 | } |
| 26302 | ctx->datasize = (8) << (ctx->scale); |
| 26303 | ctx->tag_checked = ctx->memop!=MemOp_PREFETCH && (ctx->wback || ctx->n!=0x1f); |
| 26304 | ctx->wb_unknown = FALSE; |
| 26305 | ctx->rt_unknown = FALSE; |
| 26306 | if(ctx->memop==MemOp_LOAD && ctx->wback && ctx->n==ctx->t && ctx->n!=0x1f) { |
| 26307 | // assignment from ConstrainUnpredictable() |
| 26308 | // assert |
| 26309 | // switch on constraint |
| 26310 | } |
no test coverage detected