fcmp_float.xml */
| 5892 | |
| 5893 | /* fcmp_float.xml */ |
| 5894 | int 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 */ |
| 5935 | int FCSEL_float(context *ctx, Instruction *instr) |
no test coverage detected