Index: /trunk/include/iprt/asm.h
===================================================================
--- /trunk/include/iprt/asm.h	(revision 35003)
+++ /trunk/include/iprt/asm.h	(revision 35004)
@@ -1922,17 +1922,14 @@
  * @param   puRes   Where to store the result.
  */
-#if HC_ARCH_BITS == 32
-# define ASMAtomicReadSize(pu, puRes) \
+#define ASMAtomicReadSize(pu, puRes) \
     do { \
-        *(uint32_t *)(puRes) = ASMAtomicReadU32((volatile uint32_t *)(void *)(pu)); \
+        switch (sizeof(*(pu))) { \
+            case 1: *(uint8_t  *)(puRes) = ASMAtomicReadU8( (volatile uint8_t  *)(void *)(pu)); break; \
+            case 2: *(uint16_t *)(puRes) = ASMAtomicReadU16((volatile uint16_t *)(void *)(pu)); break; \
+            case 4: *(uint32_t *)(puRes) = ASMAtomicReadU32((volatile uint32_t *)(void *)(pu)); break; \
+            case 8: *(uint64_t *)(puRes) = ASMAtomicReadU64((volatile uint64_t *)(void *)(pu)); break; \
+            default: AssertMsgFailed(("ASMAtomicReadSize: size %d is not supported\n", sizeof(*(pu)))); \
+        } \
     } while (0)
-#elif HC_ARCH_BITS == 64
-# define ASMAtomicReadSize(pu, puRes) \
-    do { \
-        *(uint64_t *)(puRes) = ASMAtomicReadU64((volatile uint64_t *)(void *)(pu)); \
-    } while (0)
-#else
-# error HC_ARCH_BITS
-#endif
 
 
@@ -1944,17 +1941,15 @@
  * @param   puRes   Where to store the result.
  */
-#if HC_ARCH_BITS == 32
-# define ASMAtomicUoReadSize(pu, puRes) \
+#define ASMAtomicUoReadSize(pu, puRes) \
     do { \
-        *(uint32_t *)(puRes) = ASMAtomicUoReadU32((volatile uint32_t *)(void *)(pu)); \
+        switch (sizeof(*(pu))) { \
+            case 1: *(uint8_t  *)(puRes) = ASMAtomicUoReadU8( (volatile uint8_t  *)(void *)(pu)); break; \
+            case 2: *(uint16_t *)(puRes) = ASMAtomicUoReadU16((volatile uint16_t *)(void *)(pu)); break; \
+            case 4: *(uint32_t *)(puRes) = ASMAtomicUoReadU32((volatile uint32_t *)(void *)(pu)); break; \
+            case 8: *(uint64_t *)(puRes) = ASMAtomicUoReadU64((volatile uint64_t *)(void *)(pu)); break; \
+            default: AssertMsgFailed(("ASMAtomicReadSize: size %d is not supported\n", sizeof(*(pu)))); \
+        } \
     } while (0)
-#elif HC_ARCH_BITS == 64
-# define ASMAtomicUoReadSize(pu, puRes) \
-    do { \
-        *(uint64_t *)(puRes) = ASMAtomicUoReadU64((volatile uint64_t *)(void *)(pu)); \
-    } while (0)
-#else
-# error HC_ARCH_BITS
-#endif
+
 
 /**
