ldapur_gen.xml */
| 13336 | |
| 13337 | /* ldapur_gen.xml */ |
| 13338 | int LDAPUR_gen(context *ctx, Instruction *instr) |
| 13339 | { |
| 13340 | int rc = DECODE_STATUS_UNMATCHED; |
| 13341 | /* class iclass_base_plus_offset */ |
| 13342 | /* size=1x|011001|opc=01|0|imm9=xxxxxxxxx|00|Rn=xxxxx|Rt=xxxxx */ |
| 13343 | if((INSWORD & 0xBFE00C00)==0x99400000) { |
| 13344 | decode_fields32(ENC_LDAPUR_32_LDAPSTL_UNSCALED, ctx, instr); |
| 13345 | ctx->wback = FALSE; |
| 13346 | ctx->postindex = FALSE; |
| 13347 | ctx->scale = UINT(ctx->size); |
| 13348 | ctx->offset = SignExtend(ctx->imm9,9); |
| 13349 | if(ctx->size==2) OK(ENC_LDAPUR_32_LDAPSTL_UNSCALED); |
| 13350 | if(ctx->size==3) OK(ENC_LDAPUR_64_LDAPSTL_UNSCALED); |
| 13351 | } |
| 13352 | /* post-decode pcode */ |
| 13353 | ctx->n = UINT(ctx->Rn); |
| 13354 | ctx->t = UINT(ctx->Rt); |
| 13355 | ctx->acctype = AccType_ORDERED; |
| 13356 | if(SLICE(ctx->opc,1,1)==0) { |
| 13357 | if(SLICE(ctx->opc,0,0)==1) { |
| 13358 | ctx->memop = MemOp_LOAD; |
| 13359 | }; |
| 13360 | if(ctx->size==3) { |
| 13361 | ctx->regsize = 0x40; |
| 13362 | }; |
| 13363 | ctx->signed_ = FALSE; |
| 13364 | } |
| 13365 | else { |
| 13366 | if(ctx->size==3) { |
| 13367 | ctx->memop = MemOp_PREFETCH; |
| 13368 | if(SLICE(ctx->opc,0,0)==1) { |
| 13369 | UNDEFINED; |
| 13370 | } |
| 13371 | } |
| 13372 | else { |
| 13373 | ctx->memop = MemOp_LOAD; |
| 13374 | if(ctx->size==2 && SLICE(ctx->opc,0,0)==1) { |
| 13375 | UNDEFINED; |
| 13376 | } |
| 13377 | if(SLICE(ctx->opc,0,0)==1) { |
| 13378 | ctx->regsize = 0x20; |
| 13379 | }; |
| 13380 | ctx->signed_ = TRUE; |
| 13381 | } |
| 13382 | } |
| 13383 | ctx->datasize = (8) << (ctx->scale); |
| 13384 | ctx->tag_checked = ctx->memop!=MemOp_PREFETCH && (ctx->wback || ctx->n!=0x1f); |
| 13385 | ctx->wb_unknown = FALSE; |
| 13386 | ctx->rt_unknown = FALSE; |
| 13387 | if(ctx->memop==MemOp_LOAD && ctx->wback && ctx->n==ctx->t && ctx->n!=0x1f) { |
| 13388 | // assignment from ConstrainUnpredictable() |
| 13389 | // assert |
| 13390 | // switch on constraint |
| 13391 | } |
| 13392 | if(ctx->memop==MemOp_STORE && ctx->wback && ctx->n==ctx->t && ctx->n!=0x1f) { |
| 13393 | // assignment from ConstrainUnpredictable() |
| 13394 | // assert |
| 13395 | // switch on constraint |
no test coverage detected