What is the difference between instructions like addi and e_addi OR lwz and se_lwz? I am using previously developed assembly/C code and trying to make a project and build it using S32 design studio. I get errors on instructions like addi, and if I change it to e_addi, it will show no error. I am unsure what the e_ is for. Are there compiler options to change? Project settings? Does anyone know if there is any documentation for this? I have been unsuccessful at finding anything.
Thank you for this explanation and resources. So I guess se_ will be shorthand for `short enhanced` and e_ is `enhanced`.
Hello,
There are basically 2 kinds of instruction sets for MPC5xxx - BookE and VLE. Some derivatives(cores) support both while the others just one of them (e.g MPC5554 is BookE only, MPC560x derivatives are VLE only)
Which MPC derivative are you targeting?
not all instructions in BookE could be easily transformed into VLE form by adding "e_" or "se_"
e.g. ori instruction:
lis r11,0x4000
ori r11,r11,0x0000
=>
e_lis r11,0x4000
e_or2i r11,0x0000
16 bit VLE "se_" instructions typically uses just a reduced set of registers + they often share the same source and destination register.
As far as I know this translation BookE -> VLE is not available in GCC (S32DS) but you can use free Special edition version of CodeWarrior for MCU 10.7 to convert it.
Just create a new dummy project for any Qorivva MPC56xx device setup. Make sure the "Translate PPC Asm to VLE Asm (Zen)" option is selected.
Add your function e.g. as an asm function and disassembly the file:
For better reading I'd suggest you to disable "Show Source Code" In project properties -> C/C++ Build -> Settings ->PowerPC Disassembler.
Hope it helps.
Stan