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. |
Illegal multifunction instruction & a DO-UNTIL query in ADSP 2181
Started by ●April 4, 2001
Reply by ●April 5, 20012001-04-05
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 \ \/\/ \__\/ \__\/ |
|
Reply by ●April 6, 20012001-04-06
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 \ \/\/ \__\/ \__\/ |