-
Notifications
You must be signed in to change notification settings - Fork 12.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
re-commit r361928: [PowerPC] [Clang] Port SSE intrinsics to PowerPC
Port xmmintrin.h which include Intel SSE intrinsics implementation to PowerPC platform (using Altivec). The new headers containing those implemenations are located into a directory named ppc_wrappers which has higher priority when the platform is PowerPC on Linux. They are mainly developed by Steven Munroe, with contributions from Paul Clarke, Bill Schmidt, Jinsong Ji and Zixuan Wu. Patched by: Qiu Chaofan <qiucf@cn.ibm.com> Reviewed By: Jinsong Ji Differential Revision: https://reviews.llvm.org/D62121 llvm-svn: 362190
- Loading branch information
Showing
10 changed files
with
4,160 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,48 @@ | ||
| /*===---- 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 | ||
|
|
||
| #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); | ||
| /* Linux GLIBC malloc alignment is at least 2 X ptr size. */ | ||
| size_t malloc_align = (sizeof (void *) + sizeof (void *)); | ||
| void *ptr; | ||
|
|
||
| if (alignment == malloc_align && alignment == vec_align) | ||
| return malloc (size); | ||
| 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); | ||
| } | ||
|
|
||
| #endif /* _MM_MALLOC_H_INCLUDED */ |
Oops, something went wrong.