fcmpe_float.xml */
| 5851 | |
| 5852 | /* fcmpe_float.xml */ |
| 5853 | int 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 */ |
| 5894 | int FCMP_float(context *ctx, Instruction *instr) |
no test coverage detected