diff options
Diffstat (limited to 'lib/clang/12.0.0/include/ppc_wrappers/mm_malloc.h')
| -rw-r--r-- | lib/clang/12.0.0/include/ppc_wrappers/mm_malloc.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/clang/12.0.0/include/ppc_wrappers/mm_malloc.h b/lib/clang/12.0.0/include/ppc_wrappers/mm_malloc.h new file mode 100644 index 0000000..24b14c8 --- /dev/null +++ b/lib/clang/12.0.0/include/ppc_wrappers/mm_malloc.h @@ -0,0 +1,50 @@ +/*===---- mm_malloc.h - Implementation of _mm_malloc and _mm_free ----------=== + * + * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. + * See https://llvm.org/LICENSE.txt for license information. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef _MM_MALLOC_H_INCLUDED +#define _MM_MALLOC_H_INCLUDED + +#if defined(__linux__) && defined(__ppc64__) + +#include <stdlib.h> + +/* We can't depend on <stdlib.h> since the prototype of posix_memalign + may not be visible. */ +#ifndef __cplusplus +extern int posix_memalign (void **, size_t, size_t); +#else +extern "C" int posix_memalign (void **, size_t, size_t) throw (); +#endif + +static __inline void * +_mm_malloc (size_t size, size_t alignment) +{ + /* PowerPC64 ELF V2 ABI requires quadword alignment. */ + size_t vec_align = sizeof (__vector float); + void *ptr; + + if (alignment < vec_align) + alignment = vec_align; + if (posix_memalign (&ptr, alignment, size) == 0) + return ptr; + else + return NULL; +} + +static __inline void +_mm_free (void * ptr) +{ + free (ptr); +} + +#else +#include_next <mm_malloc.h> +#endif + +#endif /* _MM_MALLOC_H_INCLUDED */ |
