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. |
Re: Illegal multifunction instruction & a DO-UNTIL query in ADSP 2181
Started by ●April 5, 2001
Reply by ●April 5, 20012001-04-05
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. > |