diff -uNr cairo-1.0.0.orig/pixman/src/fbmmx.c cairo-1.0.0/pixman/src/fbmmx.c --- cairo-1.0.0.orig/pixman/src/fbmmx.c 2005-08-19 06:40:01.000000000 +0200 +++ cairo-1.0.0/pixman/src/fbmmx.c 2005-08-27 17:40:15.000000000 +0200 @@ -2488,35 +2488,38 @@ vendor[0] = 0; vendor[12] = 0; /* see p. 118 of amd64 instruction set manual Vol3 */ - __asm__ ("push %%ebx\n" - "pushf\n" + __asm__ ("pushf\n" "pop %%eax\n" - "mov %%eax, %%ebx\n" + "mov %%eax, %%ecx\n" "xor $0x00200000, %%eax\n" "push %%eax\n" "popf\n" "pushf\n" "pop %%eax\n" "mov $0x0, %%edx\n" - "xor %%ebx, %%eax\n" + "xor %%ecx, %%eax\n" "jz skip\n" "mov $0x00000000, %%eax\n" + "push %%ebx\n" "cpuid\n" - "mov %%ebx, %1\n" + "mov %%ebx, %%esi\n" + "pop %%ebx\n" + "mov %%esi, %1\n" "mov %%edx, %2\n" "mov %%ecx, %3\n" "mov $0x00000001, %%eax\n" + "push %%ebx\n" "cpuid\n" + "pop %%ebx\n" "skip:\n" - "pop %%ebx\n" "mov %%edx, %0\n" : "=r" (result), "=m" (vendor[0]), "=m" (vendor[4]), "=m" (vendor[8]) : - : "%eax", "%ecx", "%edx" + : "%eax", "%ecx", "%edx", "%esi" ); unsigned int features = 0; @@ -2543,8 +2546,8 @@ "mov $0x80000001, %%eax\n" "cpuid\n" "skip2:\n" - "mov %%edx, %0\n" "pop %%ebx\n" + "mov %%edx, %0\n" : "=r" (result) : : "%eax", "%ecx", "%edx"