DSPRelated.com
Forums

Illegal multifunction instruction & a DO-UNTIL query in ADSP 2181

Started by Ian April 4, 2001
Q1 - My assembler is telling me that the following instruction is an illegal
multifunction
but I can't see anything wrong, and the processor manual implies that it
should be possible

MR = MR + MX0 * MX0 (SS), MX0 = DM(I0, M1);

Any comments ?

Q2 - I have a loop construct of the following form

CNTR = 15;
DO loop UNTIL CE;
xxxxxx;
IF NOT CE JUMP DecCntr;
JUMP Quit2;

DecCntr: xxxxxx;
xxxxxx;
loop: xxxxxx;

Quit1: {a normal loop exit}
RTS;

Quit2: {alternative loop exit}
RTS;

Where xxxx indicate irrelevant code in this example.

The question is what POPs (if any) should occur at the Quit2 point ?
The processor manual is a bit vague on what gets POPed by IF NOT CE when it
does not jump.
I have assumed that the Quit2 line should execute a POP PC, POP LOOP;
instruction
which seems to work ok.





Ian wrote:
>
> Q1 - My assembler is telling me that the following instruction is an illegal
> multifunction
> but I can't see anything wrong, and the processor manual implies that it
> should be possible
>
> MR = MR + MX0 * MX0 (SS), MX0 = DM(I0, M1);
>
> Any comments ?

Can't do MX0*MX0, because that's two Xops. Need something like MX0*MY0.

>
> Q2 - I have a loop construct of the following form
>
> CNTR = 15;
> DO loop UNTIL CE;
> xxxxxx;
> IF NOT CE JUMP DecCntr;
> JUMP Quit2;
>
> DecCntr: xxxxxx;
> xxxxxx;
loop: nop;
>
> Quit1: {a normal loop exit}
> RTS;
>
> Quit2: {alternative loop exit}
POP PC, POP LOOP;
> RTS;
>
> Where xxxx indicate irrelevant code in this example.
>
> The question is what POPs (if any) should occur at the Quit2 point ?
> The processor manual is a bit vague on what gets POPed by IF NOT CE when it
> does not jump.

> I have assumed that the Quit2 line should execute a POP PC, POP LOOP;
> instruction which seems to work ok.

I think thats right. --
___ ___
/ /\ / /\
/ /__\ / /\/\
/__/ / Russell Shaw, B.Eng, M.Eng(Research) /__/\/\/
\ \ / Victoria, Australia, Down-Under \ \/\/
\__\/ \__\/



Yes, it says the squaring operation is valid on 2181 (ie: not 2100 type)

Page 15-41 of ADSP-2100 Family User's Manual. pop cntr may be needed
too.

Tom Hartnett wrote:
>
> The sqare command *is* valid on the newer processors. It's not really clear
> whether is can be used in a multifunction statement though. My suspicion is
> that it can't and ADI forget to mention it.
>
> > > Q1 - My assembler is telling me that the following instruction is an
> illegal
> > > multifunction
> > > but I can't see anything wrong, and the processor manual implies that it
> > > should be possible
> > >
> > > MR = MR + MX0 * MX0 (SS), MX0 = DM(I0, M1);
> > >
> > > Any comments ?
> >
> > Can't do MX0*MX0, because that's two Xops. Need something like MX0*MY0.
> >

--
___ ___
/ /\ / /\
/ /__\ / /\/\
/__/ / Russell Shaw, B.Eng, M.Eng(Research) /__/\/\/
\ \ / Victoria, Australia, Down-Under \ \/\/
\__\/ \__\/