Page 1 of 1

ET_ILLEGAL_INSTRUCTION, Unable to decode instruction

Posted: Tue Dec 06, 2016 5:49 pm
by slava
Hi,

I am trying to run some PWM code (assembly version from sc_pwm forked from XMOS) on xCORE-200 architecture and facing the following error:

Code: Select all

xrun: Program received signal ET_ILLEGAL_INSTRUCTION, Unable to decode instruction.
      [Switching to tile[1] core[0] (dual issue)]
      pwm_op_inv () at <*>/sc_pwm/module_pwm_symmetrical/src/server/pwm_op_inv.S:53

      53		entsp 13
      Current language:  auto; currently asm
Is there any specifics of using assembly that was developed for the old architecture on the new architecture?

Thanks,
Slava

Re: ET_ILLEGAL_INSTRUCTION, Unable to decode instruction

Posted: Tue Dec 06, 2016 5:58 pm
by Thomas
I suspect the problem is that xCORE-200 is in dual issue mode when your function is called.
Because you are using the 16-bit version of entsp, the next 16-bit in memory are half of a 32-bit instruction.
16-bit aligned 32-bit instructions are not allowed in dual issue mode so this caused ET_ILLEGAL_INSTRUCTION.

Try using the 32 bit version of entsp: ENTSP_lu6

This should not cause ET_ILLEGAL_INSTRUCTION and change to single issue mode.
Then the rest of the assembly function should execute in single issue mode as normal.

Further Infos about Single/Dual issue are in Chapter 5.2 Single and Dual Issue in
http://www.xmos.com/published/xs2-isa-specification

If this post solves your problem, please mark it "Solved" by clicking the green check icon.