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

Function FMUL_advsimd_vec

arch/arm64/disassembler/decode2.c:9884–9918  ·  view source on GitHub ↗

fmul_advsimd_vec.xml */

Source from the content-addressed store, hash-verified

9882
9883/* fmul_advsimd_vec.xml */
9884int FMUL_advsimd_vec(context *ctx, Instruction *instr)
9885{
9886 int rc = DECODE_STATUS_UNMATCHED;
9887 /* class iclass_half */
9888 /* 0|Q=x|U=1|01110|a=0|10|Rm=xxxxx|00|opcode=011|1|Rn=xxxxx|Rd=xxxxx */
9889 if((INSWORD & 0xBFE0FC00)==0x2E401C00) {
9890 decode_fields32(ENC_FMUL_ASIMDSAMEFP16_ONLY, ctx, instr);
9891 if(!HaveFP16Ext()) {
9892 UNDEFINED;
9893 }
9894 ctx->d = UINT(ctx->Rd);
9895 ctx->n = UINT(ctx->Rn);
9896 ctx->m = UINT(ctx->Rm);
9897 ctx->esize = 0x10;
9898 ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40;
9899 ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0);
9900 OK(ENC_FMUL_ASIMDSAMEFP16_ONLY);
9901 }
9902 /* class iclass_single_and_double */
9903 /* 0|Q=x|U=1|01110|size[1]=0|sz=x|1|Rm=xxxxx|opcode=11011|1|Rn=xxxxx|Rd=xxxxx */
9904 if((INSWORD & 0xBFA0FC00)==0x2E20DC00) {
9905 decode_fields32(ENC_FMUL_ASIMDSAME_ONLY, ctx, instr);
9906 ctx->d = UINT(ctx->Rd);
9907 ctx->n = UINT(ctx->Rn);
9908 ctx->m = UINT(ctx->Rm);
9909 if(((ctx->sz<<1)|ctx->Q)==2) {
9910 UNDEFINED;
9911 }
9912 ctx->esize = (0x20) << (UINT(ctx->sz));
9913 ctx->datasize = (ctx->Q==1) ? 0x80 : 0x40;
9914 ctx->elements = ((ctx->esize) ? ((ctx->datasize) / (ctx->esize)) : 0);
9915 OK(ENC_FMUL_ASIMDSAME_ONLY);
9916 }
9917 return rc;
9918}
9919
9920/* fmul_float.xml */
9921int FMUL_float(context *ctx, Instruction *instr)

Callers 2

decode_iclass_asimdsameFunction · 0.85

Calls 1

decode_fields32Function · 0.85

Tested by

no test coverage detected