4 MAC INSTRUCTIONS Figure 4-0. Table 4-0. Listing 4-0. The instruction set provides MAC instructions for performing high-speed multiplication and multiply with cumulative add/subtract operations. MAC instructions include: • “Multiply” on page 4-8 • “Multiply with Cumulative Add” on page 4-11 • “Multiply with Cumulative Subtract” on page 4-14 • “MAC Clear” on page 4-17 • “MAC Round/Transfer” on page 4-19 • “MAC Saturate” on page 4-21 • “Generate MAC Status Only: NONE” on page 4-24 This chapter describes the individual MAC instructions and the following related topics: • “MAC Input Registers” on page 4-2 • “MAC Output Registers” on page 4-2 • “Data Format Options” on page 4-3 • “Status Flags” on page 4-7 For details on condition codes and data input and output registers, see “Condition Codes” on page 9-11 and “Core Register Codes” on page 9-13. ADSP-219x Instruction Set Reference 4-1 MAC Instructions MAC Input Registers All unconditional, single-function multiply and multiply with accumula- tive add or subtract instructions can use any DREG data register for the x and y input operands (for details, see “Core Register Codes” on page 9-13). So, the program can use, for example, the ALU registers for the multiplication or shifter operations, without issuing a separate data move instruction. This capability simplifies register allocation in algorithm cod- ing. For example, using the DSP’s dual accumulator: SR = SR + MX0 * MY0 (SS); But in multifunction operations, you can use only certain registers for the x-input operand (AR, MX0, MX1, MR0, MR1, MR2, SR0, SR1) and the y-input operand ( MY0, MY1, SR1, 0). All conditional MAC instructions must use the restricted xop and yop data registers for the x and y input operands, or an xop register for the x-input and 0 for the y-input. MAC Output Registers All MAC instructions can use the multiplier MR output registers or the shifter SR output registers to receive the result of a multiplier operation. Availability of the shifter SR output registers for multiplier operations pro- vides dual accumulator functionality. When MR is the result register, results are directly available from MR0, MR1, or MR2 as the x-input operand into the very next multiplier operation. MR = MR + AX0 * AX0 (SS); When SR is the result register, the 16-bit value in SR1 (bits 31:16 of the 40-bit result) is directly available as the y-input operand into the very next multiplier operation. This functionality is most useful when shifting the 4-2 ADSP-219x Instruction Set Reference Data Format Options results of a multiply/accumulate operation since it decreases the number of required data moves. SR = SR + AX0 * AY0 (SS); SR = SR + SR1 * AY0 (SS); Data Format Options Multiplier operations require the instruction to specify the data format of the input operands (either signed or unsigned) or specify that the multi- plier rounds (RND) the product of two signed operands. All data format options, except the round option ( RND), which affects the product stored in the result register, specify the format of both input oper- ands in x/y order. The data format options are: • (RND) Round value in result register. When overflow occurs, rounds the product to the most significant twenty-four bits—SR2/SR1 or MR2/MR1 represent the rounded 24-bit result. Otherwise, rounds bits 31:16 to sixteen bits—MR1 or SR1 con- tain the rounded 16-bit result. With (RND) selected, the multiplier considers both input operands signed (twos complement). If the DSP is in fractional mode (MSTAT:M_MODE = 0), the multiplier rounds the result after adjusting for fractional data format. For details, see “Numeric Format Modes” on page 4-6. The DSP provides two rounding modes, biased and unbiased, to support a variety of application algorithms. For details, see “Round- ing Modes” on page 4-4. ADSP-219x Instruction Set Reference 4-3 MAC Instructions • (SS) Both input operands are signed numbers. Signed numbers are in twos complement format. You use this option to multiply two signed single-precision numbers or to multiply the upper portions of two signed multiprecision numbers. • (SU) X-input operand is signed; y-input operand is unsigned. You use this option to multiply a signed single-precision number by an unsigned single-precision number. • (US) X-input operand is unsigned; y-input operand is signed. You use this option to multiply an unsigned single-precision num- ber by a signed single-precision number. • (UU) Both input operands are unsigned numbers. Unsigned num- bers are in ones complement format. You use this option to multiply two unsigned single-precision num- bers or to multiply the lower portions of two signed multiprecision numbers. Rounding Modes Rounding operates on the boundary between bits 15 and 16 of the 40-bit adder result. The multiplier directs the rounded output to either the MR or the SR result registers. The ADSP-219x provides two modes for rounding. The rounding algo- rithm is the same for both modes, but the final results can differ when the product equals the midway value (MR0 = 0x8000). In both methods, the multiplier adds 1 to value of bit 15 in the adder chain. But when MR0 = 0x8000, the multiplier forces bit 16 in the result output to 0. Although applied on every rounding operation, the result of this algorithm is evident only when MR0 = 0x8000 in the adder chain. 4-4 ADSP-219x Instruction Set Reference Data Format Options The rounding mode determines the final result. The BIASRND bit in the ICNTL register selects the mode. BIASRND = 0 selects unbiased rounding, and BIASRND = 1 selects biased rounding. • Unbiased rounding Default mode. Rounds up only when MR1/SR1 set to an odd value; otherwise, rounds down. Yields a zero large-sample bias. • Biased rounding Always rounds up when MR0/SR0 is set to 0x8000. Table 4-1 shows the results of rounding for both modes. Table 4-1. MR result values MR Value before RND Biased RND Result Unbiased RND Result 00-0000-8000 00-0001-0000 00-0000-0000 00-0001-8000 00-0002-0000 00-0002-0000 00-0000-8001 00-0001-0001 00-0001-0001 00-0001-8001 00-0002-0001 00-0002-0001 00-0000-7FFF 00-0000-FFFF 00-0000-FFFF 00-0001-7FFF 00-0001-FFFF 00-0001- FFFF Unbiased rounding, preferred for most algorithms, yields a zero large-sam- ple bias, assuming uniformly distributed values. Biased rounding supports efficient implementation of bit-specified algorithms, such as GSM speech compression routines. ADSP-219x Instruction Set Reference 4-5 MAC Instructions Numeric Format Modes The multiplier can operate on integers or fractions. The M_MODE bit in the MSTAT register selects the mode. M_MODE = 0 selects fractional mode, and M_MODE = 1 selects integer mode. The mode determines whether the multiplier shifts the product before adding or subtracting it from the result register. • Integer mode 16.0 integer format The LSB of the 32-bit product is aligned with the LSB of MR0/SR0. In multiply and accumulate operations, the multiplier sign-extends the 32-bit product (8 bits) then adds or subtracts that value from the result register to form the new 40-bit result. The multiplier sets the MV/SV overflow bit when the result falls out- side the range of −1 to +1−231. • Fractional mode 1.15 fraction format Fractions range from −1 to +1−215. The MSB of the product is aligned with the MSB of MR1/SR1. MR1-0/SR1-0 hold a 32-bit frac- tion (1.31 format) in the range of −1 to +1−231, while MR2/SR2 con- tains the eight sign-extended bits. In total, the MR/SR registers contains a fraction in 9.31 format. In multiply and accumulate operations, the multiplier adjusts the format of the 32-bit product before adding or subtracting it from the result register. To do so, the multiplier sign-extends the product (7 bits), shifts it one bit to the left, and then adds or subtracts that value from the result register to form the new 40-bit result. The multiplier sets the MV/SV overflow bit when the result falls out- side the range of −1 to +1−231. 4-6 ADSP-219x Instruction Set Reference Status Flags Status Flags Two status flags in the ASTAT register record the status of multiplier opera- tions. MV = 1 records an overflow or underflow state when MR is the specified result register, and SV = 1 records an overflow or underflow state when SR is the specified result register. ADSP-219x Instruction Set Reference 4-7 MAC Instructions Multiply MR = DREG1 * DREG2 ( RND ) ; SR SS SU US UU [IF COND] MR = XOP * YOP ( RND ) ; SR XOP SS SU US UU FUNCTION Multiplies the input operands and stores the result in the specified result register. Optionally, inputs may be signed or unsigned, and output may be rounded. For more information on input and output options, see “Data Format Options” on page 4-3. If execution is based on a condition, the multiplier performs the multipli- cation only if the condition evaluates true, and it performs a NOP operation if the condition evaluates false. Omitting the condition forces uncondi- tional execution of the instruction. 4-8 ADSP-219x Instruction Set Reference Multiply INPUT For the unconditional form of this instruction, you can use any of these data registers for the DREG inputs: Register File AX0, AX1, AY0, AY1, AR, MX0, MX1, MY0, MY1, MR0, MR1, MR2, SR0, SR1, SR2, SI For the conditional form of this instruction, the input operands are restricted. Valid XOP and YOP registers are: Xops Yops AR, MX0, MX1, MR0, MR1, MR2, SR0, SR1 MY0, MY1, SR1, 0 OUTPUT MR Multiplier result register. Results are directly available for x input only in the next conditional ALU, MAC, or shifter operation or as either x or y input in the next unconditional ALU, MAC, or shifter operation. SR Multiplier feedback register. Results are directly available for either x ( SR0 and SR1) or y (SR1 only) input in the next conditional ALU, MAC, or shifter operation or as either x or y input in the next unconditional ALU, MAC, or shifter operation. STATUS FLAGS Affected Flags–set or cleared by the operation Unaffected Flags MV (if MR used), SV (if SR used) AZ, AN, AV, AC, AS, AQ, SS For information on these status bits in the ASTAT register, see Table 2-2 on page 2-5. ADSP-219x Instruction Set Reference 4-9 MAC Instructions DETAILS This instruction provides a squaring operation (XOP*XOP and DREG1*DREG1) that performs single-cycle X2 and ΣX2 functions. In squaring operations, you must use the same register for both x-input operands. You cannot use DREG form of the multiply instruction in multifunction instructions. EXAMPLES MR = AY0 * SI (RND); /* mult DREGs, round result */ SR = AX0 * MX1 (SS); /* mult DREGs, signed inputs */ IF MV MR = MX0 * MY0 (SU); /* mult signed X, unsigned Y */ CCODE = 0x09; NOP; /* set CCODE for SV condition */ IF SWCOND SR = MR0 * SR1 (UU); /* mult unsigned X and Y */ SEE ALSO • “Type 9: Compute” on page 9-27 • “Condition Code (CCODE) Register” on page 2-6 • “Mode Status (MSTAT) Register” on page 2-11 4-10 ADSP-219x Instruction Set Reference Multiply with Cumulative Add Multiply with Cumulative Add MR = MR + DREG1 * DREG2 ( RND ) ; SR = SR SS SU US UU [IF COND] MR = MR + XOP * YOP ( RND ) ; SR = SR YOP XOP SS SU US UU FUNCTION Multiplies the input operands, adds the product to the current contents of the MR or SR register, and then stores the sum in the corresponding result register. Optionally, inputs may be signed or unsigned, and output may be rounded. For more information on input and output options, see “Data Format Options” on page 4-3. If execution is based on a condition, the multiplier performs the operation only if the condition evaluates true, and it performs a NOP operation if the condition evaluates false. Omitting the condition forces unconditional execution of the instruction. ADSP-219x Instruction Set Reference 4-11 MAC Instructions INPUT For the unconditional form of this instruction, you can use any of these data registers for the DREG inputs: Register File AX0, AX1, AY0, AY1, AR, MX0, MX1, MY0, MY1, MR0, MR1, MR2, SR0, SR1, SR2, SI For the conditional form of this instruction, the input operands are restricted. Valid XOP and YOP registers are: Xops Yops AR, MX0, MX1, MR0, MR1, MR2, SR0, SR1 MY0, MY1, SR1, 0 OUTPUT MR Multiplier result register. Results are directly available for x input only in the next conditional ALU, MAC, or shifter operation or as either x or y input in the next unconditional ALU, MAC, or shifter operation. SR Multiplier feedback register. Results are directly available for either x ( SR0 and SR1) or y (SR1 only) input in the next conditional ALU, MAC, or shifter operation or as either x or y input in the next unconditional ALU, MAC, or shifter operation. STATUS FLAGS Affected Flags–set or cleared by the operation Unaffected Flags MV (if MR used), SV (if SR used) AZ, AN, AV, AC, AS, AQ, SS For information on these status bits in the ASTAT register, see Table 2-2 on page 2-5. 4-12 ADSP-219x Instruction Set Reference Multiply with Cumulative Add DETAILS This instruction provides a squaring operation (xop*xop and DREG*DREG) that performs single-cycle X2 and ΣX2 functions. In squaring operations, you must use the same register for both x-input operands. You cannot use unconditional (Dreg) form of the multiply instruction in multifunction instructions. EXAMPLES MR = MR + AX0 * SI (RND); /* mult DREGs, rnd output, sum */ SR = SR + AX1 * MX0 (SS); /* mult DREGs, sign input, sum */ IF MV MR = MR + MR0 * MY0 (SU); /* mult X/Yops, un/sign in, sum */ IF MV MR = MR + MR2 * MX1 (UU); /* mult X/Yops, unsign in, sum */ CCODE = 0x09; NOP; /* set CCODE for SV condition */ IF SWCOND SR=SR+SR0*MY0 (US); /* mult X/Yops, un/sign in, sum */ SEE ALSO • “Type 9: Compute” on page 9-27 • “Condition Code (CCODE) Register” on page 2-6 • “Mode Status (MSTAT) Register” on page 2-11 ADSP-219x Instruction Set Reference 4-13 MAC Instructions Multiply with Cumulative Subtract MR = MR − DREG1 * DREG2 ( RND ) ; SR = SR SS SU US UU [IF COND] MR = MR − XOP * YOP ( RND ) ; SR = SR YOP XOP SS SU US UU FUNCTION Multiplies the input operands, subtracts the product from the current contents of the MR or SR register, and then stores the result in the corre- sponding destination register. Optionally, inputs may be signed or unsigned, and output may be rounded. For more information on input and output options, see “Data Format Options” on page 4-3. If execution is based on a condition, the multiplier performs the operation only if the condition evaluates true, and it performs a NOP operation if the condition evaluates false. Omitting the condition forces unconditional execution of the instruction. 4-14 ADSP-219x Instruction Set Reference Multiply with Cumulative Subtract INPUT For the unconditional form of this instruction, you can use any of these data registers for the DREG inputs: Register File AX0, AX1, AY0, AY1, AR, MX0, MX1, MY0, MY1, MR0, MR1, MR2, SR0, SR1, SR2, SI For the conditional form of this instruction, the input operands are restricted. Valid XOP and YOP registers are: Xops Yops AR, MX0, MX1, MR0, MR1, MR2, SR0, SR1 MY0, MY1, SR1, 0 OUTPUT MR Multiplier result register. Results are directly available for x input only in the next conditional ALU, MAC, or shifter operation or as either x or y input in the next unconditional ALU, MAC, or shifter operation. SR Multiplier feedback register. Results are directly available for either x ( SR0 and SR1) or y (SR1 only) input in the next conditional ALU, MAC, or shifter operation or as either x or y input in the next unconditional ALU, MAC, or shifter operation. STATUS FLAGS Affected Flags–set or cleared by the operation Unaffected Flags MV (if MR used), SV (if SR used) AZ, AN, AV, AC, AS, AQ, SS For information on these status bits in the ASTAT register, see Table 2-2 on page 2-5. ADSP-219x Instruction Set Reference 4-15 MAC Instructions DETAILS This instruction provides a squaring operation (xop*xop and DREG*DREG) that performs single-cycle X2 and ΣX2 functions. In squaring operations, you must use the same register for both x input operands. You cannot use unconditional (Dreg) form of the multiply instruction in multifunction instructions. EXAMPLES MR = MR - AX0 * SI (RND); /* mult DREGs, rnd output, sub */ SR = SR - AX1 * MX0 (SS); /* mult DREGs, sign input, sub */ IF MV MR = MR - MR0 * MY0 (SU); /* mult X/Yops, un/sign in, sub */ IF MV MR = MR - MR2 * MX1 (UU); /* mult X/Yops, unsign in, sub */ CCODE = 0x09; NOP; /* set CCODE for SV condition */ IF SWCOND SR=SR-SR0*MY0 (US); /* mult X/Yops, un/sign in, sub */ SEE ALSO • “Type 9: Compute” on page 9-27 • “Condition Code (CCODE) Register” on page 2-6 • “Mode Status (MSTAT) Register” on page 2-11 4-16 ADSP-219x Instruction Set Reference MAC Clear MAC Clear [IF COND] MR = 0 ; SR FUNCTION Sets the specified register to 0. If execution is based on a condition, the multiplier performs the operation only if the condition evaluates true, and it performs a NOP operation if the condition evaluates false. Omitting the condition forces unconditional execution of the instruction. INPUT This instruction is a special case of xop * yop with the y-input operand set to 0. OUTPUT MR Multiplier result register. Results are directly available for x input only in the next conditional ALU, MAC, or shifter operation or as either x or y input in the next unconditional ALU, MAC, or shifter operation. SR Multiplier feedback register. Results are directly available for either x ( SR0 and SR1) or y (SR1 only) input in the next conditional ALU, MAC, or shifter operation or as either x or y input in the next unconditional ALU, MAC, or shifter operation. ADSP-219x Instruction Set Reference 4-17 MAC Instructions STATUS FLAGS Affected Flags–set or cleared by the operation Unaffected Flags MV (cleared if MR used), SV (cleared if SR used) AZ, AN, AV, AC, AS, AQ, SS For information on these status bits in the ASTAT register, see Table 2-2 on page 2-5. DETAILS See description in “function” on page 4-17. EXAMPLES MR = 0; /* clears MR */ SR = 0; /* clears SR */ SEE ALSO • “Type 9: Compute” on page 9-27 • “Condition Code (CCODE) Register” on page 2-6 • “Mode Status (MSTAT) Register” on page 2-11 4-18 ADSP-219x Instruction Set Reference MAC Round/Transfer MAC Round/Transfer [IF COND] MR = MR (RND) ; [IF COND] SR = SR (RND) ; FUNCTION Performs a multiply with cumulative add operation in which the y-input operand is 0 and the zero-product is added to the specified result register. Rounding (RND) directs the multiplier to round the entire 40-bit value stored in the result register, MR or SR. If execution is based on a condition, the multiplier performs the operation only if the condition evaluates true, and it performs a NOP operation if the condition evaluates false. Omitting the condition forces unconditional execution of the instruction. INPUT This instruction is a special case of MR|SR + xop * yop with the y-input operand set to 0. OUTPUT MR Multiplier result register. Results are directly available for x input only in the next conditional ALU, MAC, or shifter operation or as either x or y input in the next unconditional ALU, MAC, or shifter operation. SR Multiplier feedback register. Results are directly available for either x ( SR0 and SR1) or y (SR1 only) input in the next conditional ALU, MAC, or shifter operation or as either x or y input in the next unconditional ALU, MAC, or shifter operation. ADSP-219x Instruction Set Reference 4-19 MAC Instructions STATUS FLAGS Affected Flags–set or cleared by the operation Unaffected Flags MV (if MR used), SV (if SR used) AZ, AN, AV, AC, AS, AQ, SS For information on these status bits in the ASTAT register, see Table 2-2 on page 2-5. DETAILS The BIASRND bit in the ICNTL register determines the rounding mode. Refer to the section “Rounding Modes” on page 4-4 for more informa- tion. For a complete description of the MAC Round/ Transfer instruction, see the section “function” on page 4-19. EXAMPLES MR = MR (RND); /* round MR */ IF EQ SR = SR (RND); /* round SR */ SEE ALSO • “Type 9: Compute” on page 9-27 • “Condition Code (CCODE) Register” on page 2-6 • “Mode Status (MSTAT) Register” on page 2-11 4-20 ADSP-219x Instruction Set Reference MAC Saturate MAC Saturate SAT MR ; SAT SR ; FUNCTION Tests the MV (MAC overflow) or SV (shifter overflow) bit in the ASTAT reg- ister. If set ( 1), the multiplier saturates the low-order (31:0) bits of the 40-bit MR or SR register; otherwise, the multiplier performs a NOP operation. INPUT None. OUTPUT MR Multiplier result register. Results are directly available for x input only in the next conditional ALU, MAC, or shifter operation or as either x or y input in the next unconditional ALU, MAC, or shifter operation. SR Multiplier feedback register. Results are directly available for either x ( SR0 and SR1) or y (SR1 only) input in the next conditional ALU, MAC, or shifter operation or as either x or y input in the next unconditional ALU, MAC, or shifter operation. STATUS FLAGS Affected Flags–set or cleared by the operation Unaffected Flags AZ, AN, AV, AC, AS, AQ, SS, MV, SV For information on these status bits in the ASTAT register, see Table 2-2 on page 2-5. ADSP-219x Instruction Set Reference 4-21 MAC Instructions DETAILS The MAC saturation instruction provides control over a multiplication result that has overflowed or underflowed. It saturates the value in the specified register only for the cycle in which it executes. It does not enable a mode that continuously saturates results until disabled, like the ALU. Used at the end of a series of multiply and accumulate operations, the sat- uration instruction prevents the accumulator from overflowing. For every operation it performs, the multiplier generates an overflow sta- tus signal MV (SV when SR is the specified result register), which is recorded in the ASTAT status register. MV = 1 when the accumulator result, inter- preted as a signed (twos complement) number, crosses the 32-bit boundary, spilling over from MR1 into MR2. That is, the multiplier sets MV = 1 when the upper nine bits in MR are anything other than all 0s or all 1s. Otherwise, it sets MV = 0. The operation invoked by the saturation instruction depends on the over- flow status bit MV (or SV) and the MSB of MR2, which appear in Table 4-2. If MV/SV = 0, no saturation occurs. When MV/SV = 1, the multiplier exam- ines the MSB of MR2 to determine whether the result has overflowed or underflowed. If the MSB = 0, the result has overflowed, and the multiplier saturates the MR register, setting it to the maximum positive value. If the MSB = 1, the result has underflowed, and the multiplier saturates the MR register, setting it to the maximum negative value. Table 4-2. Saturation Status Bits & Result Registers MV/SV MSB of MR2/SR2 MR/SR Results 0 0 No change. 0 1 No change. 1 0 00000000 0111111111111111 1111111111111111 1 1 11111111 1000000000000000 0000000000000000 4-22 ADSP-219x Instruction Set Reference MAC Saturate Do not permit the result to overflow beyond the MSB of MR2. Otherwise, the true sign bit of the result is irretrievably lost, and saturation may not produce a correct result. To reach this state, however, takes more than 255 overflows (MV type). EXAMPLES SAT MR; /* saturate MR */ SAT SR; /* saturate SR */ SEE ALSO • “Type 9: Compute” on page 9-27 • “Condition Code (CCODE) Register” on page 2-6 • “Mode Status (MSTAT) Register” on page 2-11 ADSP-219x Instruction Set Reference 4-23 MAC Instructions Generate MAC Status Only: NONE [NONE =] ; FUNCTION Performs the indicated unconditional MAC operation but does not load the results into the MR or SR result registers. Generates MAC status flags only. You can use this instruction to set MAC status without disturbing the contents of the MR and SR result registers. INPUT XOP Limits the registers for the x input operand. Valid XOP registers are: Xops AR, MX0, MX1, MR0, MR1, MR2, SR0, SR1 YOP Limits the registers for the x input operand. Valid YOP registers are: Yops MY0, MY1, SR1, 0 OUTPUT None. Generates MAC status flags only. 4-24 ADSP-219x Instruction Set Reference Generate MAC Status Only: NONE STATUS FLAGS Affected Flags–set or cleared by the operation Unaffected Flags MV AZ, AN, AV, AC, AS, AQ, SS, SV For information on these status bits in the ASTAT register, see Table 2-2 on page 2-5. DETAILS You can use any unconditional MAC operation to generate MAC status flags. EXAMPLES MX0 * MY0; /* generate status from mult */ SEE ALSO • “Type 8: Compute | Dreg1 «··· Dreg2” on page 9-26. ADSP-219x Instruction Set Reference 4-25 MAC Instructions 4-26 ADSP-219x Instruction Set Reference