bfm.xml */
| 1073 | |
| 1074 | /* bfm.xml */ |
| 1075 | int BFM(context *ctx, Instruction *instr) |
| 1076 | { |
| 1077 | int rc = DECODE_STATUS_UNMATCHED; |
| 1078 | /* class iclass_nofill */ |
| 1079 | /* sf=x|opc=01|100110|N=x|immr=xxxxxx|imms=xxxxxx|Rn=xxxxx|Rd=xxxxx */ |
| 1080 | if((INSWORD & 0x7F800000)==0x33000000) { |
| 1081 | decode_fields32(ENC_BFM_32M_BITFIELD, ctx, instr); |
| 1082 | ctx->d = UINT(ctx->Rd); |
| 1083 | ctx->n = UINT(ctx->Rn); |
| 1084 | ctx->datasize = (ctx->sf==1) ? 0x40 : 0x20; |
| 1085 | if(!ctx->opc) { |
| 1086 | ctx->inzero = TRUE; |
| 1087 | ctx->extend = TRUE; |
| 1088 | } |
| 1089 | else if(ctx->opc==1) { |
| 1090 | ctx->inzero = FALSE; |
| 1091 | ctx->extend = FALSE; |
| 1092 | } |
| 1093 | else if(ctx->opc==2) { |
| 1094 | ctx->inzero = TRUE; |
| 1095 | ctx->extend = FALSE; |
| 1096 | } |
| 1097 | else if(ctx->opc==3) { |
| 1098 | UNDEFINED; |
| 1099 | } |
| 1100 | if(ctx->sf==1 && ctx->N!=1) { |
| 1101 | UNDEFINED; |
| 1102 | } |
| 1103 | if(ctx->sf==0 && (ctx->N!=0 || SLICE(ctx->immr,5,5)!=0 || SLICE(ctx->imms,5,5)!=0)) { |
| 1104 | UNDEFINED; |
| 1105 | } |
| 1106 | ctx->R = UINT(ctx->immr); |
| 1107 | ctx->S = UINT(ctx->imms); |
| 1108 | DecodeBitMasks_ReturnType dbmrt = DecodeBitMasks(ctx->N,ctx->imms,ctx->immr); |
| 1109 | ctx->wmask = dbmrt.wmask; |
| 1110 | ctx->tmask = dbmrt.tmask; |
| 1111 | /* regular aliases */ |
| 1112 | if(ctx->Rn==0x1f && UINT(ctx->imms)<UINT(ctx->immr)) return BFC_BFM(ctx, instr); |
| 1113 | if(ctx->Rn!=0x1f && UINT(ctx->imms)<UINT(ctx->immr)) return BFI_BFM(ctx, instr); |
| 1114 | if((UINT(ctx->imms)) >= (UINT(ctx->immr))) return BFXIL_BFM(ctx, instr); |
| 1115 | if(ctx->sf==0 && ctx->N==0) OK(ENC_BFM_32M_BITFIELD); |
| 1116 | if(ctx->sf==1 && ctx->N==1) OK(ENC_BFM_64M_BITFIELD); |
| 1117 | } |
| 1118 | return rc; |
| 1119 | } |
| 1120 | |
| 1121 | /* bfmlal_advsimd_elt.xml */ |
| 1122 | int BFMLAL_advsimd_elt(context *ctx, Instruction *instr) |
no test coverage detected