fmadd_float.xml */
| 7988 | |
| 7989 | /* fmadd_float.xml */ |
| 7990 | int FMADD_float(context *ctx, Instruction *instr) |
| 7991 | { |
| 7992 | int rc = DECODE_STATUS_UNMATCHED; |
| 7993 | /* class iclass_float */ |
| 7994 | /* M=0|0|S=0|11111|ftype=xx|o1=0|Rm=xxxxx|o0=0|Ra=xxxxx|Rn=xxxxx|Rd=xxxxx */ |
| 7995 | if((INSWORD & 0xFF208000)==0x1F000000) { |
| 7996 | decode_fields32(ENC_FMADD_H_FLOATDP3, ctx, instr); |
| 7997 | ctx->d = UINT(ctx->Rd); |
| 7998 | ctx->a = UINT(ctx->Ra); |
| 7999 | ctx->n = UINT(ctx->Rn); |
| 8000 | ctx->m = UINT(ctx->Rm); |
| 8001 | if(!ctx->ftype) { |
| 8002 | ctx->esize = 0x20; |
| 8003 | } |
| 8004 | else if(ctx->ftype==1) { |
| 8005 | ctx->esize = 0x40; |
| 8006 | } |
| 8007 | else if(ctx->ftype==2) { |
| 8008 | UNDEFINED; |
| 8009 | } |
| 8010 | else if(ctx->ftype==3) { |
| 8011 | if(HaveFP16Ext()) { |
| 8012 | ctx->esize = 0x10; |
| 8013 | } |
| 8014 | else { |
| 8015 | UNDEFINED; |
| 8016 | } |
| 8017 | } |
| 8018 | ctx->opa_neg = (ctx->o1==1); |
| 8019 | ctx->op1_neg = (ctx->o0!=ctx->o1); |
| 8020 | if(ctx->ftype==3) OK(ENC_FMADD_H_FLOATDP3); |
| 8021 | if(ctx->ftype==0) OK(ENC_FMADD_S_FLOATDP3); |
| 8022 | if(ctx->ftype==1) OK(ENC_FMADD_D_FLOATDP3); |
| 8023 | } |
| 8024 | return rc; |
| 8025 | } |
| 8026 | |
| 8027 | /* fmaxnmp_advsimd_pair.xml */ |
| 8028 | int FMAXNMP_advsimd_pair(context *ctx, Instruction *instr) |
no test coverage detected