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

Function FCMPE_float

arch/arm64/disassembler/decode2.c:5853–5891  ·  view source on GitHub ↗

fcmpe_float.xml */

Source from the content-addressed store, hash-verified

5851
5852/* fcmpe_float.xml */
5853int FCMPE_float(context *ctx, Instruction *instr)
5854{
5855 int rc = DECODE_STATUS_UNMATCHED;
5856 /* class iclass_float */
5857 /* M=0|0|S=0|11110|ftype=xx|1|Rm=xxxxx|op=00|1000|Rn=xxxxx|opc=1x|opcode2[2:0]=000 */
5858 if((INSWORD & 0xFF20FC17)==0x1E202010) {
5859 decode_fields32(ENC_FCMPE_H_FLOATCMP, ctx, instr);
5860 ctx->n = UINT(ctx->Rn);
5861 ctx->m = UINT(ctx->Rm);
5862 if(!ctx->ftype) {
5863 ctx->datasize = 0x20;
5864 }
5865 else if(ctx->ftype==1) {
5866 ctx->datasize = 0x40;
5867 }
5868 else if(ctx->ftype==2) {
5869 UNDEFINED;
5870 }
5871 else if(ctx->ftype==3) {
5872 if(HaveFP16Ext()) {
5873 ctx->datasize = 0x10;
5874 }
5875 else {
5876 UNDEFINED;
5877 }
5878 }
5879 ctx->signal_all_nans = (SLICE(ctx->opc,1,1)==1);
5880 ctx->cmp_with_zero = (SLICE(ctx->opc,0,0)==1);
5881 if(ctx->ftype==3 && ctx->opc==2) OK(ENC_FCMPE_H_FLOATCMP);
5882 if(ctx->ftype==3 && /* PreferBitsEqual(['ctx->Rm'],'00000') */ true && ctx->opc==3) OK(ENC_FCMPE_HZ_FLOATCMP);
5883 if(ctx->ftype==0 && ctx->opc==2) OK(ENC_FCMPE_S_FLOATCMP);
5884 if(ctx->ftype==0 && /* PreferBitsEqual(['ctx->Rm'],'00000') */ true && ctx->opc==3) OK(ENC_FCMPE_SZ_FLOATCMP);
5885 if(ctx->ftype==1 && ctx->opc==2) OK(ENC_FCMPE_D_FLOATCMP);
5886 if(ctx->ftype==1 && /* PreferBitsEqual(['ctx->Rm'],'00000') */ true && ctx->opc==3) OK(ENC_FCMPE_DZ_FLOATCMP);
5887 }
5888 /* relevant operational pcode */
5889 instr->setflags = FLAGEFFECT_SETS_FLOAT;
5890 return rc;
5891}
5892
5893/* fcmp_float.xml */
5894int FCMP_float(context *ctx, Instruction *instr)

Callers 1

decode_iclass_floatcmpFunction · 0.85

Calls 1

decode_fields32Function · 0.85

Tested by

no test coverage detected