uqshrn_advsimd.xml */
| 29309 | |
| 29310 | /* uqshrn_advsimd.xml */ |
| 29311 | int UQSHRN_advsimd(context *ctx, Instruction *instr) |
| 29312 | { |
| 29313 | int rc = DECODE_STATUS_UNMATCHED; |
| 29314 | /* class iclass_sisd */ |
| 29315 | /* 01|U=1|111110|immh!=0000|immb=xxx|opcode[4:1]=1001|op=0|1|Rn=xxxxx|Rd=xxxxx */ |
| 29316 | if((INSWORD & 0xFF80FC00)==0x7F009400 && (INSWORD & 0x780000)!=0x0) { |
| 29317 | decode_fields32(ENC_UQSHRN_ASISDSHF_N, ctx, instr); |
| 29318 | ctx->d = UINT(ctx->Rd); |
| 29319 | ctx->n = UINT(ctx->Rn); |
| 29320 | if(ctx->immh==0) { |
| 29321 | UNDEFINED; |
| 29322 | } |
| 29323 | if(SLICE(ctx->immh,3,3)==1) { |
| 29324 | UNDEFINED; |
| 29325 | } |
| 29326 | ctx->esize = (8) << (HighestSetBit(ctx->immh)); |
| 29327 | ctx->datasize = ctx->esize; |
| 29328 | ctx->elements = 1; |
| 29329 | ctx->part = 0; |
| 29330 | ctx->shift = ((2) * (ctx->esize))-UINT(((ctx->immh<<3)|ctx->immb)); |
| 29331 | ctx->round = (ctx->op==1); |
| 29332 | ctx->unsigned_ = (ctx->U==1); |
| 29333 | OK(ENC_UQSHRN_ASISDSHF_N); |
| 29334 | } |
| 29335 | /* class iclass_simd */ |
| 29336 | /* 0|Q=x|U=1|011110|immh!=0000|immb=xxx|opcode[4:1]=1001|op=0|1|Rn=xxxxx|Rd=xxxxx */ |
| 29337 | if((INSWORD & 0xBF80FC00)==0x2F009400 && (INSWORD & 0x780000)!=0x0) { |
| 29338 | decode_fields32(ENC_UQSHRN_ASIMDSHF_N, ctx, instr); |
| 29339 | ctx->d = UINT(ctx->Rd); |
| 29340 | ctx->n = UINT(ctx->Rn); |
| 29341 | if(ctx->immh==0) { |
| 29342 | SEE /* asimdimm */; |
| 29343 | } |
| 29344 | if(SLICE(ctx->immh,3,3)==1) { |
| 29345 | UNDEFINED; |
| 29346 | } |
| 29347 | ctx->esize = (8) << (HighestSetBit(ctx->immh)); |
| 29348 | ctx->datasize = 0x40; |
| 29349 | ctx->part = UINT(ctx->Q); |
| 29350 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 29351 | ctx->shift = ((2) * (ctx->esize))-UINT(((ctx->immh<<3)|ctx->immb)); |
| 29352 | ctx->round = (ctx->op==1); |
| 29353 | ctx->unsigned_ = (ctx->U==1); |
| 29354 | OK(ENC_UQSHRN_ASIMDSHF_N); |
| 29355 | } |
| 29356 | return rc; |
| 29357 | } |
| 29358 | |
| 29359 | /* uqsub_advsimd.xml */ |
| 29360 | int UQSUB_advsimd(context *ctx, Instruction *instr) |
no test coverage detected