On Tue, Sep 29, 2015 at 12:40 AM, Martin Nilsson (Opera Mini - AFK!) @ Pike (-) developers forum 10353@lyskom.lysator.liu.se wrote:
Well, I didn't actually change the order. But I see that the code in cpulib outputs them differently depending on which assembler code is used, which is bad of course. Fixing that should make ia32 work with all compilers.
Ah, I didn't notice that it varied according to which assembler is being used. What I saw was this:
#ifdef CL_X86_ASM_STYLE __asm { mov eax, oper; mov edi, cpuid_ptr; cpuid; mov [edi], eax; mov [edi+4], ebx; mov [edi+8], edx; mov [edi+12], ecx; };
which definitely stashes them into memory in order EAX/EBX/EDX/ECX, which corresponds to the comment. I'm not familiar with the other syntax, which uses =a, =r, =c, =d, but since you switched those, I'm assuming they correspond to the Accumulator, Result??, Counter, and Data registers.
Thanks!
ChrisA
I'm not sure what they stand for (well, they are listed in the x86 processor specific output constraints in the gcc documentation). I simply checked that the output string is correct if called as ia32.c calls the code.
pike-devel@lists.lysator.liu.se