[vmkit-commits] [vmkit] r54634 - /vmkit/trunk/include/mvm/JIT.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Aug 11 00:20:53 PDT 2008


Author: geoffray
Date: Mon Aug 11 02:20:53 2008
New Revision: 54634

URL: http://llvm.org/viewvc/llvm-project?rev=54634&view=rev
Log:
Use LLVM atomic operations instead of gcc's. Find the right
macro to enable them with gcc > 4.2.


Modified:
    vmkit/trunk/include/mvm/JIT.h

Modified: vmkit/trunk/include/mvm/JIT.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/JIT.h?rev=54634&r1=54633&r2=54634&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/JIT.h (original)
+++ vmkit/trunk/include/mvm/JIT.h Mon Aug 11 02:20:53 2008
@@ -93,7 +93,10 @@
 
 extern llvm::Function* llvm_memcpy_i32;
 extern llvm::Function* llvm_memset_i32;
+extern llvm::Function* llvm_atomic_lcs_i8;
+extern llvm::Function* llvm_atomic_lcs_i16;
 extern llvm::Function* llvm_atomic_lcs_i32;
+extern llvm::Function* llvm_atomic_lcs_i64;
 
 extern llvm::ExecutionEngine* executionEngine;
 
@@ -159,6 +162,18 @@
 extern Code* getCodeFromPointer(void* addr);
 extern void addMethodInfo(void* end, Code* c);
 
+extern uint8  (*llvm_atomic_cmp_swap_i8)  ( uint8* ptr,  uint8 cmp,  uint8 val );
+extern uint16 (*llvm_atomic_cmp_swap_i16) ( uint16* ptr, uint16 cmp, uint16 val );
+extern uint32 (*llvm_atomic_cmp_swap_i32) ( uint32* ptr, uint32 cmp, uint32 val );
+extern uint64 (*llvm_atomic_cmp_swap_i64) ( uint64* ptr, uint64 cmp, uint64 val );
+
+// TODO: find what macro for gcc < 4.2
+#if 1
+#define __sync_bool_compare_and_swap(ptr, cmp, val) \
+  (mvm::jit::llvm_atomic_cmp_swap_i32((uint32*)(ptr), (uint32)(cmp), (uint32)(val)) == (uint32)(cmp))
+#define __sync_val_compare_and_swap(ptr, cmp,val) \
+  mvm::jit::llvm_atomic_cmp_swap_i32((uint32*)(ptr), (uint32)(cmp), (uint32)(val))
+#endif
 } // end namespace jit
 
 } // end namespace mvm





More information about the vmkit-commits mailing list