3 muls/mulu, 4 scale factor in mac or msac instructions, 2 mask register (mask) – Freescale Semiconductor MCF5480 User Manual

Page 158: Mask register (mask) -10

Advertising
background image

MCF548x Reference Manual, Rev. 3

4-10

Freescale Semiconductor

move.l d6,mask

; restore the address mask

move.l d7,macsr

; restore the macsr

By executing this type of sequence, the exact state of the EMAC programming model can be correctly

saved and restored.

4.2.1.1.3

MULS/MULU

MULS and MULU are unaffected by fractional mode operation; operands are still assumed to be integers.

4.2.1.1.4

Scale Factor in MAC or MSAC Instructions

The scale factor is ignored while the MAC is in fractional mode.

4.2.2

Mask Register (MASK)

The 32-bit MASK implements the low-order 16 bits to minimize the alignment complications involved

with loading and storing only 16 bits. When the MASK is loaded, the low-order 16 bits of the source

operand are actually loaded into the register. When it is stored, the upper 16 bits are all forced to ones.
This register performs a simple AND with the operand address for MAC instructions. That is, the

processor calculates the normal operand address and, if enabled, that address is then ANDed with

{0xFFFF, MASK[15:0]} to form the final address. Therefore, with certain MASK bits cleared, the operand

address can be constrained to a certain memory region. This is used primarily to implement circular queues

in conjunction with the (An)+ addressing mode.
This feature minimizes the addressing support required for filtering, convolution, or any routine that

implements a data array as a circular queue. For MAC + MOVE operations, the MASK contents can

optionally be included in all memory effective address calculations. The syntax is as follows:

MAC.sz Ry,RxSF,<ea>y&,Rw

The & operator enables the use of MASK and causes bit 5 of the extension word to be set. The exact

algorithm for the use of MASK is as follows:

if extension word, bit [5] = 1, the MASK bit, then

if <ea> = (An)

oa = An & {0xFFFF, MASK}

if <ea> = (An)+

oa = An
An = (An + 4) & {0xFFFF, MASK}

if <ea> =-(An)

oa = (An - 4) & {0xFFFF, MASK}
An = (An - 4) & {0xFFFF, MASK}

if <ea> = (d16,An)

oa = (An + se_d16) & {0xFFFF0x, MASK}

Here, oa is the calculated operand address and se_d16 is a sign-extended 16-bit displacement. For

auto-addressing modes of post-increment and pre-decrement, the calculation of the updated An value is

also shown.
Use of the post-increment addressing mode, {(An)+} with the MASK is suggested for circular queue

implementations.

Advertising
This manual is related to the following products: