umov_advsimd.xml */
| 28918 | |
| 28919 | /* umov_advsimd.xml */ |
| 28920 | int UMOV_advsimd(context *ctx, Instruction *instr) |
| 28921 | { |
| 28922 | int rc = DECODE_STATUS_UNMATCHED; |
| 28923 | /* class iclass_advsimd */ |
| 28924 | /* 0|Q=x|op=0|01110000|imm5=xxxxx|0|imm4[3:2]=01|imm4[1]=1|imm4[0]=1|1|Rn=xxxxx|Rd=xxxxx */ |
| 28925 | if((INSWORD & 0xBFE0FC00)==0xE003C00) { |
| 28926 | decode_fields32(ENC_UMOV_ASIMDINS_W_W, ctx, instr); |
| 28927 | ctx->d = UINT(ctx->Rd); |
| 28928 | ctx->n = UINT(ctx->Rn); |
| 28929 | if((((ctx->Q<<5)|ctx->imm5)&0x21)==1) { |
| 28930 | ctx->size = 0; |
| 28931 | } |
| 28932 | else if((((ctx->Q<<5)|ctx->imm5)&0x23)==2) { |
| 28933 | ctx->size = 1; |
| 28934 | } |
| 28935 | else if((((ctx->Q<<5)|ctx->imm5)&0x27)==4) { |
| 28936 | ctx->size = 2; |
| 28937 | } |
| 28938 | else if((((ctx->Q<<5)|ctx->imm5)&0x2f)==0x28) { |
| 28939 | ctx->size = 3; |
| 28940 | } |
| 28941 | else { |
| 28942 | UNDEFINED; |
| 28943 | } |
| 28944 | ctx->idxdsize = (SLICE(ctx->imm5,4,4)==1) ? 0x80 : 0x40; |
| 28945 | ctx->index = UINT(SLICE(ctx->imm5,4,ctx->size+1)); |
| 28946 | ctx->esize = (8) << (ctx->size); |
| 28947 | ctx->datasize = (ctx->Q==1) ? 0x40 : 0x20; |
| 28948 | /* regular aliases */ |
| 28949 | if(((ctx->imm5&15)==8) || ((ctx->imm5&7)==4)) return MOV_UMOV_advsimd(ctx, instr); |
| 28950 | if(ctx->Q==0) OK(ENC_UMOV_ASIMDINS_W_W); |
| 28951 | if(ctx->Q==1 && (ctx->imm5&15)==8) OK(ENC_UMOV_ASIMDINS_X_X); |
| 28952 | } |
| 28953 | return rc; |
| 28954 | } |
| 28955 | |
| 28956 | /* umsubl.xml */ |
| 28957 | int UMSUBL(context *ctx, Instruction *instr) |
no test coverage detected