summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gc/env/gcenv.interlocked.inl16
-rw-r--r--src/gc/gc.cpp10
-rw-r--r--src/strongname/api/api.props3
-rw-r--r--src/vm/gcenv.os.cpp2
4 files changed, 22 insertions, 9 deletions
diff --git a/src/gc/env/gcenv.interlocked.inl b/src/gc/env/gcenv.interlocked.inl
index 943bc2ef98..62e171cadf 100644
--- a/src/gc/env/gcenv.interlocked.inl
+++ b/src/gc/env/gcenv.interlocked.inl
@@ -137,8 +137,12 @@ template <typename T>
__forceinline T Interlocked::ExchangePointer(T volatile * destination, T value)
{
#ifdef _MSC_VER
+#ifdef BIT64
return (T)(TADDR)_InterlockedExchangePointer((void* volatile *)destination, value);
#else
+ return (T)(TADDR)_InterlockedExchange((long volatile *)(void* volatile *)destination, (long)(void*)value);
+#endif
+#else
return (T)(TADDR)__sync_swap((void* volatile *)destination, value);
#endif
}
@@ -147,8 +151,12 @@ template <typename T>
__forceinline T Interlocked::ExchangePointer(T volatile * destination, std::nullptr_t value)
{
#ifdef _MSC_VER
+#ifdef BIT64
return (T)(TADDR)_InterlockedExchangePointer((void* volatile *)destination, value);
#else
+ return (T)(TADDR)_InterlockedExchange((long volatile *)(void* volatile *)destination, (long)(void*)value);
+#endif
+#else
return (T)(TADDR)__sync_swap((void* volatile *)destination, value);
#endif
}
@@ -165,8 +173,12 @@ template <typename T>
__forceinline T Interlocked::CompareExchangePointer(T volatile *destination, T exchange, T comparand)
{
#ifdef _MSC_VER
+#ifdef BIT64
return (T)(TADDR)_InterlockedCompareExchangePointer((void* volatile *)destination, exchange, comparand);
#else
+ return (T)(TADDR)_InterlockedCompareExchange((long volatile *)(void* volatile *)destination, (long)(void*)exchange, (long)(void*)comparand);
+#endif
+#else
return (T)(TADDR)__sync_val_compare_and_swap((void* volatile *)destination, comparand, exchange);
#endif
}
@@ -175,8 +187,12 @@ template <typename T>
__forceinline T Interlocked::CompareExchangePointer(T volatile *destination, T exchange, std::nullptr_t comparand)
{
#ifdef _MSC_VER
+#ifdef BIT64
return (T)(TADDR)_InterlockedCompareExchangePointer((void* volatile *)destination, exchange, comparand);
#else
+ return (T)(TADDR)_InterlockedCompareExchange((long volatile *)(void* volatile *)destination, (long)(void*)exchange, (long)(void*)comparand);
+#endif
+#else
return (T)(TADDR)__sync_val_compare_and_swap((void* volatile *)destination, comparand, exchange);
#endif
}
diff --git a/src/gc/gc.cpp b/src/gc/gc.cpp
index 4baf08f540..c91d2a6baf 100644
--- a/src/gc/gc.cpp
+++ b/src/gc/gc.cpp
@@ -5064,9 +5064,8 @@ void set_thread_group_affinity_for_heap(int heap_number, GCThreadAffinity* affin
{
affinity->Group = GCThreadAffinity::None;
affinity->Processor = GCThreadAffinity::None;
- GROUP_AFFINITY ga;
- uint16_t gn, gpn;
+ uint16_t gn, gpn;
CPUGroupInfo::GetGroupForProcessor((uint16_t)heap_number, &gn, &gpn);
int bit_number = 0;
@@ -5075,8 +5074,8 @@ void set_thread_group_affinity_for_heap(int heap_number, GCThreadAffinity* affin
if (bit_number == gpn)
{
dprintf(3, ("using processor group %d, mask %x%Ix for heap %d\n", gn, mask, heap_number));
- *affinity->Processor = gpn;
- *affinity->Group = gn;
+ affinity->Processor = gpn;
+ affinity->Group = gn;
heap_select::set_cpu_group_for_heap(heap_number, (uint8_t)gn);
heap_select::set_group_proc_for_heap(heap_number, (uint8_t)gpn);
if (NumaNodeInfo::CanEnableGCNumaAware())
@@ -5104,8 +5103,8 @@ void set_thread_affinity_mask_for_heap(int heap_number, GCThreadAffinity* affini
{
affinity->Group = GCThreadAffinity::None;
affinity->Processor = GCThreadAffinity::None;
- DWORD_PTR pmask, smask;
+ uintptr_t pmask, smask;
if (GCToOSInterface::GetCurrentProcessAffinityMask(&pmask, &smask))
{
pmask &= smask;
@@ -5119,7 +5118,6 @@ void set_thread_affinity_mask_for_heap(int heap_number, GCThreadAffinity* affini
{
dprintf (3, ("Using processor %d for heap %d\n", proc_number, heap_number));
affinity->Processor = proc_number;
- SetThreadAffinityMask(gc_thread, mask);
heap_select::set_proc_no_for_heap(heap_number, proc_number);
if (NumaNodeInfo::CanEnableGCNumaAware())
{ // have the processor number, find the numa node
diff --git a/src/strongname/api/api.props b/src/strongname/api/api.props
index cba28116b8..2c4c278a69 100644
--- a/src/strongname/api/api.props
+++ b/src/strongname/api/api.props
@@ -7,8 +7,7 @@
$(Clrbase)\src\inc;
$(Clrbase)\src\md\inc;
$(Clrbase)\src\md\compiler;
- $(Clrbase)\src\vm;
- $(Clrbase)\src\gc\env
+ $(Clrbase)\src\vm
</UserIncludes>
<UserIncludes Condition="'$(StrongnameInVm)' == 'true'">
diff --git a/src/vm/gcenv.os.cpp b/src/vm/gcenv.os.cpp
index 4fdd34e9a0..6d72cee3bd 100644
--- a/src/vm/gcenv.os.cpp
+++ b/src/vm/gcenv.os.cpp
@@ -77,7 +77,7 @@ bool GCToOSInterface::SetCurrentThreadIdealAffinity(GCThreadAffinity* affinity)
{
if (GetThreadIdealProcessorEx(GetCurrentThread(), &proc))
{
- proc.Number = affinity->Processor;
+ proc.Number = (BYTE)affinity->Processor;
success = !!SetThreadIdealProcessorEx(GetCurrentThread(), &proc, NULL);
}
}