DSPRelated.com
Forums

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

Started by Unknown April 5, 2001
I think you need to add POP CNTR also.
Farhad V.

Subj: Re: [adsp] Illegal multifunction instruction & a DO-UNTIL query in ADSP
2181
Date: Thu, 5 Apr 2001 8:12:07 AM Eastern Daylight Time
From: Russell Shaw <>
To: Ian <>
CC: 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.


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.
>