2015-07-06 12:16 AM
Hello,
I have a few questions regarding exceptions in microcontroller mentioned in the topic.
I'm trying to cause Illegal instruction exception (IVOR6) by substituting part of hex with 0x0000. According to PowerISA v2.06B ''an instruction consisting entirely of binaly 0s is illegal, and is quaranteed to be illegal in all future versions of this architecture''. The problem is no exception is taken. From what i know this exception is not maskable so it always should be taken assuming requirements are met. I also tried writing program counter to memory region consisting of all 0s and no exception is taken. Is this behaviour correct and how can I cause this exception? How can i translate hex code to instructions performed by microcontroller, hex code doesn't seem to correspond to opcodes presented in e200z4 core documentation? When exacly are Floating-point unavailable (IVOR7) and SPE Unavailable (IVOR32) exceptions taken? If MSR[FP] = 0 and MSR[SPE] = 0 and division of floating-point is performed by execution of efsdiv operation, no exception is taken. Is this behaviour correct?Best regards
2015-07-08 04:51 AM
2015-07-09 02:09 AM
Hello,
1) Would be grateful for information what you found out. 2) I'm using Trace32 and Lauterbach debugger in case this matters. Let's consider lwz (Load Word & Zero) operation. In software i found 3 occurences of this operation: C007 se_lwz r0, 0x0(r7) opcode target source 1100 00|00 000|0 0111 0x30 0x0 0x7 - 0x30 is lfs (load floating-point single) 50E836E0 e_lwz r7, 0x36E0(r8) opcode target source argument 0101 00|00 111|0 1000| 0011 0110 1110 0000 0x14 0x7 0x8 0x36E0 - 0x14 is rlwimi (rotate left word immed then mask insert) 514836E0 e_lwz r10, 0x36E0(r8) 0101 00|01 010|0 1000| 0011 0110 1110 0000 0x14 0xA 0x8 0x36E0 Help me understand this. According to e200z4 core and Power ISA documentation opcode for lwz operation should be 100000 (0x32). Am i missing something or am i just plain stupid :] Thank you very much for your help Best regards2015-07-10 03:05 AM
Hello Darius ,
1) we are continuing to investigate2) it matches well , your opcode calculation is just not good. (Cf Below)Cf APPENDIX Ase_lwzC007 se_lwz r0, 0x0(r7) ==> SD4 C000---- VLE se_lwz Load Word and Zero Short Form1100 00|00 000|0 01110x30 0x0 0x7 - 0x30 is lfs (load floating-point single)
1100 0000 | 0000 01110xC00750E836E0 e_lwz r7, 0x36E0(r8) ==> D 50000000 VLE e_lwz Load Word and Zero514836E0 e_lwz r10, 0x36E0(r8) ==> D 50000000 VLE e_lwz Load Word and Zero Best Regards Erwan2015-08-26 02:45 AM
Hello,
Any results on the investigation why Illegal Exception is not called?2015-08-27 03:01 AM
of the MSR are copied into SRR1 and the address of the se_illegal instruction is placed into SRR0.
MSR[WE,EE,PR,IS,DS,FP,FE0,FE1] are cleared. Best Regards Erwan