Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/util/math.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/intern/cycles/util/math.h b/intern/cycles/util/math.h
index 2bfd4ba19b6..5f047f6f3f4 100644
--- a/intern/cycles/util/math.h
+++ b/intern/cycles/util/math.h
@@ -935,9 +935,15 @@ ccl_device_inline uint prev_power_of_two(uint x)
ccl_device_inline uint32_t reverse_integer_bits(uint32_t x)
{
/* Use a native instruction if it exists. */
-#if defined(__arm__) || defined(__aarch64__)
+#if defined(__aarch64__) || defined(_M_ARM64)
+ /* Assume the rbit is always available on 64bit ARM architecture. */
__asm__("rbit %w0, %w1" : "=r"(x) : "r"(x));
return x;
+#elif defined(__arm__) && ((__ARM_ARCH > 7) || __ARM_ARCH == 6 && __ARM_ARCH_ISA_THUMB >= 2)
+ /* This ARM instruction is available in ARMv6T2 and above.
+ * This 32-bit Thumb instruction is available in ARMv6T2 and above. */
+ __asm__("rbit %0, %1" : "=r"(x) : "r"(x));
+ return x;
#elif defined(__KERNEL_CUDA__)
return __brev(x);
#elif defined(__KERNEL_METAL__)