fnmsub_float.xml */
| 10076 | |
| 10077 | /* fnmsub_float.xml */ |
| 10078 | int FNMSUB_float(context *ctx, Instruction *instr) |
| 10079 | { |
| 10080 | int rc = DECODE_STATUS_UNMATCHED; |
| 10081 | /* class iclass_float */ |
| 10082 | /* M=0|0|S=0|11111|ftype=xx|o1=1|Rm=xxxxx|o0=1|Ra=xxxxx|Rn=xxxxx|Rd=xxxxx */ |
| 10083 | if((INSWORD & 0xFF208000)==0x1F208000) { |
| 10084 | decode_fields32(ENC_FNMSUB_H_FLOATDP3, ctx, instr); |
| 10085 | ctx->d = UINT(ctx->Rd); |
| 10086 | ctx->a = UINT(ctx->Ra); |
| 10087 | ctx->n = UINT(ctx->Rn); |
| 10088 | ctx->m = UINT(ctx->Rm); |
| 10089 | if(!ctx->ftype) { |
| 10090 | ctx->esize = 0x20; |
| 10091 | } |
| 10092 | else if(ctx->ftype==1) { |
| 10093 | ctx->esize = 0x40; |
| 10094 | } |
| 10095 | else if(ctx->ftype==2) { |
| 10096 | UNDEFINED; |
| 10097 | } |
| 10098 | else if(ctx->ftype==3) { |
| 10099 | if(HaveFP16Ext()) { |
| 10100 | ctx->esize = 0x10; |
| 10101 | } |
| 10102 | else { |
| 10103 | UNDEFINED; |
| 10104 | } |
| 10105 | } |
| 10106 | ctx->opa_neg = (ctx->o1==1); |
| 10107 | ctx->op1_neg = (ctx->o0!=ctx->o1); |
| 10108 | if(ctx->ftype==3) OK(ENC_FNMSUB_H_FLOATDP3); |
| 10109 | if(ctx->ftype==0) OK(ENC_FNMSUB_S_FLOATDP3); |
| 10110 | if(ctx->ftype==1) OK(ENC_FNMSUB_D_FLOATDP3); |
| 10111 | } |
| 10112 | return rc; |
| 10113 | } |
| 10114 | |
| 10115 | /* fnmul_float.xml */ |
| 10116 | int FNMUL_float(context *ctx, Instruction *instr) |
no test coverage detected