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

Function FCMP_float

arch/arm64/disassembler/decode2.c:5894–5932  ·  view source on GitHub ↗

fcmp_float.xml */

Source from the content-addressed store, hash-verified

5892
5893/* fcmp_float.xml */
5894int FCMP_float(context *ctx, Instruction *instr)
5895{
5896 int rc = DECODE_STATUS_UNMATCHED;
5897 /* class iclass_float */
5898 /* M=0|0|S=0|11110|ftype=xx|1|Rm=xxxxx|op=00|1000|Rn=xxxxx|opc=0x|opcode2[2:0]=000 */
5899 if((INSWORD & 0xFF20FC17)==0x1E202000) {
5900 decode_fields32(ENC_FCMP_H_FLOATCMP, ctx, instr);
5901 ctx->n = UINT(ctx->Rn);
5902 ctx->m = UINT(ctx->Rm);
5903 if(!ctx->ftype) {
5904 ctx->datasize = 0x20;
5905 }
5906 else if(ctx->ftype==1) {
5907 ctx->datasize = 0x40;
5908 }
5909 else if(ctx->ftype==2) {
5910 UNDEFINED;
5911 }
5912 else if(ctx->ftype==3) {
5913 if(HaveFP16Ext()) {
5914 ctx->datasize = 0x10;
5915 }
5916 else {
5917 UNDEFINED;
5918 }
5919 }
5920 ctx->signal_all_nans = (SLICE(ctx->opc,1,1)==1);
5921 ctx->cmp_with_zero = (SLICE(ctx->opc,0,0)==1);
5922 if(ctx->ftype==3 && ctx->opc==0) OK(ENC_FCMP_H_FLOATCMP);
5923 if(ctx->ftype==3 && /* PreferBitsEqual(['ctx->Rm'],'00000') */ true && ctx->opc==1) OK(ENC_FCMP_HZ_FLOATCMP);
5924 if(ctx->ftype==0 && ctx->opc==0) OK(ENC_FCMP_S_FLOATCMP);
5925 if(ctx->ftype==0 && /* PreferBitsEqual(['ctx->Rm'],'00000') */ true && ctx->opc==1) OK(ENC_FCMP_SZ_FLOATCMP);
5926 if(ctx->ftype==1 && ctx->opc==0) OK(ENC_FCMP_D_FLOATCMP);
5927 if(ctx->ftype==1 && /* PreferBitsEqual(['ctx->Rm'],'00000') */ true && ctx->opc==1) OK(ENC_FCMP_DZ_FLOATCMP);
5928 }
5929 /* relevant operational pcode */
5930 instr->setflags = FLAGEFFECT_SETS_FLOAT;
5931 return rc;
5932}
5933
5934/* fcsel_float.xml */
5935int FCSEL_float(context *ctx, Instruction *instr)

Callers 1

decode_iclass_floatcmpFunction · 0.85

Calls 1

decode_fields32Function · 0.85

Tested by

no test coverage detected