SPRUIZ1B July 2023 – August 2024 TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1
32-Bit Floating-Point Multiply with Parallel Subtract
MRa | CLA floating-point destination register for MMPYF32 (MR0 to MR3) MRa cannot be the same register as MRd |
MRb | CLA floating-point source register for MMPYF32 (MR0 to MR3) |
MRc | CLA floating-point source register for MMPYF32 (MR0 to MR3) |
MRd | CLA floating-point destination register for MSUBF32 (MR0 to MR3) MRd cannot be the same register as MRa |
MRe | CLA floating-point source register for MSUBF32 (MR0 to MR3) |
MRf | CLA floating-point source register for MSUBF32 (MR0 to MR3) |
LSW: 0000 ffee ddcc bbaa
MSW: 0111 1010 0100 0000
Multiply the contents of two floating-point registers with parallel subtraction of two registers.
MRa = MRb * MRc;
MRd = MRe - MRf;
The destination register for the MMPYF32 and the MSUBF32 must be unique. That is, MRa cannot be the same register as MRd.
This instruction modifies the following flags in the MSTF register:.
Flag | TF | ZF | NF | LUF | LVF |
---|---|---|---|---|---|
Modified | No | No | No | Yes | Yes |
The MSTF register flags are modified as follows:
MMPYF32 and MSUBF32 both complete in a single cycle.
; Given A, B, and C are 32-bit floating-point numbers
; Calculate Y2 = (A * B)
; Y3 = (A - B)
;
_Cla1Task2:
MMOV32 MR0, @A ; Load MR0 with A
MMOV32 MR1, @B ; Load MR1 with B
MMPYF32 MR2, MR0, MR1 ; Multiply (A*B)
|| MSUBF32 MR3, MR0, MR1 ; and in parallel Sub (A-B)
MMOV32 @Y2, MR2 ; Store A*B
MMOV32 @Y3, MR3 ; Store A-B
MSTOP ; end of task