tags  518837 + patch
thanks

On 2009/3/9 Peter De Schrijver wrote:
> Package: opencascade
> Version: 6.3.0.dfsg.1-1
> Severity: serious
>
> There was an error while trying to autobuild your package:
[...]

Indeed, all non-x86 arches fail due to assembly code.
Attached patch should work, but I own only x86 machines
and cannot test it, will test it later on x86 to ensure that it
is harmless.

Denis
Index: opencascade/ros/inc/Standard_Atomic.hxx
===================================================================
--- opencascade.orig/ros/inc/Standard_Atomic.hxx
+++ opencascade/ros/inc/Standard_Atomic.hxx
@@ -51,35 +51,24 @@
 //       however these definitions involve specific type atomic_t
 // Note: The same code probably would work for Intel compiler
 //===================================================
-#elif defined(LIN)
+#elif defined(__GNUG__)
 
-inline void Standard_Atomic_Increment (int volatile* var)
+#include <ext/atomicity.h>
+
+inline void Standard_Atomic_Increment (int* var)
 {
   // C equivalent:
   // ++(*var);
 
-  __asm__ __volatile__
-  (
-    "lock incl %0"
-  : "=m"(*var) // out
-  : "m" (*var) // in 
-  );
+  __gnu_cxx::__atomic_add_dispatch(static_cast<_Atomic_word*>(var), 1);
 }
 
-inline int Standard_Atomic_DecrementTest (int volatile* var)
+inline int Standard_Atomic_DecrementTest (int* var)
 {
   // C equivalent:
   // return --(*var) == 0;
 
-  unsigned char c;
-  __asm__ __volatile__
-  (
-    "lock decl %0; sete %1"
-  : "=m"(*var), "=qm"(c) // out
-  : "m" (*var)           // in
-  : "memory"
-  );
-  return c != 0;
+  return __gnu_cxx::__exchange_and_add_dispatch(static_cast<_Atomic_word*>(var),-1) == 1;
 }
 
 //===================================================
Index: opencascade/ros/src/Standard/Standard_Atomic.hxx
===================================================================
--- opencascade.orig/ros/src/Standard/Standard_Atomic.hxx
+++ opencascade/ros/src/Standard/Standard_Atomic.hxx
@@ -51,35 +51,24 @@
 //       however these definitions involve specific type atomic_t
 // Note: The same code probably would work for Intel compiler
 //===================================================
-#elif defined(LIN)
+#elif defined(__GNUG__)
 
-inline void Standard_Atomic_Increment (int volatile* var)
+#include <ext/atomicity.h>
+
+inline void Standard_Atomic_Increment (int* var)
 {
   // C equivalent:
   // ++(*var);
 
-  __asm__ __volatile__
-  (
-    "lock incl %0"
-  : "=m"(*var) // out
-  : "m" (*var) // in 
-  );
+  __gnu_cxx::__atomic_add_dispatch(static_cast<_Atomic_word*>(var), 1);
 }
 
-inline int Standard_Atomic_DecrementTest (int volatile* var)
+inline int Standard_Atomic_DecrementTest (int* var)
 {
   // C equivalent:
   // return --(*var) == 0;
 
-  unsigned char c;
-  __asm__ __volatile__
-  (
-    "lock decl %0; sete %1"
-  : "=m"(*var), "=qm"(c) // out
-  : "m" (*var)           // in
-  : "memory"
-  );
-  return c != 0;
+  return __gnu_cxx::__exchange_and_add_dispatch(static_cast<_Atomic_word*>(var),-1) == 1;
 }
 
 //===================================================

Reply via email to