fnmadd_float.xml */
| 10038 | |
| 10039 | /* fnmadd_float.xml */ |
| 10040 | int FNMADD_float(context *ctx, Instruction *instr) |
| 10041 | { |
| 10042 | int rc = DECODE_STATUS_UNMATCHED; |
| 10043 | /* class iclass_float */ |
| 10044 | /* M=0|0|S=0|11111|ftype=xx|o1=1|Rm=xxxxx|o0=0|Ra=xxxxx|Rn=xxxxx|Rd=xxxxx */ |
| 10045 | if((INSWORD & 0xFF208000)==0x1F200000) { |
| 10046 | decode_fields32(ENC_FNMADD_H_FLOATDP3, ctx, instr); |
| 10047 | ctx->d = UINT(ctx->Rd); |
| 10048 | ctx->a = UINT(ctx->Ra); |
| 10049 | ctx->n = UINT(ctx->Rn); |
| 10050 | ctx->m = UINT(ctx->Rm); |
| 10051 | if(!ctx->ftype) { |
| 10052 | ctx->esize = 0x20; |
| 10053 | } |
| 10054 | else if(ctx->ftype==1) { |
| 10055 | ctx->esize = 0x40; |
| 10056 | } |
| 10057 | else if(ctx->ftype==2) { |
| 10058 | UNDEFINED; |
| 10059 | } |
| 10060 | else if(ctx->ftype==3) { |
| 10061 | if(HaveFP16Ext()) { |
| 10062 | ctx->esize = 0x10; |
| 10063 | } |
| 10064 | else { |
| 10065 | UNDEFINED; |
| 10066 | } |
| 10067 | } |
| 10068 | ctx->opa_neg = (ctx->o1==1); |
| 10069 | ctx->op1_neg = (ctx->o0!=ctx->o1); |
| 10070 | if(ctx->ftype==3) OK(ENC_FNMADD_H_FLOATDP3); |
| 10071 | if(ctx->ftype==0) OK(ENC_FNMADD_S_FLOATDP3); |
| 10072 | if(ctx->ftype==1) OK(ENC_FNMADD_D_FLOATDP3); |
| 10073 | } |
| 10074 | return rc; |
| 10075 | } |
| 10076 | |
| 10077 | /* fnmsub_float.xml */ |
| 10078 | int FNMSUB_float(context *ctx, Instruction *instr) |
no test coverage detected