mirror of
https://git.suyu.dev/suyu/dynarmic.git
synced 2026-01-07 15:08:22 +01:00
frontend/ir/ir_emitter: Alter parameters of FPDoubleToSingle() and FPSingleToDouble() to pass along desired rounding mode
This will be necessary to special-case the non-IEEE Von Neumann rounding to odd rounding mode.
This commit is contained in:
parent
95af9dafbe
commit
7c81a58ed3
7 changed files with 52 additions and 29 deletions
|
|
@ -348,10 +348,11 @@ bool TranslatorVisitor::FCVTL(bool Q, bool sz, Vec Vn, Vec Vd) {
|
|||
}
|
||||
|
||||
const IR::U128 part = Vpart(64, Vn, Q);
|
||||
const auto rounding_mode = ir.current_location->FPCR().RMode();
|
||||
IR::U128 result = ir.ZeroVector();
|
||||
|
||||
for (size_t i = 0; i < 2; i++) {
|
||||
const IR::U64 element = ir.FPSingleToDouble(ir.VectorGetElement(32, part, i), true);
|
||||
const IR::U64 element = ir.FPSingleToDouble(ir.VectorGetElement(32, part, i), rounding_mode);
|
||||
|
||||
result = ir.VectorSetElement(64, result, i, element);
|
||||
}
|
||||
|
|
@ -367,10 +368,11 @@ bool TranslatorVisitor::FCVTN(bool Q, bool sz, Vec Vn, Vec Vd) {
|
|||
}
|
||||
|
||||
const IR::U128 operand = V(128, Vn);
|
||||
const auto rounding_mode = ir.current_location->FPCR().RMode();
|
||||
IR::U128 result = ir.ZeroVector();
|
||||
|
||||
for (size_t i = 0; i < 2; i++) {
|
||||
const IR::U32 element = ir.FPDoubleToSingle(ir.VectorGetElement(64, operand, i), true);
|
||||
const IR::U32 element = ir.FPDoubleToSingle(ir.VectorGetElement(64, operand, i), rounding_mode);
|
||||
|
||||
result = ir.VectorSetElement(32, result, i, element);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue