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;
}
//===================================================