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:
parent
e4c259d69f
commit
16de99d3e3
1 changed files with 8 additions and 4 deletions
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue