shl_advsimd.xml */
| 21262 | |
| 21263 | /* shl_advsimd.xml */ |
| 21264 | int SHL_advsimd(context *ctx, Instruction *instr) |
| 21265 | { |
| 21266 | int rc = DECODE_STATUS_UNMATCHED; |
| 21267 | /* class iclass_sisd */ |
| 21268 | /* 01|U=0|111110|immh!=0000|immb=xxx|opcode=01010|1|Rn=xxxxx|Rd=xxxxx */ |
| 21269 | if((INSWORD & 0xFF80FC00)==0x5F005400 && (INSWORD & 0x780000)!=0x0) { |
| 21270 | decode_fields32(ENC_SHL_ASISDSHF_R, ctx, instr); |
| 21271 | ctx->d = UINT(ctx->Rd); |
| 21272 | ctx->n = UINT(ctx->Rn); |
| 21273 | if(SLICE(ctx->immh,3,3)!=1) { |
| 21274 | UNDEFINED; |
| 21275 | } |
| 21276 | ctx->esize = (8) << (3); |
| 21277 | ctx->datasize = ctx->esize; |
| 21278 | ctx->elements = 1; |
| 21279 | ctx->shift = UINT(((ctx->immh<<3)|ctx->immb))-ctx->esize; |
| 21280 | OK(ENC_SHL_ASISDSHF_R); |
| 21281 | } |
| 21282 | /* class iclass_simd */ |
| 21283 | /* 0|Q=x|U=0|011110|immh!=0000|immb=xxx|opcode=01010|1|Rn=xxxxx|Rd=xxxxx */ |
| 21284 | if((INSWORD & 0xBF80FC00)==0xF005400 && (INSWORD & 0x780000)!=0x0) { |
| 21285 | decode_fields32(ENC_SHL_ASIMDSHF_R, ctx, instr); |
| 21286 | ctx->d = UINT(ctx->Rd); |
| 21287 | ctx->n = UINT(ctx->Rn); |
| 21288 | if(ctx->immh==0) { |
| 21289 | SEE /* asimdimm */; |
| 21290 | } |
| 21291 | if(((SLICE(ctx->immh,3,3)<<1)|ctx->Q)==2) { |
| 21292 | UNDEFINED; |
| 21293 | } |
| 21294 | ctx->esize = (8) << (HighestSetBit(ctx->immh)); |
| 21295 | ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40; |
| 21296 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 21297 | ctx->shift = UINT(((ctx->immh<<3)|ctx->immb))-ctx->esize; |
| 21298 | OK(ENC_SHL_ASIMDSHF_R); |
| 21299 | } |
| 21300 | return rc; |
| 21301 | } |
| 21302 | |
| 21303 | /* shrn_advsimd.xml */ |
| 21304 | int SHRN_advsimd(context *ctx, Instruction *instr) |
no test coverage detected