On 10.05.2016 14:05, Paolo Bonzini wrote: > > > On 20/04/2016 11:24, Thomas Huth wrote: >>>> + ".long 0x7fe154aa\n" /* lswi r31, r1, 10 */ >>> >>> Perhaps you can add a comment explaining why you are using a .long >>> instead of the mnemonic? >> >> The compiler is smart enough to detect that r1 is in the range of >> registers that get clobbered, and thus rejects that mnemonic. You >> quickly notice that when replacing the .long with the mnemonic, so I'm >> not sure whether it's worth to add a verbose comment here... Paolo, what >> do you prefer? > > The assembler does this, not the compiler. Right, of course. > Is this a valid operation at all, or is it undefined? (aka, what > does it do on real hardware)? O_o The specification (PowerISA) says "If RA is in the range of registers to be loaded, including the case in which RA=0, the instruction form is invalid." ... which sounds like the CPU is supposed to raise an invalid instruction exception. However, on real hardware (POWER8), the CPU simply stops before loading that register and continues with the next instruction. In any case, the contents of the RA register should not be destroyed, and this is what we're testing here. (and this is also already mentioned in a comment later in the patch already, right before the report() line). Thomas -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html