fabs_float.xml */
| 4145 | |
| 4146 | /* fabs_float.xml */ |
| 4147 | int FABS_float(context *ctx, Instruction *instr) |
| 4148 | { |
| 4149 | int rc = DECODE_STATUS_UNMATCHED; |
| 4150 | /* class iclass_float */ |
| 4151 | /* M=0|0|S=0|11110|ftype=xx|1|opcode[5:2]=0000|opc=01|10000|Rn=xxxxx|Rd=xxxxx */ |
| 4152 | if((INSWORD & 0xFF3FFC00)==0x1E20C000) { |
| 4153 | decode_fields32(ENC_FABS_H_FLOATDP1, ctx, instr); |
| 4154 | ctx->d = UINT(ctx->Rd); |
| 4155 | ctx->n = UINT(ctx->Rn); |
| 4156 | if(!ctx->ftype) { |
| 4157 | ctx->esize = 0x20; |
| 4158 | } |
| 4159 | else if(ctx->ftype==1) { |
| 4160 | ctx->esize = 0x40; |
| 4161 | } |
| 4162 | else if(ctx->ftype==2) { |
| 4163 | UNDEFINED; |
| 4164 | } |
| 4165 | else if(ctx->ftype==3) { |
| 4166 | if(HaveFP16Ext()) { |
| 4167 | ctx->esize = 0x10; |
| 4168 | } |
| 4169 | else { |
| 4170 | UNDEFINED; |
| 4171 | } |
| 4172 | } |
| 4173 | if(!ctx->opc) { |
| 4174 | ctx->fpop = FPUnaryOp_MOV; |
| 4175 | } |
| 4176 | else if(ctx->opc==1) { |
| 4177 | ctx->fpop = FPUnaryOp_ABS; |
| 4178 | } |
| 4179 | else if(ctx->opc==2) { |
| 4180 | ctx->fpop = FPUnaryOp_NEG; |
| 4181 | } |
| 4182 | else if(ctx->opc==3) { |
| 4183 | ctx->fpop = FPUnaryOp_SQRT; |
| 4184 | } |
| 4185 | if(ctx->ftype==3) OK(ENC_FABS_H_FLOATDP1); |
| 4186 | if(ctx->ftype==0) OK(ENC_FABS_S_FLOATDP1); |
| 4187 | if(ctx->ftype==1) OK(ENC_FABS_D_FLOATDP1); |
| 4188 | } |
| 4189 | return rc; |
| 4190 | } |
| 4191 | |
| 4192 | /* facge_advsimd.xml */ |
| 4193 | int FACGE_advsimd(context *ctx, Instruction *instr) |
no test coverage detected