diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Headers/Intrin.h | 20 | ||||
-rw-r--r-- | clang/lib/Headers/immintrin.h | 54 | ||||
-rw-r--r-- | clang/test/CodeGen/x86-rot-intrinsics.c | 89 |
3 files changed, 20 insertions, 143 deletions
diff --git a/clang/lib/Headers/Intrin.h b/clang/lib/Headers/Intrin.h index d687ff1f3d5..67c8a63265f 100644 --- a/clang/lib/Headers/Intrin.h +++ b/clang/lib/Headers/Intrin.h @@ -463,6 +463,26 @@ _rotr16(unsigned short _Value, unsigned char _Shift) { _Shift &= 0xf; return _Shift ? (_Value >> _Shift) | (_Value << (16 - _Shift)) : _Value; } +static __inline__ unsigned int __DEFAULT_FN_ATTRS +_rotl(unsigned int _Value, int _Shift) { + _Shift &= 0x1f; + return _Shift ? (_Value << _Shift) | (_Value >> (32 - _Shift)) : _Value; +} +static __inline__ unsigned int __DEFAULT_FN_ATTRS +_rotr(unsigned int _Value, int _Shift) { + _Shift &= 0x1f; + return _Shift ? (_Value >> _Shift) | (_Value << (32 - _Shift)) : _Value; +} +static __inline__ unsigned long __DEFAULT_FN_ATTRS +_lrotl(unsigned long _Value, int _Shift) { + _Shift &= 0x1f; + return _Shift ? (_Value << _Shift) | (_Value >> (32 - _Shift)) : _Value; +} +static __inline__ unsigned long __DEFAULT_FN_ATTRS +_lrotr(unsigned long _Value, int _Shift) { + _Shift &= 0x1f; + return _Shift ? (_Value >> _Shift) | (_Value << (32 - _Shift)) : _Value; +} static __inline__ unsigned __int64 __DEFAULT_FN_ATTRS _rotl64(unsigned __int64 _Value, int _Shift) { diff --git a/clang/lib/Headers/immintrin.h b/clang/lib/Headers/immintrin.h index 5cefc4093d9..604bc8ca5b3 100644 --- a/clang/lib/Headers/immintrin.h +++ b/clang/lib/Headers/immintrin.h @@ -148,58 +148,4 @@ _writegsbase_u64(unsigned long long __V) * whereas others are also available at all times. */ #include <adxintrin.h> -static __inline__ unsigned short __attribute__((__always_inline__, __nodebug__)) -_rotwl(unsigned short _Value, int _Shift) { - _Shift &= 0xf; - return _Shift ? (_Value << _Shift) | (_Value >> (16 - _Shift)) : _Value; -} - -static __inline__ unsigned short __attribute__((__always_inline__, __nodebug__)) -_rotwr(unsigned short _Value, int _Shift) { - _Shift &= 0xf; - return _Shift ? (_Value >> _Shift) | (_Value << (16 - _Shift)) : _Value; -} - -static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) -_rotl(unsigned int _Value, int _Shift) { - _Shift &= 0x1f; - return _Shift ? (_Value << _Shift) | (_Value >> (32 - _Shift)) : _Value; -} - -static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) -_rotr(unsigned int _Value, int _Shift) { - _Shift &= 0x1f; - return _Shift ? (_Value >> _Shift) | (_Value << (32 - _Shift)) : _Value; -} - -/* - * MS defines _lrotl/_lrotr in a slightly incompatible way, since - * unsigned long is always 32-bit in MSVC. - */ -#ifdef _MSC_VER -static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__)) -_lrotl(unsigned long _Value, int _Shift) { - _Shift &= 0x1f; - return _Shift ? (_Value << _Shift) | (_Value >> (32 - _Shift)) : _Value; -} - -static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__)) -_lrotr(unsigned long _Value, int _Shift) { - _Shift &= 0x1f; - return _Shift ? (_Value >> _Shift) | (_Value << (32 - _Shift)) : _Value; -} -#else -static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__)) -_lrotl(unsigned long _Value, int _Shift) { - _Shift &= 0x3f; - return _Shift ? (_Value << _Shift) | (_Value >> (64 - _Shift)) : _Value; -} - -static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__)) -_lrotr(unsigned long _Value, int _Shift) { - _Shift &= 0x3f; - return _Shift ? (_Value >> _Shift) | (_Value << (64 - _Shift)) : _Value; -} -#endif - #endif /* __IMMINTRIN_H */ diff --git a/clang/test/CodeGen/x86-rot-intrinsics.c b/clang/test/CodeGen/x86-rot-intrinsics.c deleted file mode 100644 index 654c509242d..00000000000 --- a/clang/test/CodeGen/x86-rot-intrinsics.c +++ /dev/null @@ -1,89 +0,0 @@ -// RUN: %clang_cc1 %s -triple=i686-pc-linux -emit-llvm -o - | FileCheck %s -// RUN: %clang_cc1 -ffreestanding -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \ -// RUN: -triple i686--windows -emit-llvm %s -o - \ -// RUN: | FileCheck %s -check-prefix CHECK -check-prefix MSC - -// Don't include mm_malloc.h, it's system specific. -#define __MM_MALLOC_H - -#ifdef _MSC_VER -#include <Intrin.h> -#else -#include <immintrin.h> -#endif - -#ifdef _MSC_VER -unsigned char test_rotl8(unsigned char v, unsigned char s) { - //MSC-LABEL: test_rotl8 - //MSC-NOT: call - return _rotl8(v, s); -} - -unsigned char test_rotr8(unsigned char v, unsigned char s) { - //MSC-LABEL: test_rotr8 - //MSC-NOT: call - return _rotr8(v, s); -} - -unsigned short test_rotl16(unsigned short v, unsigned char s) { - //MSC-LABEL: test_rotl16 - //MSC-NOT: call - return _rotl16(v, s); -} - -unsigned short test_rotr16(unsigned short v, unsigned char s) { - //MSC-LABEL: test_rotr16 - //MSC-NOT: call - return _rotr16(v, s); -} - -unsigned __int64 test_rotl64(unsigned __int64 v, int s) { - //MSC-LABEL: test_rotl64 - //MSC-NOT: call - return _rotl64(v, s); -} - -unsigned __int64 test_rotr64(unsigned __int64 v, int s) { - //MSC-LABEL: test_rotr64 - //MSC-NOT: call - return _rotr64(v, s); -} -#endif - -unsigned short test_rotwl(unsigned short v, unsigned short s) { - //CHECK-LABEL: test_rotwl - //CHECK-NOT: call - return _rotwl(v, s); -} - -unsigned short test_rotwr(unsigned short v, unsigned short s) { - //CHECK-LABEL: test_rotwr - //CHECK-NOT: call - return _rotwr(v, s); -} - -unsigned int test_rotl(unsigned int v, int s) { - //CHECK-LABEL: test_rotl - //CHECK-NOT: call - return _rotl(v, s); -} - -unsigned int test_rotr(unsigned int v, int s) { - //CHECK-LABEL: test_rotr - //CHECK-NOT: call - return _rotr(v, s); -} - -unsigned long test_lrotl(unsigned long v, int s) { - //CHECK-LABEL: test_lrotl - //CHECK-NOT: call - return _lrotl(v, s); -} - -unsigned long test_lrotr(unsigned long v, int s) { - //CHECK-LABEL: test_lrotr - //CHECK-NOT: call - return _lrotr(v, s); -} - -//CHECK-LABEL: attributes |