ldur_gen.xml */
| 16984 | |
| 16985 | /* ldur_gen.xml */ |
| 16986 | int LDUR_gen(context *ctx, Instruction *instr) |
| 16987 | { |
| 16988 | int rc = DECODE_STATUS_UNMATCHED; |
| 16989 | /* class iclass_base_plus_offset */ |
| 16990 | /* size=1x|111|V=0|00|opc=01|0|imm9=xxxxxxxxx|00|Rn=xxxxx|Rt=xxxxx */ |
| 16991 | if((INSWORD & 0xBFE00C00)==0xB8400000) { |
| 16992 | decode_fields32(ENC_LDUR_32_LDST_UNSCALED, ctx, instr); |
| 16993 | ctx->wback = FALSE; |
| 16994 | ctx->postindex = FALSE; |
| 16995 | ctx->scale = UINT(ctx->size); |
| 16996 | ctx->offset = SignExtend(ctx->imm9,9); |
| 16997 | if(ctx->size==2) OK(ENC_LDUR_32_LDST_UNSCALED); |
| 16998 | if(ctx->size==3) OK(ENC_LDUR_64_LDST_UNSCALED); |
| 16999 | } |
| 17000 | /* post-decode pcode */ |
| 17001 | ctx->n = UINT(ctx->Rn); |
| 17002 | ctx->t = UINT(ctx->Rt); |
| 17003 | ctx->acctype = ctx->AccType_NORMAL; |
| 17004 | if(SLICE(ctx->opc,1,1)==0) { |
| 17005 | if(SLICE(ctx->opc,0,0)==1) { |
| 17006 | ctx->memop = MemOp_LOAD; |
| 17007 | }; |
| 17008 | if(ctx->size==3) { |
| 17009 | ctx->regsize = 0x40; |
| 17010 | }; |
| 17011 | ctx->signed_ = FALSE; |
| 17012 | } |
| 17013 | else { |
| 17014 | if(ctx->size==3) { |
| 17015 | ctx->memop = MemOp_PREFETCH; |
| 17016 | if(SLICE(ctx->opc,0,0)==1) { |
| 17017 | UNDEFINED; |
| 17018 | } |
| 17019 | } |
| 17020 | else { |
| 17021 | ctx->memop = MemOp_LOAD; |
| 17022 | if(ctx->size==2 && SLICE(ctx->opc,0,0)==1) { |
| 17023 | UNDEFINED; |
| 17024 | } |
| 17025 | if(SLICE(ctx->opc,0,0)==1) { |
| 17026 | ctx->regsize = 0x20; |
| 17027 | }; |
| 17028 | ctx->signed_ = TRUE; |
| 17029 | } |
| 17030 | } |
| 17031 | ctx->datasize = (8) << (ctx->scale); |
| 17032 | ctx->tag_checked = ctx->memop!=MemOp_PREFETCH && (ctx->wback || ctx->n!=0x1f); |
| 17033 | ctx->wb_unknown = FALSE; |
| 17034 | ctx->rt_unknown = FALSE; |
| 17035 | if(ctx->memop==MemOp_LOAD && ctx->wback && ctx->n==ctx->t && ctx->n!=0x1f) { |
| 17036 | // assignment from ConstrainUnpredictable() |
| 17037 | // assert |
| 17038 | // switch on constraint |
| 17039 | } |
| 17040 | if(ctx->memop==MemOp_STORE && ctx->wback && ctx->n==ctx->t && ctx->n!=0x1f) { |
| 17041 | // assignment from ConstrainUnpredictable() |
| 17042 | // assert |
| 17043 | // switch on constraint |
no test coverage detected