From a69b700afbcbbf57f79fb78bced61b42fb210a32 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 23 Sep 2020 00:21:52 -0700 Subject: [PATCH] Support setting emulator host rounding mode with ldmxcsr/stmxcsr --- .../FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/External/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp b/External/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp index 036b16f61..6afb6c663 100644 --- a/External/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp +++ b/External/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp @@ -7253,11 +7253,19 @@ void OpDispatchBuilder::UCOMISxOp(OpcodeArgs) { } void OpDispatchBuilder::LDMXCSR(OpcodeArgs) { + OrderedNode *Dest = LoadSource(GPRClass, Op, Op->Dest, Op->Flags, -1); + // We only support the rounding mode being set + OrderedNode *RoundingMode = _Bfe(4, 3, 13, Dest); + _SetRoundingMode(RoundingMode); } void OpDispatchBuilder::STMXCSR(OpcodeArgs) { // Default MXCSR - StoreResult(GPRClass, Op, _Constant(0x1F80), -1); + OrderedNode *MXCSR = _Constant(32, 0x1F80); + OrderedNode *RoundingMode = _GetRoundingMode(); + MXCSR = _Bfi(3, 13, MXCSR, RoundingMode); + + StoreResult(GPRClass, Op, MXCSR, -1); } template