MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / BFM

Function BFM

arch/arm64/disassembler/decode2.c:1075–1119  ·  view source on GitHub ↗

bfm.xml */

Source from the content-addressed store, hash-verified

1073
1074/* bfm.xml */
1075int 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 */
1122int BFMLAL_advsimd_elt(context *ctx, Instruction *instr)

Callers 1

decode_iclass_bitfieldFunction · 0.85

Calls 5

decode_fields32Function · 0.85
DecodeBitMasksFunction · 0.85
BFC_BFMFunction · 0.85
BFI_BFMFunction · 0.85
BFXIL_BFMFunction · 0.85

Tested by

no test coverage detected