diff options
Diffstat (limited to 'lib/Headers/ia32intrin.h')
-rw-r--r-- | lib/Headers/ia32intrin.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/Headers/ia32intrin.h b/lib/Headers/ia32intrin.h index 8e38df73187d1..79b7f0655cf01 100644 --- a/lib/Headers/ia32intrin.h +++ b/lib/Headers/ia32intrin.h @@ -195,6 +195,74 @@ __writeeflags(unsigned int __f) } #endif /* !__x86_64__ */ +/** Cast a 32-bit float value to a 32-bit unsigned integer value + * + * \headerfile <x86intrin.h> + * This intrinsic corresponds to the <c> VMOVD / MOVD </c> instruction in x86_64, + * and corresponds to the <c> VMOVL / MOVL </c> instruction in ia32. + * + * \param __A + * A 32-bit float value. + * \returns a 32-bit unsigned integer containing the converted value. + */ +static __inline__ unsigned int __attribute__((__always_inline__)) +_castf32_u32(float __A) { + unsigned int D; + __builtin_memcpy(&D, &__A, sizeof(__A)); + return D; +} + +/** Cast a 64-bit float value to a 64-bit unsigned integer value + * + * \headerfile <x86intrin.h> + * This intrinsic corresponds to the <c> VMOVQ / MOVQ </c> instruction in x86_64, + * and corresponds to the <c> VMOVL / MOVL </c> instruction in ia32. + * + * \param __A + * A 64-bit float value. + * \returns a 64-bit unsigned integer containing the converted value. + */ +static __inline__ unsigned long long __attribute__((__always_inline__)) +_castf64_u64(double __A) { + unsigned long long D; + __builtin_memcpy(&D, &__A, sizeof(__A)); + return D; +} + +/** Cast a 32-bit unsigned integer value to a 32-bit float value + * + * \headerfile <x86intrin.h> + * This intrinsic corresponds to the <c> VMOVQ / MOVQ </c> instruction in x86_64, + * and corresponds to the <c> FLDS </c> instruction in ia32. + * + * \param __A + * A 32-bit unsigned integer value. + * \returns a 32-bit float value containing the converted value. + */ +static __inline__ float __attribute__((__always_inline__)) +_castu32_f32(unsigned int __A) { + float D; + __builtin_memcpy(&D, &__A, sizeof(__A)); + return D; +} + +/** Cast a 64-bit unsigned integer value to a 64-bit float value + * + * \headerfile <x86intrin.h> + * This intrinsic corresponds to the <c> VMOVQ / MOVQ </c> instruction in x86_64, + * and corresponds to the <c> FLDL </c> instruction in ia32. + * + * \param __A + * A 64-bit unsigned integer value. + * \returns a 64-bit float value containing the converted value. + */ +static __inline__ double __attribute__((__always_inline__)) +_castu64_f64(unsigned long long __A) { + double D; + __builtin_memcpy(&D, &__A, sizeof(__A)); + return D; +} + /** Adds the unsigned integer operand to the CRC-32C checksum of the * unsigned char operand. * |