It turns out most of the thumb2 instructions are not allowed to touch SP. The semanti...
[llvm/avr.git] / lib / System / Win32 / Mutex.inc
blob75f01fefacbb0f406e8de0d7b20cefa00d9bc70c
1 //===- llvm/System/Win32/Mutex.inc - Win32 Mutex Implementation -*- C++ -*-===//
2 // 
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 // 
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the Win32 specific (non-pthread) Mutex class.
12 //===----------------------------------------------------------------------===//
14 //===----------------------------------------------------------------------===//
15 //=== WARNING: Implementation here must contain only generic Win32 code that
16 //===          is guaranteed to work on *all* Win32 variants.
17 //===----------------------------------------------------------------------===//
19 #include "Win32.h"
20 #include "llvm/System/Mutex.h"
22 namespace llvm {
23 using namespace sys;
25 MutexImpl::MutexImpl(bool /*recursive*/)
27   data_ = new CRITICAL_SECTION;
28   InitializeCriticalSection((LPCRITICAL_SECTION)data_);
31 MutexImpl::~MutexImpl()
33   DeleteCriticalSection((LPCRITICAL_SECTION)data_);
34   delete (LPCRITICAL_SECTION)data_;
35   data_ = 0;
38 bool 
39 MutexImpl::acquire()
41   EnterCriticalSection((LPCRITICAL_SECTION)data_);
42   return true;
45 bool 
46 MutexImpl::release()
48   LeaveCriticalSection((LPCRITICAL_SECTION)data_);
49   return true;
52 bool 
53 MutexImpl::tryacquire()
55   return TryEnterCriticalSection((LPCRITICAL_SECTION)data_);