| //===----------------------------------------------------------------------===// | |
| // | |
| // 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 | |
| // | |
| //===----------------------------------------------------------------------===// | |
| /// | |
| /// \file | |
| /// This file contains common utilities for AArch64 optimized mathvec functions. | |
| /// | |
| //===----------------------------------------------------------------------===// | |
| #include "src/__support/CPP/simd.h" | |
| // Type aliases for AdvSIMD vectors. | |
| using AdvSIMDFP32Vector = LIBC_NAMESPACE::cpp::simd<float, 4>; | |
| using AdvSIMDFP64Vector = LIBC_NAMESPACE::cpp::simd<double, 2>; | |
| // Returns the ptr, but hides its value from the compiler so accesses through it | |
| // cannot be optimized based on the contents. | |
| #define PTR_BARRIER(ptr) \ | |
| ({ \ | |
| decltype(ptr) __ptr = (ptr); \ | |
| asm("" : "+r"(__ptr)); \ | |
| __ptr; \ | |
| }) | |
| // Helpers for declaring vector constants. | |
| #define V2(X) {X, X} | |
| #define V4(X) {X, X, X, X} |