ursra_advsimd.xml */
| 29587 | |
| 29588 | /* ursra_advsimd.xml */ |
| 29589 | int URSRA_advsimd(context *ctx, Instruction *instr) |
| 29590 | { |
| 29591 | int rc = DECODE_STATUS_UNMATCHED; |
| 29592 | /* class iclass_sisd */ |
| 29593 | /* 01|U=1|111110|immh!=0000|immb=xxx|opcode[4:3]=00|o1=1|o0=1|opcode[0]=0|1|Rn=xxxxx|Rd=xxxxx */ |
| 29594 | if((INSWORD & 0xFF80FC00)==0x7F003400 && (INSWORD & 0x780000)!=0x0) { |
| 29595 | decode_fields32(ENC_URSRA_ASISDSHF_R, ctx, instr); |
| 29596 | ctx->d = UINT(ctx->Rd); |
| 29597 | ctx->n = UINT(ctx->Rn); |
| 29598 | if(SLICE(ctx->immh,3,3)!=1) { |
| 29599 | UNDEFINED; |
| 29600 | } |
| 29601 | ctx->esize = (8) << (3); |
| 29602 | ctx->datasize = ctx->esize; |
| 29603 | ctx->elements = 1; |
| 29604 | ctx->shift = ((ctx->esize) * (2))-UINT(((ctx->immh<<3)|ctx->immb)); |
| 29605 | ctx->unsigned_ = (ctx->U==1); |
| 29606 | ctx->round = (ctx->o1==1); |
| 29607 | ctx->accumulate = (ctx->o0==1); |
| 29608 | OK(ENC_URSRA_ASISDSHF_R); |
| 29609 | } |
| 29610 | /* class iclass_simd */ |
| 29611 | /* 0|Q=x|U=1|011110|immh!=0000|immb=xxx|opcode[4:3]=00|o1=1|o0=1|opcode[0]=0|1|Rn=xxxxx|Rd=xxxxx */ |
| 29612 | if((INSWORD & 0xBF80FC00)==0x2F003400 && (INSWORD & 0x780000)!=0x0) { |
| 29613 | decode_fields32(ENC_URSRA_ASIMDSHF_R, ctx, instr); |
| 29614 | ctx->d = UINT(ctx->Rd); |
| 29615 | ctx->n = UINT(ctx->Rn); |
| 29616 | if(ctx->immh==0) { |
| 29617 | SEE /* asimdimm */; |
| 29618 | } |
| 29619 | if(((SLICE(ctx->immh,3,3)<<1)|ctx->Q)==2) { |
| 29620 | UNDEFINED; |
| 29621 | } |
| 29622 | ctx->esize = (8) << (HighestSetBit(ctx->immh)); |
| 29623 | ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40; |
| 29624 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 29625 | ctx->shift = ((ctx->esize) * (2))-UINT(((ctx->immh<<3)|ctx->immb)); |
| 29626 | ctx->unsigned_ = (ctx->U==1); |
| 29627 | ctx->round = (ctx->o1==1); |
| 29628 | ctx->accumulate = (ctx->o0==1); |
| 29629 | OK(ENC_URSRA_ASIMDSHF_R); |
| 29630 | } |
| 29631 | return rc; |
| 29632 | } |
| 29633 | |
| 29634 | /* usdot_advsimd_elt.xml */ |
| 29635 | int USDOT_advsimd_elt(context *ctx, Instruction *instr) |
no test coverage detected