From 8ff99d3c93cd93223d0e32a22ec0f91cfa430b8f Mon Sep 17 00:00:00 2001 From: Ginn Chen Date: Wed, 6 Jan 2010 15:24:30 +0800 Subject: [PATCH] Bug 535765 debug build Firefox failed to start on Solaris r=gal --- js/src/nanojit/Nativei386.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/js/src/nanojit/Nativei386.cpp b/js/src/nanojit/Nativei386.cpp index 09ae8a7e2217..1577ca19b061 100644 --- a/js/src/nanojit/Nativei386.cpp +++ b/js/src/nanojit/Nativei386.cpp @@ -93,13 +93,13 @@ namespace nanojit : "%eax", "%esi", "%ecx", "%edx" ); #elif defined __SUNPRO_C || defined __SUNPRO_CC - asm("push %%ebx\n" + asm("xchg %%esi, %%ebx\n" "mov $0x01, %%eax\n" "cpuid\n" - "pop %%ebx\n" + "xchg %%esi, %%ebx\n" : "=d" (features) : /* We have no inputs */ - : "%eax", "%ecx" + : "%eax", "%ecx", "esi" ); #endif return (features & (1<<26)) != 0; @@ -320,6 +320,12 @@ namespace nanojit btr RegAlloc::free[ecx], eax // free &= ~rmask(i) mov r, eax } + #elif defined __SUNPRO_C || defined __SUNPRO_CC + asm( + "bsf %1, %%edi\n\t" + "btr %%edi, (%2)\n\t" + "movl %%edi, %0\n\t" + : "=a"(r) : "d"(set), "c"(®s.free) : "%edi", "memory" ); #else asm( "bsf %1, %%eax\n\t"