From de4064155569540b15c1f56bd99c2ceae54fa44f Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Sat, 12 Apr 2025 13:22:51 +1000 Subject: More recompiler fixes: * cpu/drcbec.cpp: Interpret index operand for load/store instructions as a signed value for consistency with other back-ends. * cpu/drcbec.cpp: Honour alignment rules when packing immediate values. * cpu/drcbex64.cpp: Don't special-case SEXT with an immediate source - the simplifier takes care of this. * cpu/drcbex86.cpp: Be explicit about preserving flags in load/store instructions. * docs: Added a couple more UML data movement instructions. --- docs/source/techspecs/uml_instructions.rst | 82 ++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) (limited to 'docs') diff --git a/docs/source/techspecs/uml_instructions.rst b/docs/source/techspecs/uml_instructions.rst index 771ff64974d..5d379dd1c60 100644 --- a/docs/source/techspecs/uml_instructions.rst +++ b/docs/source/techspecs/uml_instructions.rst @@ -751,6 +751,88 @@ Simplification rules * Converted to :ref:`NOP ` if the ``src`` and ``dst`` operands refer to the same memory location or register. +.. _umlinst-fcopyi: + +FCOPYI +~~~~~~ + +Reinterpret an integer value as a floating point value. The binary +value will be preserved even if it is not a valid representation of a +floating point number. + ++---------------------+-----------------------------------+ +| Disassembly | Usage | ++=====================+===================================+ +| .. code-block:: | .. code-block:: C++ | +| | | +| fscopyi dst,src | UML_FSCOPYI(block, dst, src); | +| fdcopyi dst,src | UML_FDCOPYI(block, dst, src); | ++---------------------+-----------------------------------+ + +Operands +^^^^^^^^ + +dst (32-bit or 64-bit – memory, floating point register) + The destination where the value will be copied to. +src (32-bit or 64-bit – memory, integer register) + The source value to copy. + +Flags +^^^^^ + ++---------------+------------+ +| carry (C) | Unchanged. | ++---------------+------------+ +| overflow (V) | Unchanged. | ++---------------+------------+ +| zero (Z) | Unchanged. | ++---------------+------------+ +| sign (S) | Unchanged. | ++---------------+------------+ +| unordered (U) | Unchanged. | ++---------------+------------+ + +.. _umlinst-icopyf: + +ICOPYF +~~~~~~ + +Reinterpret a floating point value as an integer value. The binary +value will be preserved even if it is not a valid representation of a +floating point number. + ++---------------------+-----------------------------------+ +| Disassembly | Usage | ++=====================+===================================+ +| .. code-block:: | .. code-block:: C++ | +| | | +| icopyfs dst,src | UML_ICOPYFS(block, dst, src); | +| icopyfd dst,src | UML_ICOPYFD(block, dst, src); | ++---------------------+-----------------------------------+ + +Operands +^^^^^^^^ + +dst (32-bit or 64-bit – memory, integer register) + The destination where the value will be copied to. +src (32-bit or 64-bit – memory, floating point register) + The source value to copy. + +Flags +^^^^^ + ++---------------+------------+ +| carry (C) | Unchanged. | ++---------------+------------+ +| overflow (V) | Unchanged. | ++---------------+------------+ +| zero (Z) | Unchanged. | ++---------------+------------+ +| sign (S) | Unchanged. | ++---------------+------------+ +| unordered (U) | Unchanged. | ++---------------+------------+ + .. _umlinst-load: LOAD -- cgit v1.2.3