21#ifndef _libint2_include_libint2intrinsicoperations_h_
22#define _libint2_include_libint2intrinsicoperations_h_
24#include <libint2/config.h>
33#if defined(LIBINT_GENERATE_FMA)
34#if defined(LIBINT_HAS_CXX11)
36template <
typename X,
typename Y,
typename Z>
37inline auto fma_plus(X x, Y y, Z z) ->
decltype(x * y + z) {
42template <
typename X,
typename Y,
typename Z>
43inline auto fma_minus(X x, Y y, Z z) ->
decltype(x * y - z) {
47#error "support for FMA requires compiler capable of C++11 or later"
59#define _libint2_static_api_bzero_short_(X, nelem) \
60 for (int i = 0; i < (nelem); ++i) { \
64#define _libint2_static_api_copy_short_(X, Y, nelem) \
65 for (int i = 0; i < (nelem); ++i) { \
69#define _libint2_static_api_scale_short_(X, Y, nelem, a) \
70 for (int i = 0; i < (nelem); ++i) { \
71 (X)[i] = (a) * (Y)[i]; \
74#define _libint2_static_api_scale_vec_short_(X, Y, nelem, a, vl) \
75 for (int i = 0, iv = 0; i < (nelem) / (vl); ++i) { \
76 for (int v = 0; v < (vl); ++v, ++iv) { \
77 (X)[iv] = (a)[v] * (Y)[iv]; \
81#if defined(LIBINT_GENERATE_FMA)
82#define _libint2_static_api_inc_short_(X, Y, nelem, a) \
83 for (int i = 0; i < (nelem); ++i) { \
84 (X)[i] = libint2::fma_plus((a), (Y)[i], (X)[i]); \
87#define _libint2_static_api_inc_short_(X, Y, nelem, a) \
88 for (int i = 0; i < (nelem); ++i) { \
89 (X)[i] += (a) * (Y)[i]; \
93#define _libint2_static_api_inc1_short_(X, Y, nelem) \
94 for (int i = 0; i < (nelem); ++i) { \
Defaults definitions for various parameters assumed by Libint.
Definition algebra.cc:24
auto fma_plus(X x, Y y, Z z) -> decltype(x *y+z)
Definition intrinsic_operations.h:37
auto fma_minus(X x, Y y, Z z) -> decltype(x *y - z)
Definition intrinsic_operations.h:43