Index: runtime/vm/atomic_win.cc |
diff --git a/runtime/vm/atomic_win.cc b/runtime/vm/atomic_win.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..78a3fd6af0811de3791ec62ebf896382dffed8d7 |
--- /dev/null |
+++ b/runtime/vm/atomic_win.cc |
@@ -0,0 +1,28 @@ |
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+#include "platform/globals.h" |
+#if defined(TARGET_OS_WINDOWS) |
+ |
+#include "vm/atomic.h" |
+ |
+namespace dart { |
+ |
+ |
+uintptr_t AtomicOperations::FetchAndIncrement(uintptr_t* p) { |
+#if defined(TARGET_ARCH_X64) |
+ return static_cast<uintptr_t>( |
+ InterlockedIncrement64(reinterpret_cast<LONGLONG*>(p))) - 1; |
+#elif defined(TARGET_ARCH_IA32) |
+ return static_cast<uintptr_t>( |
+ InterlockedIncrement(reinterpret_cast<LONG*>(p))) - 1; |
+#else |
+ UNIMPLEMENTED(); |
+#endif |
+} |
+ |
+ |
+} // namespace dart |
+ |
+#endif // defined(TARGET_OS_WINDOWS) |