A64: Enable FCVT floating-point conversions for half-precision

With this, we no longer have to fall back to the interpreter in any of
the FCVT floating-point conversion instructions.
This commit is contained in:
Lioncash 2019-03-23 10:16:20 -04:00 committed by MerryMage
parent e4c259d69f
commit 16de99d3e3

View file

@ -112,15 +112,18 @@ bool TranslatorVisitor::FCVT_float(Imm<2> type, Imm<2> opc, Vec Vn, Vec Vd) {
case 16: case 16:
switch (*dstsize) { switch (*dstsize) {
case 32: case 32:
return InterpretThisInstruction(); result = ir.FPHalfToSingle(operand, rounding_mode);
break;
case 64: case 64:
return InterpretThisInstruction(); result = ir.FPHalfToDouble(operand, rounding_mode);
break;
} }
break; break;
case 32: case 32:
switch (*dstsize) { switch (*dstsize) {
case 16: case 16:
return InterpretThisInstruction(); result = ir.FPSingleToHalf(operand, rounding_mode);
break;
case 64: case 64:
result = ir.FPSingleToDouble(operand, rounding_mode); result = ir.FPSingleToDouble(operand, rounding_mode);
break; break;
@ -129,7 +132,8 @@ bool TranslatorVisitor::FCVT_float(Imm<2> type, Imm<2> opc, Vec Vn, Vec Vd) {
case 64: case 64:
switch (*dstsize) { switch (*dstsize) {
case 16: case 16:
return InterpretThisInstruction(); result = ir.FPDoubleToHalf(operand, rounding_mode);
break;
case 32: case 32:
result = ir.FPDoubleToSingle(operand, rounding_mode); result = ir.FPDoubleToSingle(operand, rounding_mode);
break; break;