Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 31 Aug 2015 04:42:59 +0000 (UTC)
From:      Alexey Dokuchaev <danfe@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r395648 - head/graphics/appleseed/files
Message-ID:  <201508310442.t7V4gxnm038292@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: danfe
Date: Mon Aug 31 04:42:58 2015
New Revision: 395648
URL: https://svnweb.freebsd.org/changeset/ports/395648

Log:
  - Use %edi register to save/restore contents of %ebx instead of pushing
    it on stack to make the code work for both 32/64-bit x86
  - Make the corresponding comment more accurate while I'm at it
  
  Reported by:	pkg-fallout

Modified:
  head/graphics/appleseed/files/patch-src_appleseed_foundation_platform_system.cpp

Modified: head/graphics/appleseed/files/patch-src_appleseed_foundation_platform_system.cpp
==============================================================================
--- head/graphics/appleseed/files/patch-src_appleseed_foundation_platform_system.cpp	Mon Aug 31 02:54:15 2015	(r395647)
+++ head/graphics/appleseed/files/patch-src_appleseed_foundation_platform_system.cpp	Mon Aug 31 04:42:58 2015	(r395648)
@@ -15,7 +15,7 @@
  // Other platforms.
  #else
  
-@@ -421,6 +429,384 @@ uint64 System::get_process_virtual_memor
+@@ -421,6 +429,386 @@ uint64 System::get_process_virtual_memor
      return static_cast<uint64>(rss) * sysconf(_SC_PAGESIZE);
  }
  
@@ -43,16 +43,17 @@
 +    size_t linesize;
 +} mycaches[3];
 +
-+// %ebx may be used to store GOT (Global Offset Table) for PIC (Position
-+// Independent Code), so use %esi instead.
++// %ebx is used to point to GOT (Global Offset Table) for PIC (Position
++// Independent Code) on 32-bit x86, so use %edi to preserve %ebx across
++// the call and %esi when passing CPUID arguments and return values.
 +static inline void
 +cpuid(uint32_t* data)
 +{
-+    asm("pushl %%ebx\n\t"
++    asm("movl %%ebx, %%edi\n\t"
 +        "movl %%esi, %%ebx\n\t"
 +        "cpuid\n\t"
 +        "movl %%ebx, %%esi\n\t"
-+        "popl %%ebx"
++        "movl %%edi, %%ebx"
 +      : "=a" (data[eax]),
 +        "=S" (data[ebx]),
 +        "=c" (data[ecx]),
@@ -60,7 +61,8 @@
 +      :  "a" (data[eax]),
 +         "S" (data[ebx]),
 +         "c" (data[ecx]),
-+         "d" (data[edx]));
++         "d" (data[edx])
++      : "%edi");
 +}
 +
 +// For modern CPUs, we use Deterministic Cache Parameters (Function 04h) to



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201508310442.t7V4gxnm038292>