From 29ca4f38f6ec1fd3a539444230fd769500c30eba Mon Sep 17 00:00:00 2001 From: Matt Larsen Date: Thu, 3 Mar 2016 19:42:35 -0500 Subject: [PATCH] Attempting type match --- .../tbb/internal/DeviceAdapterAlgorithmTBB.h | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/vtkm/cont/tbb/internal/DeviceAdapterAlgorithmTBB.h b/vtkm/cont/tbb/internal/DeviceAdapterAlgorithmTBB.h index 9810eb727..137d8de51 100644 --- a/vtkm/cont/tbb/internal/DeviceAdapterAlgorithmTBB.h +++ b/vtkm/cont/tbb/internal/DeviceAdapterAlgorithmTBB.h @@ -316,8 +316,14 @@ public: VTKM_EXEC_EXPORT T Add(vtkm::Id index, const T& value) const { + T* lockedValue; +#if defined(VTKM_MSVC) + typedef typename vtkm::cont::ArrayPortalToIterators::IteratorType IteratorType; typename IteratorType::pointer temp = &(*(Iterators.GetBegin()+index)); - T* lockedValue = temp; + lockedValue = temp; +#else + lockedValue = (Iterators.GetBegin()+index); +#endif return vtkmAtomicAdd(lockedValue, value); } @@ -325,14 +331,15 @@ private: typedef typename vtkm::cont::ArrayHandle ::template ExecutionTypes::Portal PortalType; typedef vtkm::cont::ArrayPortalToIterators IteratorsType; - typedef typename vtkm::cont::ArrayPortalToIterators::IteratorType IteratorType; IteratorsType Iterators; VTKM_EXEC_EXPORT vtkm::Int32 vtkmAtomicAdd(vtkm::Int32 *address, const vtkm::Int32 &value) const { #if defined(VTKM_MSVC) - return InterlockedExchangeAdd(address,value); + long msValue = value; + long * msPtr = (long *) address; + return InterlockedExchangeAdd(msPtr,msValue); #else return __sync_fetch_and_add(address,value); #endif @@ -342,7 +349,9 @@ private: vtkm::Int64 vtkmAtomicAdd(vtkm::Int64 *address, const vtkm::Int64 &value) const { #if defined(VTKM_MSVC) - return InterlockedExchangeAdd(address,value); + long long msValue = value; + long long * msPtr = (long long *) address; + return InterlockedExchangeAdd64(msPtr,msValue); #else return __sync_fetch_and_add(address,value); #endif @@ -352,7 +361,9 @@ private: vtkm::UInt32 vtkmAtomicAdd(vtkm::UInt32 *address, const vtkm::UInt32 &value) const { #if defined(VTKM_MSVC) - return InterlockedExchangeAdd64(address,value); + unsigned long msValue = value; + unsinged long * msPtr = (unsigned long *) address; + return InterlockedExchangeAdd(msPtr,msValue); #else return __sync_fetch_and_add(address,value); #endif @@ -362,7 +373,9 @@ private: vtkm::UInt64 vtkmAtomicAdd(vtkm::UInt64 *address, const vtkm::UInt64 &value) const { #if defined(VTKM_MSVC) - return InterlockedExchangeAdd64(address,value); + unsigned long long msValue = value; + unsigned long long * msPtr = (unsigend long long *) address; + return InterlockedExchangeAdd64(msPtr,msValue); #else return __sync_fetch_and_add(address,value); #endif