sqshrn_advsimd.xml */
| 23225 | |
| 23226 | /* sqshrn_advsimd.xml */ |
| 23227 | int SQSHRN_advsimd(context *ctx, Instruction *instr) |
| 23228 | { |
| 23229 | int rc = DECODE_STATUS_UNMATCHED; |
| 23230 | /* class iclass_sisd */ |
| 23231 | /* 01|U=0|111110|immh!=0000|immb=xxx|opcode[4:1]=1001|op=0|1|Rn=xxxxx|Rd=xxxxx */ |
| 23232 | if((INSWORD & 0xFF80FC00)==0x5F009400 && (INSWORD & 0x780000)!=0x0) { |
| 23233 | decode_fields32(ENC_SQSHRN_ASISDSHF_N, ctx, instr); |
| 23234 | ctx->d = UINT(ctx->Rd); |
| 23235 | ctx->n = UINT(ctx->Rn); |
| 23236 | if(ctx->immh==0) { |
| 23237 | UNDEFINED; |
| 23238 | } |
| 23239 | if(SLICE(ctx->immh,3,3)==1) { |
| 23240 | UNDEFINED; |
| 23241 | } |
| 23242 | ctx->esize = (8) << (HighestSetBit(ctx->immh)); |
| 23243 | ctx->datasize = ctx->esize; |
| 23244 | ctx->elements = 1; |
| 23245 | ctx->part = 0; |
| 23246 | ctx->shift = ((2) * (ctx->esize))-UINT(((ctx->immh<<3)|ctx->immb)); |
| 23247 | ctx->round = (ctx->op==1); |
| 23248 | ctx->unsigned_ = (ctx->U==1); |
| 23249 | OK(ENC_SQSHRN_ASISDSHF_N); |
| 23250 | } |
| 23251 | /* class iclass_simd */ |
| 23252 | /* 0|Q=x|U=0|011110|immh!=0000|immb=xxx|opcode[4:1]=1001|op=0|1|Rn=xxxxx|Rd=xxxxx */ |
| 23253 | if((INSWORD & 0xBF80FC00)==0xF009400 && (INSWORD & 0x780000)!=0x0) { |
| 23254 | decode_fields32(ENC_SQSHRN_ASIMDSHF_N, ctx, instr); |
| 23255 | ctx->d = UINT(ctx->Rd); |
| 23256 | ctx->n = UINT(ctx->Rn); |
| 23257 | if(ctx->immh==0) { |
| 23258 | SEE /* asimdimm */; |
| 23259 | } |
| 23260 | if(SLICE(ctx->immh,3,3)==1) { |
| 23261 | UNDEFINED; |
| 23262 | } |
| 23263 | ctx->esize = (8) << (HighestSetBit(ctx->immh)); |
| 23264 | ctx->datasize = 0x40; |
| 23265 | ctx->part = UINT(ctx->Q); |
| 23266 | ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0); |
| 23267 | ctx->shift = ((2) * (ctx->esize))-UINT(((ctx->immh<<3)|ctx->immb)); |
| 23268 | ctx->round = (ctx->op==1); |
| 23269 | ctx->unsigned_ = (ctx->U==1); |
| 23270 | OK(ENC_SQSHRN_ASIMDSHF_N); |
| 23271 | } |
| 23272 | return rc; |
| 23273 | } |
| 23274 | |
| 23275 | /* sqshrun_advsimd.xml */ |
| 23276 | int SQSHRUN_advsimd(context *ctx, Instruction *instr) |
no test coverage detected