orr_log_shift.xml */
| 18843 | |
| 18844 | /* orr_log_shift.xml */ |
| 18845 | int ORR_log_shift(context *ctx, Instruction *instr) |
| 18846 | { |
| 18847 | int rc = DECODE_STATUS_UNMATCHED; |
| 18848 | /* class iclass_no_s */ |
| 18849 | /* sf=x|opc=01|01010|shift=xx|N=0|Rm=xxxxx|imm6=xxxxxx|Rn=xxxxx|Rd=xxxxx */ |
| 18850 | if((INSWORD & 0x7F200000)==0x2A000000) { |
| 18851 | decode_fields32(ENC_ORR_32_LOG_SHIFT, ctx, instr); |
| 18852 | ctx->d = UINT(ctx->Rd); |
| 18853 | ctx->n = UINT(ctx->Rn); |
| 18854 | ctx->m = UINT(ctx->Rm); |
| 18855 | ctx->datasize = (ctx->sf==1) ? 0x40 : 0x20; |
| 18856 | if(!ctx->opc) { |
| 18857 | ctx->op = LogicalOp_AND; |
| 18858 | ctx->setflags = FALSE; |
| 18859 | instr->setflags = FLAGEFFECT_NONE; |
| 18860 | } |
| 18861 | else if(ctx->opc==1) { |
| 18862 | ctx->op = LogicalOp_ORR; |
| 18863 | ctx->setflags = FALSE; |
| 18864 | instr->setflags = FLAGEFFECT_NONE; |
| 18865 | } |
| 18866 | else if(ctx->opc==2) { |
| 18867 | ctx->op = LogicalOp_EOR; |
| 18868 | ctx->setflags = FALSE; |
| 18869 | instr->setflags = FLAGEFFECT_NONE; |
| 18870 | } |
| 18871 | else if(ctx->opc==3) { |
| 18872 | ctx->op = LogicalOp_AND; |
| 18873 | ctx->setflags = TRUE; |
| 18874 | instr->setflags = FLAGEFFECT_SETS; |
| 18875 | } |
| 18876 | if(ctx->sf==0 && SLICE(ctx->imm6,5,5)==1) { |
| 18877 | UNDEFINED; |
| 18878 | } |
| 18879 | ctx->shift_type = DecodeShift(ctx->shift); |
| 18880 | ctx->shift_amount = UINT(ctx->imm6); |
| 18881 | ctx->invert = (ctx->N==1); |
| 18882 | /* regular aliases */ |
| 18883 | if(ctx->shift==0 && ctx->imm6==0 && ctx->Rn==0x1f) return MOV_ORR_log_shift(ctx, instr); |
| 18884 | if(ctx->sf==0) OK(ENC_ORR_32_LOG_SHIFT); |
| 18885 | if(ctx->sf==1) OK(ENC_ORR_64_LOG_SHIFT); |
| 18886 | } |
| 18887 | return rc; |
| 18888 | } |
| 18889 | |
| 18890 | /* pacda.xml */ |
| 18891 | int PACDA(context *ctx, Instruction *instr) |
no test coverage detected