3 emac opcodes, Emac opcodes -13 – Freescale Semiconductor MCF5480 User Manual

Page 161

Advertising
background image

EMAC Instruction Set Summary

MCF548x Reference Manual, Rev. 3

Freescale Semiconductor

4-13

This format can represent numbers in the range -1 < operand < 1 - 2

(N-1)

.

For words and longwords, the largest negative number that can be represented is -1, whose internal

representation is 0x8000 and 0x8000_0000, respectively. The largest positive word is 0x7FFF or (1 - 2

-15

);

the most positive longword is 0x7FFF_FFFF or (1 - 2

-31

).

4.3.3

EMAC Opcodes

EMAC opcodes are described in the ColdFire Programmer’s Reference Manual. Note the following:

Unless otherwise noted, the value of MACSR[N,Z] is based on the result of the final operation that

involves the product and the accumulator.

The overflow (V) flag is handled differently. It is set if the complete product cannot be represented

as a 40-bit value (this applies to 32

× 32 integer operations only) or if the combination of the

product with an accumulator cannot be represented in the given number of bits. The EMAC design

includes an additional product/accumulation overflow bit for each accumulator that are treated as

sticky indicators and are used to calculate the V bit on each MAC or MSAC instruction. See

Section 4.2.1, “MAC Status Register (MACSR)

.”

For the MAC design, the assembler syntax of the MAC (multiply and add to accumulator) and

MSAC (multiply and subtract from accumulator) instructions does not include a reference to the

single accumulator. For the EMAC, it is expected that assemblers support this syntax and that no

explicit reference to an accumulator is interpreted as a reference to ACC0. These assemblers would

also support syntaxes where the destination accumulator is explicitly defined.

The optional 1-bit shift of the product is specified using the notation {<< | >>} SF, where <<1

indicates a left shift and >>1 indicates a right shift. The shift is performed before the product is

added to or subtracted from the accumulator. Without this operator, the product is not shifted. If the

EMAC is in fractional mode (MACSR[F/I] is set), SF is ignored and no shift is performed. Because

a product can overflow, the following guidelines are implemented:
— For unsigned word and longword operations, a zero is shifted into the product on right shifts.
— For signed, word operations, the sign bit is shifted into the product on right shifts unless the

product is zero. For signed, longword operations, the sign bit is shifted into the product unless

an overflow occurs or the product is zero, in which case a zero is shifted in.

— For all left shifts, a zero is inserted into the lsb position.

The following pseudocode explains basic MAC or MSAC instruction functionality. This example is

presented as a case statement covering the three basic operating modes with signed integers, unsigned

integers, and signed fractionals. Throughout this example, a comma-separated list in curly brackets, {},

indicates a concatenation operation.

switch (MACSR[6:5])

/* MACSR[S/U, F/I] */

{

case 0:

/* signed integers */

if (MACSR.OMC == 0 || MACSR.PAVx == 0)

then {

MACSR.PAVx = 0
/* select the input operands */
if (sz == word)

then {if (U/Ly == 1)

then operandY[31:0] = {sign-extended Ry[31], Ry[31:16]}

else operandY[31:0] = {sign-extended Ry[15], Ry[15:0]}

if (U/Lx == 1)

then operandX[31:0] = {sign-extended Rx[31], Rx[31:16]}

else operandX[31:0] = {sign-extended Rx[15], Rx[15:0]}

Advertising
This manual is related to the following products: