brintos

brintos / llvm-project-archived public Read only

0
0
Text · 95.0 KiB · 4fc51ee Raw
1856 lines · c
1/*2 * kmp_atomic.h - ATOMIC header file3 */4 5//===----------------------------------------------------------------------===//6//7// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.8// See https://llvm.org/LICENSE.txt for license information.9// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception10//11//===----------------------------------------------------------------------===//12 13#ifndef KMP_ATOMIC_H14#define KMP_ATOMIC_H15 16#include "kmp_lock.h"17#include "kmp_os.h"18 19#if OMPT_SUPPORT20#include "ompt-specific.h"21#endif22 23// C++ build port.24// Intel compiler does not support _Complex datatype on win.25// Intel compiler supports _Complex datatype on lin and mac.26// On the other side, there is a problem of stack alignment on lin_32 and mac_3227// if the rhs is cmplx80 or cmplx128 typedef'ed datatype.28// The decision is: to use compiler supported _Complex type on lin and mac,29//                  to use typedef'ed types on win.30// Condition for WIN64 was modified in anticipation of 10.1 build compiler.31 32#if defined(__cplusplus) && (KMP_OS_WINDOWS)33// create shortcuts for c99 complex types34 35// Visual Studio cannot have function parameters that have the36// align __declspec attribute, so we must remove it. (Compiler Error C2719)37#if KMP_COMPILER_MSVC38#undef KMP_DO_ALIGN39#define KMP_DO_ALIGN(alignment) /* Nothing */40#endif41 42#if defined(_MSC_VER) && (_MSC_VER < 1600) && defined(_DEBUG)43// Workaround for the problem of _DebugHeapTag unresolved external.44// This problem prevented to use our static debug library for C tests45// compiled with /MDd option (the library itself built with /MTd),46#undef _DEBUG47#define _DEBUG_TEMPORARILY_UNSET_48#endif49 50#include <complex>51 52template <typename type_lhs, typename type_rhs>53std::complex<type_lhs> __kmp_lhs_div_rhs(const std::complex<type_lhs> &lhs,54                                         const std::complex<type_rhs> &rhs) {55  type_lhs a = lhs.real();56  type_lhs b = lhs.imag();57  type_rhs c = rhs.real();58  type_rhs d = rhs.imag();59  type_rhs den = c * c + d * d;60  type_rhs r = (a * c + b * d);61  type_rhs i = (b * c - a * d);62  std::complex<type_lhs> ret(r / den, i / den);63  return ret;64}65 66// complex867struct __kmp_cmplx64_t : std::complex<double> {68 69  __kmp_cmplx64_t() : std::complex<double>() {}70 71  __kmp_cmplx64_t(const std::complex<double> &cd) : std::complex<double>(cd) {}72 73  void operator/=(const __kmp_cmplx64_t &rhs) {74    std::complex<double> lhs = *this;75    *this = __kmp_lhs_div_rhs(lhs, rhs);76  }77 78  __kmp_cmplx64_t operator/(const __kmp_cmplx64_t &rhs) {79    std::complex<double> lhs = *this;80    return __kmp_lhs_div_rhs(lhs, rhs);81  }82};83typedef struct __kmp_cmplx64_t kmp_cmplx64;84 85// complex486struct __kmp_cmplx32_t : std::complex<float> {87 88  __kmp_cmplx32_t() : std::complex<float>() {}89 90  __kmp_cmplx32_t(const std::complex<float> &cf) : std::complex<float>(cf) {}91 92  __kmp_cmplx32_t operator+(const __kmp_cmplx32_t &b) {93    std::complex<float> lhs = *this;94    std::complex<float> rhs = b;95    return (lhs + rhs);96  }97  __kmp_cmplx32_t operator-(const __kmp_cmplx32_t &b) {98    std::complex<float> lhs = *this;99    std::complex<float> rhs = b;100    return (lhs - rhs);101  }102  __kmp_cmplx32_t operator*(const __kmp_cmplx32_t &b) {103    std::complex<float> lhs = *this;104    std::complex<float> rhs = b;105    return (lhs * rhs);106  }107 108  __kmp_cmplx32_t operator+(const kmp_cmplx64 &b) {109    kmp_cmplx64 t = kmp_cmplx64(*this) + b;110    std::complex<double> d(t);111    std::complex<float> f(d);112    __kmp_cmplx32_t r(f);113    return r;114  }115  __kmp_cmplx32_t operator-(const kmp_cmplx64 &b) {116    kmp_cmplx64 t = kmp_cmplx64(*this) - b;117    std::complex<double> d(t);118    std::complex<float> f(d);119    __kmp_cmplx32_t r(f);120    return r;121  }122  __kmp_cmplx32_t operator*(const kmp_cmplx64 &b) {123    kmp_cmplx64 t = kmp_cmplx64(*this) * b;124    std::complex<double> d(t);125    std::complex<float> f(d);126    __kmp_cmplx32_t r(f);127    return r;128  }129 130  void operator/=(const __kmp_cmplx32_t &rhs) {131    std::complex<float> lhs = *this;132    *this = __kmp_lhs_div_rhs(lhs, rhs);133  }134 135  __kmp_cmplx32_t operator/(const __kmp_cmplx32_t &rhs) {136    std::complex<float> lhs = *this;137    return __kmp_lhs_div_rhs(lhs, rhs);138  }139 140  void operator/=(const kmp_cmplx64 &rhs) {141    std::complex<float> lhs = *this;142    *this = __kmp_lhs_div_rhs(lhs, rhs);143  }144 145  __kmp_cmplx32_t operator/(const kmp_cmplx64 &rhs) {146    std::complex<float> lhs = *this;147    return __kmp_lhs_div_rhs(lhs, rhs);148  }149};150typedef struct __kmp_cmplx32_t kmp_cmplx32;151 152// complex10153struct KMP_DO_ALIGN(16) __kmp_cmplx80_t : std::complex<long double> {154 155  __kmp_cmplx80_t() : std::complex<long double>() {}156 157  __kmp_cmplx80_t(const std::complex<long double> &cld)158      : std::complex<long double>(cld) {}159 160  void operator/=(const __kmp_cmplx80_t &rhs) {161    std::complex<long double> lhs = *this;162    *this = __kmp_lhs_div_rhs(lhs, rhs);163  }164 165  __kmp_cmplx80_t operator/(const __kmp_cmplx80_t &rhs) {166    std::complex<long double> lhs = *this;167    return __kmp_lhs_div_rhs(lhs, rhs);168  }169};170typedef KMP_DO_ALIGN(16) struct __kmp_cmplx80_t kmp_cmplx80;171 172// complex16173#if KMP_HAVE_QUAD174struct __kmp_cmplx128_t : std::complex<_Quad> {175 176  __kmp_cmplx128_t() : std::complex<_Quad>() {}177 178  __kmp_cmplx128_t(const std::complex<_Quad> &cq) : std::complex<_Quad>(cq) {}179 180  void operator/=(const __kmp_cmplx128_t &rhs) {181    std::complex<_Quad> lhs = *this;182    *this = __kmp_lhs_div_rhs(lhs, rhs);183  }184 185  __kmp_cmplx128_t operator/(const __kmp_cmplx128_t &rhs) {186    std::complex<_Quad> lhs = *this;187    return __kmp_lhs_div_rhs(lhs, rhs);188  }189};190typedef struct __kmp_cmplx128_t kmp_cmplx128;191#endif /* KMP_HAVE_QUAD */192 193#ifdef _DEBUG_TEMPORARILY_UNSET_194#undef _DEBUG_TEMPORARILY_UNSET_195// Set it back now196#define _DEBUG 1197#endif198 199#else200// create shortcuts for c99 complex types201typedef float _Complex kmp_cmplx32;202typedef double _Complex kmp_cmplx64;203typedef long double _Complex kmp_cmplx80;204#if KMP_HAVE_QUAD205typedef _Quad _Complex kmp_cmplx128;206#endif207#endif208 209// Compiler 12.0 changed alignment of 16 and 32-byte arguments (like _Quad210// and kmp_cmplx128) on IA-32 architecture. The following aligned structures211// are implemented to support the old alignment in 10.1, 11.0, 11.1 and212// introduce the new alignment in 12.0. See CQ88405.213#if KMP_ARCH_X86 && KMP_HAVE_QUAD214 215// 4-byte aligned structures for backward compatibility.216 217#pragma pack(push, 4)218 219struct KMP_DO_ALIGN(4) Quad_a4_t {220  _Quad q;221 222  Quad_a4_t() : q() {}223  Quad_a4_t(const _Quad &cq) : q(cq) {}224 225  Quad_a4_t operator+(const Quad_a4_t &b) {226    _Quad lhs = (*this).q;227    _Quad rhs = b.q;228    return (Quad_a4_t)(lhs + rhs);229  }230 231  Quad_a4_t operator-(const Quad_a4_t &b) {232    _Quad lhs = (*this).q;233    _Quad rhs = b.q;234    return (Quad_a4_t)(lhs - rhs);235  }236  Quad_a4_t operator*(const Quad_a4_t &b) {237    _Quad lhs = (*this).q;238    _Quad rhs = b.q;239    return (Quad_a4_t)(lhs * rhs);240  }241 242  Quad_a4_t operator/(const Quad_a4_t &b) {243    _Quad lhs = (*this).q;244    _Quad rhs = b.q;245    return (Quad_a4_t)(lhs / rhs);246  }247};248 249struct KMP_DO_ALIGN(4) kmp_cmplx128_a4_t {250  kmp_cmplx128 q;251 252  kmp_cmplx128_a4_t() : q() {}253 254#if defined(__cplusplus) && (KMP_OS_WINDOWS)255  kmp_cmplx128_a4_t(const std::complex<_Quad> &c128) : q(c128) {}256#endif257  kmp_cmplx128_a4_t(const kmp_cmplx128 &c128) : q(c128) {}258 259  kmp_cmplx128_a4_t operator+(const kmp_cmplx128_a4_t &b) {260    kmp_cmplx128 lhs = (*this).q;261    kmp_cmplx128 rhs = b.q;262    return (kmp_cmplx128_a4_t)(lhs + rhs);263  }264  kmp_cmplx128_a4_t operator-(const kmp_cmplx128_a4_t &b) {265    kmp_cmplx128 lhs = (*this).q;266    kmp_cmplx128 rhs = b.q;267    return (kmp_cmplx128_a4_t)(lhs - rhs);268  }269  kmp_cmplx128_a4_t operator*(const kmp_cmplx128_a4_t &b) {270    kmp_cmplx128 lhs = (*this).q;271    kmp_cmplx128 rhs = b.q;272    return (kmp_cmplx128_a4_t)(lhs * rhs);273  }274 275  kmp_cmplx128_a4_t operator/(const kmp_cmplx128_a4_t &b) {276    kmp_cmplx128 lhs = (*this).q;277    kmp_cmplx128 rhs = b.q;278    return (kmp_cmplx128_a4_t)(lhs / rhs);279  }280};281 282#pragma pack(pop)283 284// New 16-byte aligned structures for 12.0 compiler.285struct KMP_DO_ALIGN(16) Quad_a16_t {286  _Quad q;287 288  Quad_a16_t() : q() {}289  Quad_a16_t(const _Quad &cq) : q(cq) {}290 291  Quad_a16_t operator+(const Quad_a16_t &b) {292    _Quad lhs = (*this).q;293    _Quad rhs = b.q;294    return (Quad_a16_t)(lhs + rhs);295  }296 297  Quad_a16_t operator-(const Quad_a16_t &b) {298    _Quad lhs = (*this).q;299    _Quad rhs = b.q;300    return (Quad_a16_t)(lhs - rhs);301  }302  Quad_a16_t operator*(const Quad_a16_t &b) {303    _Quad lhs = (*this).q;304    _Quad rhs = b.q;305    return (Quad_a16_t)(lhs * rhs);306  }307 308  Quad_a16_t operator/(const Quad_a16_t &b) {309    _Quad lhs = (*this).q;310    _Quad rhs = b.q;311    return (Quad_a16_t)(lhs / rhs);312  }313};314 315struct KMP_DO_ALIGN(16) kmp_cmplx128_a16_t {316  kmp_cmplx128 q;317 318  kmp_cmplx128_a16_t() : q() {}319 320#if defined(__cplusplus) && (KMP_OS_WINDOWS)321  kmp_cmplx128_a16_t(const std::complex<_Quad> &c128) : q(c128) {}322#endif323  kmp_cmplx128_a16_t(const kmp_cmplx128 &c128) : q(c128) {}324 325  kmp_cmplx128_a16_t operator+(const kmp_cmplx128_a16_t &b) {326    kmp_cmplx128 lhs = (*this).q;327    kmp_cmplx128 rhs = b.q;328    return (kmp_cmplx128_a16_t)(lhs + rhs);329  }330  kmp_cmplx128_a16_t operator-(const kmp_cmplx128_a16_t &b) {331    kmp_cmplx128 lhs = (*this).q;332    kmp_cmplx128 rhs = b.q;333    return (kmp_cmplx128_a16_t)(lhs - rhs);334  }335  kmp_cmplx128_a16_t operator*(const kmp_cmplx128_a16_t &b) {336    kmp_cmplx128 lhs = (*this).q;337    kmp_cmplx128 rhs = b.q;338    return (kmp_cmplx128_a16_t)(lhs * rhs);339  }340 341  kmp_cmplx128_a16_t operator/(const kmp_cmplx128_a16_t &b) {342    kmp_cmplx128 lhs = (*this).q;343    kmp_cmplx128 rhs = b.q;344    return (kmp_cmplx128_a16_t)(lhs / rhs);345  }346};347 348#endif349 350#if (KMP_ARCH_X86)351#define QUAD_LEGACY Quad_a4_t352#define CPLX128_LEG kmp_cmplx128_a4_t353#else354#define QUAD_LEGACY _Quad355#define CPLX128_LEG kmp_cmplx128356#endif357 358#ifdef __cplusplus359extern "C" {360#endif361 362extern int __kmp_atomic_mode;363 364// Atomic locks can easily become contended, so we use queuing locks for them.365typedef kmp_queuing_lock_t kmp_atomic_lock_t;366 367static inline void __kmp_acquire_atomic_lock(kmp_atomic_lock_t *lck,368                                             kmp_int32 gtid) {369#if OMPT_SUPPORT && OMPT_OPTIONAL370  if (ompt_enabled.ompt_callback_mutex_acquire) {371    ompt_callbacks.ompt_callback(ompt_callback_mutex_acquire)(372        ompt_mutex_atomic, 0, kmp_mutex_impl_queuing,373        (ompt_wait_id_t)(uintptr_t)lck, OMPT_GET_RETURN_ADDRESS(0));374  }375#endif376 377  __kmp_acquire_queuing_lock(lck, gtid);378 379#if OMPT_SUPPORT && OMPT_OPTIONAL380  if (ompt_enabled.ompt_callback_mutex_acquired) {381    ompt_callbacks.ompt_callback(ompt_callback_mutex_acquired)(382        ompt_mutex_atomic, (ompt_wait_id_t)(uintptr_t)lck,383        OMPT_GET_RETURN_ADDRESS(0));384  }385#endif386}387 388static inline int __kmp_test_atomic_lock(kmp_atomic_lock_t *lck,389                                         kmp_int32 gtid) {390  return __kmp_test_queuing_lock(lck, gtid);391}392 393static inline void __kmp_release_atomic_lock(kmp_atomic_lock_t *lck,394                                             kmp_int32 gtid) {395  __kmp_release_queuing_lock(lck, gtid);396#if OMPT_SUPPORT && OMPT_OPTIONAL397  if (ompt_enabled.ompt_callback_mutex_released) {398    ompt_callbacks.ompt_callback(ompt_callback_mutex_released)(399        ompt_mutex_atomic, (ompt_wait_id_t)(uintptr_t)lck,400        OMPT_GET_RETURN_ADDRESS(0));401  }402#endif403}404 405static inline void __kmp_init_atomic_lock(kmp_atomic_lock_t *lck) {406  __kmp_init_queuing_lock(lck);407}408 409static inline void __kmp_destroy_atomic_lock(kmp_atomic_lock_t *lck) {410  __kmp_destroy_queuing_lock(lck);411}412 413// Global Locks414extern kmp_atomic_lock_t __kmp_atomic_lock; /* Control access to all user coded415                                               atomics in Gnu compat mode   */416extern kmp_atomic_lock_t __kmp_atomic_lock_1i; /* Control access to all user417                                                  coded atomics for 1-byte fixed418                                                  data types */419extern kmp_atomic_lock_t __kmp_atomic_lock_2i; /* Control access to all user420                                                  coded atomics for 2-byte fixed421                                                  data types */422extern kmp_atomic_lock_t __kmp_atomic_lock_4i; /* Control access to all user423                                                  coded atomics for 4-byte fixed424                                                  data types */425extern kmp_atomic_lock_t __kmp_atomic_lock_4r; /* Control access to all user426                                                  coded atomics for kmp_real32427                                                  data type    */428extern kmp_atomic_lock_t __kmp_atomic_lock_8i; /* Control access to all user429                                                  coded atomics for 8-byte fixed430                                                  data types */431extern kmp_atomic_lock_t __kmp_atomic_lock_8r; /* Control access to all user432                                                  coded atomics for kmp_real64433                                                  data type    */434extern kmp_atomic_lock_t435    __kmp_atomic_lock_8c; /* Control access to all user coded atomics for436                             complex byte data type  */437extern kmp_atomic_lock_t438    __kmp_atomic_lock_10r; /* Control access to all user coded atomics for long439                              double data type   */440extern kmp_atomic_lock_t __kmp_atomic_lock_16r; /* Control access to all user441                                                   coded atomics for _Quad data442                                                   type         */443extern kmp_atomic_lock_t __kmp_atomic_lock_16c; /* Control access to all user444                                                   coded atomics for double445                                                   complex data type*/446extern kmp_atomic_lock_t447    __kmp_atomic_lock_20c; /* Control access to all user coded atomics for long448                              double complex type*/449extern kmp_atomic_lock_t __kmp_atomic_lock_32c; /* Control access to all user450                                                   coded atomics for _Quad451                                                   complex data type */452 453//  Below routines for atomic UPDATE are listed454 455// 1-byte456void __kmpc_atomic_fixed1_add(ident_t *id_ref, int gtid, char *lhs, char rhs);457void __kmpc_atomic_fixed1_andb(ident_t *id_ref, int gtid, char *lhs, char rhs);458void __kmpc_atomic_fixed1_div(ident_t *id_ref, int gtid, char *lhs, char rhs);459void __kmpc_atomic_fixed1u_div(ident_t *id_ref, int gtid, unsigned char *lhs,460                               unsigned char rhs);461void __kmpc_atomic_fixed1_mul(ident_t *id_ref, int gtid, char *lhs, char rhs);462void __kmpc_atomic_fixed1_orb(ident_t *id_ref, int gtid, char *lhs, char rhs);463void __kmpc_atomic_fixed1_shl(ident_t *id_ref, int gtid, char *lhs, char rhs);464void __kmpc_atomic_fixed1_shr(ident_t *id_ref, int gtid, char *lhs, char rhs);465void __kmpc_atomic_fixed1u_shr(ident_t *id_ref, int gtid, unsigned char *lhs,466                               unsigned char rhs);467void __kmpc_atomic_fixed1_sub(ident_t *id_ref, int gtid, char *lhs, char rhs);468void __kmpc_atomic_fixed1_xor(ident_t *id_ref, int gtid, char *lhs, char rhs);469// 2-byte470void __kmpc_atomic_fixed2_add(ident_t *id_ref, int gtid, short *lhs, short rhs);471void __kmpc_atomic_fixed2_andb(ident_t *id_ref, int gtid, short *lhs,472                               short rhs);473void __kmpc_atomic_fixed2_div(ident_t *id_ref, int gtid, short *lhs, short rhs);474void __kmpc_atomic_fixed2u_div(ident_t *id_ref, int gtid, unsigned short *lhs,475                               unsigned short rhs);476void __kmpc_atomic_fixed2_mul(ident_t *id_ref, int gtid, short *lhs, short rhs);477void __kmpc_atomic_fixed2_orb(ident_t *id_ref, int gtid, short *lhs, short rhs);478void __kmpc_atomic_fixed2_shl(ident_t *id_ref, int gtid, short *lhs, short rhs);479void __kmpc_atomic_fixed2_shr(ident_t *id_ref, int gtid, short *lhs, short rhs);480void __kmpc_atomic_fixed2u_shr(ident_t *id_ref, int gtid, unsigned short *lhs,481                               unsigned short rhs);482void __kmpc_atomic_fixed2_sub(ident_t *id_ref, int gtid, short *lhs, short rhs);483void __kmpc_atomic_fixed2_xor(ident_t *id_ref, int gtid, short *lhs, short rhs);484// 4-byte add / sub fixed485void __kmpc_atomic_fixed4_add(ident_t *id_ref, int gtid, kmp_int32 *lhs,486                              kmp_int32 rhs);487void __kmpc_atomic_fixed4_sub(ident_t *id_ref, int gtid, kmp_int32 *lhs,488                              kmp_int32 rhs);489// 4-byte add / sub float490void __kmpc_atomic_float4_add(ident_t *id_ref, int gtid, kmp_real32 *lhs,491                              kmp_real32 rhs);492void __kmpc_atomic_float4_sub(ident_t *id_ref, int gtid, kmp_real32 *lhs,493                              kmp_real32 rhs);494// 8-byte add / sub fixed495void __kmpc_atomic_fixed8_add(ident_t *id_ref, int gtid, kmp_int64 *lhs,496                              kmp_int64 rhs);497void __kmpc_atomic_fixed8_sub(ident_t *id_ref, int gtid, kmp_int64 *lhs,498                              kmp_int64 rhs);499// 8-byte add / sub float500void __kmpc_atomic_float8_add(ident_t *id_ref, int gtid, kmp_real64 *lhs,501                              kmp_real64 rhs);502void __kmpc_atomic_float8_sub(ident_t *id_ref, int gtid, kmp_real64 *lhs,503                              kmp_real64 rhs);504// 4-byte fixed505void __kmpc_atomic_fixed4_andb(ident_t *id_ref, int gtid, kmp_int32 *lhs,506                               kmp_int32 rhs);507void __kmpc_atomic_fixed4_div(ident_t *id_ref, int gtid, kmp_int32 *lhs,508                              kmp_int32 rhs);509void __kmpc_atomic_fixed4u_div(ident_t *id_ref, int gtid, kmp_uint32 *lhs,510                               kmp_uint32 rhs);511void __kmpc_atomic_fixed4_mul(ident_t *id_ref, int gtid, kmp_int32 *lhs,512                              kmp_int32 rhs);513void __kmpc_atomic_fixed4_orb(ident_t *id_ref, int gtid, kmp_int32 *lhs,514                              kmp_int32 rhs);515void __kmpc_atomic_fixed4_shl(ident_t *id_ref, int gtid, kmp_int32 *lhs,516                              kmp_int32 rhs);517void __kmpc_atomic_fixed4_shr(ident_t *id_ref, int gtid, kmp_int32 *lhs,518                              kmp_int32 rhs);519void __kmpc_atomic_fixed4u_shr(ident_t *id_ref, int gtid, kmp_uint32 *lhs,520                               kmp_uint32 rhs);521void __kmpc_atomic_fixed4_xor(ident_t *id_ref, int gtid, kmp_int32 *lhs,522                              kmp_int32 rhs);523// 8-byte fixed524void __kmpc_atomic_fixed8_andb(ident_t *id_ref, int gtid, kmp_int64 *lhs,525                               kmp_int64 rhs);526void __kmpc_atomic_fixed8_div(ident_t *id_ref, int gtid, kmp_int64 *lhs,527                              kmp_int64 rhs);528void __kmpc_atomic_fixed8u_div(ident_t *id_ref, int gtid, kmp_uint64 *lhs,529                               kmp_uint64 rhs);530void __kmpc_atomic_fixed8_mul(ident_t *id_ref, int gtid, kmp_int64 *lhs,531                              kmp_int64 rhs);532void __kmpc_atomic_fixed8_orb(ident_t *id_ref, int gtid, kmp_int64 *lhs,533                              kmp_int64 rhs);534void __kmpc_atomic_fixed8_shl(ident_t *id_ref, int gtid, kmp_int64 *lhs,535                              kmp_int64 rhs);536void __kmpc_atomic_fixed8_shr(ident_t *id_ref, int gtid, kmp_int64 *lhs,537                              kmp_int64 rhs);538void __kmpc_atomic_fixed8u_shr(ident_t *id_ref, int gtid, kmp_uint64 *lhs,539                               kmp_uint64 rhs);540void __kmpc_atomic_fixed8_xor(ident_t *id_ref, int gtid, kmp_int64 *lhs,541                              kmp_int64 rhs);542// 4-byte float543void __kmpc_atomic_float4_div(ident_t *id_ref, int gtid, kmp_real32 *lhs,544                              kmp_real32 rhs);545void __kmpc_atomic_float4_mul(ident_t *id_ref, int gtid, kmp_real32 *lhs,546                              kmp_real32 rhs);547// 8-byte float548void __kmpc_atomic_float8_div(ident_t *id_ref, int gtid, kmp_real64 *lhs,549                              kmp_real64 rhs);550void __kmpc_atomic_float8_mul(ident_t *id_ref, int gtid, kmp_real64 *lhs,551                              kmp_real64 rhs);552// 1-, 2-, 4-, 8-byte logical (&&, ||)553void __kmpc_atomic_fixed1_andl(ident_t *id_ref, int gtid, char *lhs, char rhs);554void __kmpc_atomic_fixed1_orl(ident_t *id_ref, int gtid, char *lhs, char rhs);555void __kmpc_atomic_fixed2_andl(ident_t *id_ref, int gtid, short *lhs,556                               short rhs);557void __kmpc_atomic_fixed2_orl(ident_t *id_ref, int gtid, short *lhs, short rhs);558void __kmpc_atomic_fixed4_andl(ident_t *id_ref, int gtid, kmp_int32 *lhs,559                               kmp_int32 rhs);560void __kmpc_atomic_fixed4_orl(ident_t *id_ref, int gtid, kmp_int32 *lhs,561                              kmp_int32 rhs);562void __kmpc_atomic_fixed8_andl(ident_t *id_ref, int gtid, kmp_int64 *lhs,563                               kmp_int64 rhs);564void __kmpc_atomic_fixed8_orl(ident_t *id_ref, int gtid, kmp_int64 *lhs,565                              kmp_int64 rhs);566// MIN / MAX567void __kmpc_atomic_fixed1_max(ident_t *id_ref, int gtid, char *lhs, char rhs);568void __kmpc_atomic_fixed1_min(ident_t *id_ref, int gtid, char *lhs, char rhs);569void __kmpc_atomic_fixed2_max(ident_t *id_ref, int gtid, short *lhs, short rhs);570void __kmpc_atomic_fixed2_min(ident_t *id_ref, int gtid, short *lhs, short rhs);571void __kmpc_atomic_fixed4_max(ident_t *id_ref, int gtid, kmp_int32 *lhs,572                              kmp_int32 rhs);573void __kmpc_atomic_fixed4_min(ident_t *id_ref, int gtid, kmp_int32 *lhs,574                              kmp_int32 rhs);575void __kmpc_atomic_fixed8_max(ident_t *id_ref, int gtid, kmp_int64 *lhs,576                              kmp_int64 rhs);577void __kmpc_atomic_fixed8_min(ident_t *id_ref, int gtid, kmp_int64 *lhs,578                              kmp_int64 rhs);579void __kmpc_atomic_float4_max(ident_t *id_ref, int gtid, kmp_real32 *lhs,580                              kmp_real32 rhs);581void __kmpc_atomic_float4_min(ident_t *id_ref, int gtid, kmp_real32 *lhs,582                              kmp_real32 rhs);583void __kmpc_atomic_float8_max(ident_t *id_ref, int gtid, kmp_real64 *lhs,584                              kmp_real64 rhs);585void __kmpc_atomic_float8_min(ident_t *id_ref, int gtid, kmp_real64 *lhs,586                              kmp_real64 rhs);587void __kmpc_atomic_float10_max(ident_t *id_ref, int gtid, long double *lhs,588                               long double rhs);589void __kmpc_atomic_float10_min(ident_t *id_ref, int gtid, long double *lhs,590                               long double rhs);591#if KMP_HAVE_QUAD592void __kmpc_atomic_float16_max(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,593                               QUAD_LEGACY rhs);594void __kmpc_atomic_float16_min(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,595                               QUAD_LEGACY rhs);596#if (KMP_ARCH_X86)597// Routines with 16-byte arguments aligned to 16-byte boundary; IA-32598// architecture only599void __kmpc_atomic_float16_max_a16(ident_t *id_ref, int gtid, Quad_a16_t *lhs,600                                   Quad_a16_t rhs);601void __kmpc_atomic_float16_min_a16(ident_t *id_ref, int gtid, Quad_a16_t *lhs,602                                   Quad_a16_t rhs);603#endif604#endif605// .NEQV. (same as xor)606void __kmpc_atomic_fixed1_neqv(ident_t *id_ref, int gtid, char *lhs, char rhs);607void __kmpc_atomic_fixed2_neqv(ident_t *id_ref, int gtid, short *lhs,608                               short rhs);609void __kmpc_atomic_fixed4_neqv(ident_t *id_ref, int gtid, kmp_int32 *lhs,610                               kmp_int32 rhs);611void __kmpc_atomic_fixed8_neqv(ident_t *id_ref, int gtid, kmp_int64 *lhs,612                               kmp_int64 rhs);613// .EQV. (same as ~xor)614void __kmpc_atomic_fixed1_eqv(ident_t *id_ref, int gtid, char *lhs, char rhs);615void __kmpc_atomic_fixed2_eqv(ident_t *id_ref, int gtid, short *lhs, short rhs);616void __kmpc_atomic_fixed4_eqv(ident_t *id_ref, int gtid, kmp_int32 *lhs,617                              kmp_int32 rhs);618void __kmpc_atomic_fixed8_eqv(ident_t *id_ref, int gtid, kmp_int64 *lhs,619                              kmp_int64 rhs);620// long double type621void __kmpc_atomic_float10_add(ident_t *id_ref, int gtid, long double *lhs,622                               long double rhs);623void __kmpc_atomic_float10_sub(ident_t *id_ref, int gtid, long double *lhs,624                               long double rhs);625void __kmpc_atomic_float10_mul(ident_t *id_ref, int gtid, long double *lhs,626                               long double rhs);627void __kmpc_atomic_float10_div(ident_t *id_ref, int gtid, long double *lhs,628                               long double rhs);629// _Quad type630#if KMP_HAVE_QUAD631void __kmpc_atomic_float16_add(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,632                               QUAD_LEGACY rhs);633void __kmpc_atomic_float16_sub(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,634                               QUAD_LEGACY rhs);635void __kmpc_atomic_float16_mul(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,636                               QUAD_LEGACY rhs);637void __kmpc_atomic_float16_div(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,638                               QUAD_LEGACY rhs);639#if (KMP_ARCH_X86)640// Routines with 16-byte arguments aligned to 16-byte boundary641void __kmpc_atomic_float16_add_a16(ident_t *id_ref, int gtid, Quad_a16_t *lhs,642                                   Quad_a16_t rhs);643void __kmpc_atomic_float16_sub_a16(ident_t *id_ref, int gtid, Quad_a16_t *lhs,644                                   Quad_a16_t rhs);645void __kmpc_atomic_float16_mul_a16(ident_t *id_ref, int gtid, Quad_a16_t *lhs,646                                   Quad_a16_t rhs);647void __kmpc_atomic_float16_div_a16(ident_t *id_ref, int gtid, Quad_a16_t *lhs,648                                   Quad_a16_t rhs);649#endif650#endif651// routines for complex types652void __kmpc_atomic_cmplx4_add(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,653                              kmp_cmplx32 rhs);654void __kmpc_atomic_cmplx4_sub(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,655                              kmp_cmplx32 rhs);656void __kmpc_atomic_cmplx4_mul(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,657                              kmp_cmplx32 rhs);658void __kmpc_atomic_cmplx4_div(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,659                              kmp_cmplx32 rhs);660void __kmpc_atomic_cmplx8_add(ident_t *id_ref, int gtid, kmp_cmplx64 *lhs,661                              kmp_cmplx64 rhs);662void __kmpc_atomic_cmplx8_sub(ident_t *id_ref, int gtid, kmp_cmplx64 *lhs,663                              kmp_cmplx64 rhs);664void __kmpc_atomic_cmplx8_mul(ident_t *id_ref, int gtid, kmp_cmplx64 *lhs,665                              kmp_cmplx64 rhs);666void __kmpc_atomic_cmplx8_div(ident_t *id_ref, int gtid, kmp_cmplx64 *lhs,667                              kmp_cmplx64 rhs);668void __kmpc_atomic_cmplx10_add(ident_t *id_ref, int gtid, kmp_cmplx80 *lhs,669                               kmp_cmplx80 rhs);670void __kmpc_atomic_cmplx10_sub(ident_t *id_ref, int gtid, kmp_cmplx80 *lhs,671                               kmp_cmplx80 rhs);672void __kmpc_atomic_cmplx10_mul(ident_t *id_ref, int gtid, kmp_cmplx80 *lhs,673                               kmp_cmplx80 rhs);674void __kmpc_atomic_cmplx10_div(ident_t *id_ref, int gtid, kmp_cmplx80 *lhs,675                               kmp_cmplx80 rhs);676#if KMP_HAVE_QUAD677void __kmpc_atomic_cmplx16_add(ident_t *id_ref, int gtid, CPLX128_LEG *lhs,678                               CPLX128_LEG rhs);679void __kmpc_atomic_cmplx16_sub(ident_t *id_ref, int gtid, CPLX128_LEG *lhs,680                               CPLX128_LEG rhs);681void __kmpc_atomic_cmplx16_mul(ident_t *id_ref, int gtid, CPLX128_LEG *lhs,682                               CPLX128_LEG rhs);683void __kmpc_atomic_cmplx16_div(ident_t *id_ref, int gtid, CPLX128_LEG *lhs,684                               CPLX128_LEG rhs);685#if (KMP_ARCH_X86)686// Routines with 16-byte arguments aligned to 16-byte boundary687void __kmpc_atomic_cmplx16_add_a16(ident_t *id_ref, int gtid,688                                   kmp_cmplx128_a16_t *lhs,689                                   kmp_cmplx128_a16_t rhs);690void __kmpc_atomic_cmplx16_sub_a16(ident_t *id_ref, int gtid,691                                   kmp_cmplx128_a16_t *lhs,692                                   kmp_cmplx128_a16_t rhs);693void __kmpc_atomic_cmplx16_mul_a16(ident_t *id_ref, int gtid,694                                   kmp_cmplx128_a16_t *lhs,695                                   kmp_cmplx128_a16_t rhs);696void __kmpc_atomic_cmplx16_div_a16(ident_t *id_ref, int gtid,697                                   kmp_cmplx128_a16_t *lhs,698                                   kmp_cmplx128_a16_t rhs);699#endif700#endif701 702// OpenMP 4.0: x = expr binop x for non-commutative operations.703// Supported only on IA-32 architecture and Intel(R) 64704#if KMP_ARCH_X86 || KMP_ARCH_X86_64705 706void __kmpc_atomic_fixed1_sub_rev(ident_t *id_ref, int gtid, char *lhs,707                                  char rhs);708void __kmpc_atomic_fixed1_div_rev(ident_t *id_ref, int gtid, char *lhs,709                                  char rhs);710void __kmpc_atomic_fixed1u_div_rev(ident_t *id_ref, int gtid,711                                   unsigned char *lhs, unsigned char rhs);712void __kmpc_atomic_fixed1_shl_rev(ident_t *id_ref, int gtid, char *lhs,713                                  char rhs);714void __kmpc_atomic_fixed1_shr_rev(ident_t *id_ref, int gtid, char *lhs,715                                  char rhs);716void __kmpc_atomic_fixed1u_shr_rev(ident_t *id_ref, int gtid,717                                   unsigned char *lhs, unsigned char rhs);718void __kmpc_atomic_fixed2_sub_rev(ident_t *id_ref, int gtid, short *lhs,719                                  short rhs);720void __kmpc_atomic_fixed2_div_rev(ident_t *id_ref, int gtid, short *lhs,721                                  short rhs);722void __kmpc_atomic_fixed2u_div_rev(ident_t *id_ref, int gtid,723                                   unsigned short *lhs, unsigned short rhs);724void __kmpc_atomic_fixed2_shl_rev(ident_t *id_ref, int gtid, short *lhs,725                                  short rhs);726void __kmpc_atomic_fixed2_shr_rev(ident_t *id_ref, int gtid, short *lhs,727                                  short rhs);728void __kmpc_atomic_fixed2u_shr_rev(ident_t *id_ref, int gtid,729                                   unsigned short *lhs, unsigned short rhs);730void __kmpc_atomic_fixed4_sub_rev(ident_t *id_ref, int gtid, kmp_int32 *lhs,731                                  kmp_int32 rhs);732void __kmpc_atomic_fixed4_div_rev(ident_t *id_ref, int gtid, kmp_int32 *lhs,733                                  kmp_int32 rhs);734void __kmpc_atomic_fixed4u_div_rev(ident_t *id_ref, int gtid, kmp_uint32 *lhs,735                                   kmp_uint32 rhs);736void __kmpc_atomic_fixed4_shl_rev(ident_t *id_ref, int gtid, kmp_int32 *lhs,737                                  kmp_int32 rhs);738void __kmpc_atomic_fixed4_shr_rev(ident_t *id_ref, int gtid, kmp_int32 *lhs,739                                  kmp_int32 rhs);740void __kmpc_atomic_fixed4u_shr_rev(ident_t *id_ref, int gtid, kmp_uint32 *lhs,741                                   kmp_uint32 rhs);742void __kmpc_atomic_fixed8_sub_rev(ident_t *id_ref, int gtid, kmp_int64 *lhs,743                                  kmp_int64 rhs);744void __kmpc_atomic_fixed8_div_rev(ident_t *id_ref, int gtid, kmp_int64 *lhs,745                                  kmp_int64 rhs);746void __kmpc_atomic_fixed8u_div_rev(ident_t *id_ref, int gtid, kmp_uint64 *lhs,747                                   kmp_uint64 rhs);748void __kmpc_atomic_fixed8_shl_rev(ident_t *id_ref, int gtid, kmp_int64 *lhs,749                                  kmp_int64 rhs);750void __kmpc_atomic_fixed8_shr_rev(ident_t *id_ref, int gtid, kmp_int64 *lhs,751                                  kmp_int64 rhs);752void __kmpc_atomic_fixed8u_shr_rev(ident_t *id_ref, int gtid, kmp_uint64 *lhs,753                                   kmp_uint64 rhs);754void __kmpc_atomic_float4_sub_rev(ident_t *id_ref, int gtid, float *lhs,755                                  float rhs);756void __kmpc_atomic_float4_div_rev(ident_t *id_ref, int gtid, float *lhs,757                                  float rhs);758void __kmpc_atomic_float8_sub_rev(ident_t *id_ref, int gtid, double *lhs,759                                  double rhs);760void __kmpc_atomic_float8_div_rev(ident_t *id_ref, int gtid, double *lhs,761                                  double rhs);762void __kmpc_atomic_float10_sub_rev(ident_t *id_ref, int gtid, long double *lhs,763                                   long double rhs);764void __kmpc_atomic_float10_div_rev(ident_t *id_ref, int gtid, long double *lhs,765                                   long double rhs);766#if KMP_HAVE_QUAD767void __kmpc_atomic_float16_sub_rev(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,768                                   QUAD_LEGACY rhs);769void __kmpc_atomic_float16_div_rev(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,770                                   QUAD_LEGACY rhs);771#endif772void __kmpc_atomic_cmplx4_sub_rev(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,773                                  kmp_cmplx32 rhs);774void __kmpc_atomic_cmplx4_div_rev(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,775                                  kmp_cmplx32 rhs);776void __kmpc_atomic_cmplx8_sub_rev(ident_t *id_ref, int gtid, kmp_cmplx64 *lhs,777                                  kmp_cmplx64 rhs);778void __kmpc_atomic_cmplx8_div_rev(ident_t *id_ref, int gtid, kmp_cmplx64 *lhs,779                                  kmp_cmplx64 rhs);780void __kmpc_atomic_cmplx10_sub_rev(ident_t *id_ref, int gtid, kmp_cmplx80 *lhs,781                                   kmp_cmplx80 rhs);782void __kmpc_atomic_cmplx10_div_rev(ident_t *id_ref, int gtid, kmp_cmplx80 *lhs,783                                   kmp_cmplx80 rhs);784#if KMP_HAVE_QUAD785void __kmpc_atomic_cmplx16_sub_rev(ident_t *id_ref, int gtid, CPLX128_LEG *lhs,786                                   CPLX128_LEG rhs);787void __kmpc_atomic_cmplx16_div_rev(ident_t *id_ref, int gtid, CPLX128_LEG *lhs,788                                   CPLX128_LEG rhs);789#if (KMP_ARCH_X86)790// Routines with 16-byte arguments aligned to 16-byte boundary791void __kmpc_atomic_float16_sub_a16_rev(ident_t *id_ref, int gtid,792                                       Quad_a16_t *lhs, Quad_a16_t rhs);793void __kmpc_atomic_float16_div_a16_rev(ident_t *id_ref, int gtid,794                                       Quad_a16_t *lhs, Quad_a16_t rhs);795void __kmpc_atomic_cmplx16_sub_a16_rev(ident_t *id_ref, int gtid,796                                       kmp_cmplx128_a16_t *lhs,797                                       kmp_cmplx128_a16_t rhs);798void __kmpc_atomic_cmplx16_div_a16_rev(ident_t *id_ref, int gtid,799                                       kmp_cmplx128_a16_t *lhs,800                                       kmp_cmplx128_a16_t rhs);801#endif802#endif // KMP_HAVE_QUAD803 804#endif // KMP_ARCH_X86 || KMP_ARCH_X86_64805 806// routines for mixed types807 808// RHS=float8809void __kmpc_atomic_fixed1_mul_float8(ident_t *id_ref, int gtid, char *lhs,810                                     kmp_real64 rhs);811void __kmpc_atomic_fixed1_div_float8(ident_t *id_ref, int gtid, char *lhs,812                                     kmp_real64 rhs);813void __kmpc_atomic_fixed2_mul_float8(ident_t *id_ref, int gtid, short *lhs,814                                     kmp_real64 rhs);815void __kmpc_atomic_fixed2_div_float8(ident_t *id_ref, int gtid, short *lhs,816                                     kmp_real64 rhs);817void __kmpc_atomic_fixed4_mul_float8(ident_t *id_ref, int gtid, kmp_int32 *lhs,818                                     kmp_real64 rhs);819void __kmpc_atomic_fixed4_div_float8(ident_t *id_ref, int gtid, kmp_int32 *lhs,820                                     kmp_real64 rhs);821void __kmpc_atomic_fixed8_mul_float8(ident_t *id_ref, int gtid, kmp_int64 *lhs,822                                     kmp_real64 rhs);823void __kmpc_atomic_fixed8_div_float8(ident_t *id_ref, int gtid, kmp_int64 *lhs,824                                     kmp_real64 rhs);825void __kmpc_atomic_float4_add_float8(ident_t *id_ref, int gtid, kmp_real32 *lhs,826                                     kmp_real64 rhs);827void __kmpc_atomic_float4_sub_float8(ident_t *id_ref, int gtid, kmp_real32 *lhs,828                                     kmp_real64 rhs);829void __kmpc_atomic_float4_mul_float8(ident_t *id_ref, int gtid, kmp_real32 *lhs,830                                     kmp_real64 rhs);831void __kmpc_atomic_float4_div_float8(ident_t *id_ref, int gtid, kmp_real32 *lhs,832                                     kmp_real64 rhs);833 834// RHS=float16 (deprecated, to be removed when we are sure the compiler does not835// use them)836#if KMP_HAVE_QUAD837void __kmpc_atomic_fixed1_add_fp(ident_t *id_ref, int gtid, char *lhs,838                                 _Quad rhs);839void __kmpc_atomic_fixed1u_add_fp(ident_t *id_ref, int gtid, unsigned char *lhs,840                                  _Quad rhs);841void __kmpc_atomic_fixed1_sub_fp(ident_t *id_ref, int gtid, char *lhs,842                                 _Quad rhs);843void __kmpc_atomic_fixed1u_sub_fp(ident_t *id_ref, int gtid, unsigned char *lhs,844                                  _Quad rhs);845void __kmpc_atomic_fixed1_mul_fp(ident_t *id_ref, int gtid, char *lhs,846                                 _Quad rhs);847void __kmpc_atomic_fixed1u_mul_fp(ident_t *id_ref, int gtid, unsigned char *lhs,848                                  _Quad rhs);849void __kmpc_atomic_fixed1_div_fp(ident_t *id_ref, int gtid, char *lhs,850                                 _Quad rhs);851void __kmpc_atomic_fixed1u_div_fp(ident_t *id_ref, int gtid, unsigned char *lhs,852                                  _Quad rhs);853 854void __kmpc_atomic_fixed2_add_fp(ident_t *id_ref, int gtid, short *lhs,855                                 _Quad rhs);856void __kmpc_atomic_fixed2u_add_fp(ident_t *id_ref, int gtid,857                                  unsigned short *lhs, _Quad rhs);858void __kmpc_atomic_fixed2_sub_fp(ident_t *id_ref, int gtid, short *lhs,859                                 _Quad rhs);860void __kmpc_atomic_fixed2u_sub_fp(ident_t *id_ref, int gtid,861                                  unsigned short *lhs, _Quad rhs);862void __kmpc_atomic_fixed2_mul_fp(ident_t *id_ref, int gtid, short *lhs,863                                 _Quad rhs);864void __kmpc_atomic_fixed2u_mul_fp(ident_t *id_ref, int gtid,865                                  unsigned short *lhs, _Quad rhs);866void __kmpc_atomic_fixed2_div_fp(ident_t *id_ref, int gtid, short *lhs,867                                 _Quad rhs);868void __kmpc_atomic_fixed2u_div_fp(ident_t *id_ref, int gtid,869                                  unsigned short *lhs, _Quad rhs);870 871void __kmpc_atomic_fixed4_add_fp(ident_t *id_ref, int gtid, kmp_int32 *lhs,872                                 _Quad rhs);873void __kmpc_atomic_fixed4u_add_fp(ident_t *id_ref, int gtid, kmp_uint32 *lhs,874                                  _Quad rhs);875void __kmpc_atomic_fixed4_sub_fp(ident_t *id_ref, int gtid, kmp_int32 *lhs,876                                 _Quad rhs);877void __kmpc_atomic_fixed4u_sub_fp(ident_t *id_ref, int gtid, kmp_uint32 *lhs,878                                  _Quad rhs);879void __kmpc_atomic_fixed4_mul_fp(ident_t *id_ref, int gtid, kmp_int32 *lhs,880                                 _Quad rhs);881void __kmpc_atomic_fixed4u_mul_fp(ident_t *id_ref, int gtid, kmp_uint32 *lhs,882                                  _Quad rhs);883void __kmpc_atomic_fixed4_div_fp(ident_t *id_ref, int gtid, kmp_int32 *lhs,884                                 _Quad rhs);885void __kmpc_atomic_fixed4u_div_fp(ident_t *id_ref, int gtid, kmp_uint32 *lhs,886                                  _Quad rhs);887 888void __kmpc_atomic_fixed8_add_fp(ident_t *id_ref, int gtid, kmp_int64 *lhs,889                                 _Quad rhs);890void __kmpc_atomic_fixed8u_add_fp(ident_t *id_ref, int gtid, kmp_uint64 *lhs,891                                  _Quad rhs);892void __kmpc_atomic_fixed8_sub_fp(ident_t *id_ref, int gtid, kmp_int64 *lhs,893                                 _Quad rhs);894void __kmpc_atomic_fixed8u_sub_fp(ident_t *id_ref, int gtid, kmp_uint64 *lhs,895                                  _Quad rhs);896void __kmpc_atomic_fixed8_mul_fp(ident_t *id_ref, int gtid, kmp_int64 *lhs,897                                 _Quad rhs);898void __kmpc_atomic_fixed8u_mul_fp(ident_t *id_ref, int gtid, kmp_uint64 *lhs,899                                  _Quad rhs);900void __kmpc_atomic_fixed8_div_fp(ident_t *id_ref, int gtid, kmp_int64 *lhs,901                                 _Quad rhs);902void __kmpc_atomic_fixed8u_div_fp(ident_t *id_ref, int gtid, kmp_uint64 *lhs,903                                  _Quad rhs);904 905void __kmpc_atomic_float4_add_fp(ident_t *id_ref, int gtid, kmp_real32 *lhs,906                                 _Quad rhs);907void __kmpc_atomic_float4_sub_fp(ident_t *id_ref, int gtid, kmp_real32 *lhs,908                                 _Quad rhs);909void __kmpc_atomic_float4_mul_fp(ident_t *id_ref, int gtid, kmp_real32 *lhs,910                                 _Quad rhs);911void __kmpc_atomic_float4_div_fp(ident_t *id_ref, int gtid, kmp_real32 *lhs,912                                 _Quad rhs);913 914void __kmpc_atomic_float8_add_fp(ident_t *id_ref, int gtid, kmp_real64 *lhs,915                                 _Quad rhs);916void __kmpc_atomic_float8_sub_fp(ident_t *id_ref, int gtid, kmp_real64 *lhs,917                                 _Quad rhs);918void __kmpc_atomic_float8_mul_fp(ident_t *id_ref, int gtid, kmp_real64 *lhs,919                                 _Quad rhs);920void __kmpc_atomic_float8_div_fp(ident_t *id_ref, int gtid, kmp_real64 *lhs,921                                 _Quad rhs);922 923void __kmpc_atomic_float10_add_fp(ident_t *id_ref, int gtid, long double *lhs,924                                  _Quad rhs);925void __kmpc_atomic_float10_sub_fp(ident_t *id_ref, int gtid, long double *lhs,926                                  _Quad rhs);927void __kmpc_atomic_float10_mul_fp(ident_t *id_ref, int gtid, long double *lhs,928                                  _Quad rhs);929void __kmpc_atomic_float10_div_fp(ident_t *id_ref, int gtid, long double *lhs,930                                  _Quad rhs);931 932// Reverse operations933void __kmpc_atomic_fixed1_sub_rev_fp(ident_t *id_ref, int gtid, char *lhs,934                                     _Quad rhs);935void __kmpc_atomic_fixed1u_sub_rev_fp(ident_t *id_ref, int gtid,936                                      unsigned char *lhs, _Quad rhs);937void __kmpc_atomic_fixed1_div_rev_fp(ident_t *id_ref, int gtid, char *lhs,938                                     _Quad rhs);939void __kmpc_atomic_fixed1u_div_rev_fp(ident_t *id_ref, int gtid,940                                      unsigned char *lhs, _Quad rhs);941void __kmpc_atomic_fixed2_sub_rev_fp(ident_t *id_ref, int gtid, short *lhs,942                                     _Quad rhs);943void __kmpc_atomic_fixed2u_sub_rev_fp(ident_t *id_ref, int gtid,944                                      unsigned short *lhs, _Quad rhs);945void __kmpc_atomic_fixed2_div_rev_fp(ident_t *id_ref, int gtid, short *lhs,946                                     _Quad rhs);947void __kmpc_atomic_fixed2u_div_rev_fp(ident_t *id_ref, int gtid,948                                      unsigned short *lhs, _Quad rhs);949void __kmpc_atomic_fixed4_sub_rev_fp(ident_t *id_ref, int gtid, kmp_int32 *lhs,950                                     _Quad rhs);951void __kmpc_atomic_fixed4u_sub_rev_fp(ident_t *id_ref, int gtid,952                                      kmp_uint32 *lhs, _Quad rhs);953void __kmpc_atomic_fixed4_div_rev_fp(ident_t *id_ref, int gtid, kmp_int32 *lhs,954                                     _Quad rhs);955void __kmpc_atomic_fixed4u_div_rev_fp(ident_t *id_ref, int gtid,956                                      kmp_uint32 *lhs, _Quad rhs);957void __kmpc_atomic_fixed8_sub_rev_fp(ident_t *id_ref, int gtid, kmp_int64 *lhs,958                                     _Quad rhs);959void __kmpc_atomic_fixed8u_sub_rev_fp(ident_t *id_ref, int gtid,960                                      kmp_uint64 *lhs, _Quad rhs);961void __kmpc_atomic_fixed8_div_rev_fp(ident_t *id_ref, int gtid, kmp_int64 *lhs,962                                     _Quad rhs);963void __kmpc_atomic_fixed8u_div_rev_fp(ident_t *id_ref, int gtid,964                                      kmp_uint64 *lhs, _Quad rhs);965void __kmpc_atomic_float4_sub_rev_fp(ident_t *id_ref, int gtid, float *lhs,966                                     _Quad rhs);967void __kmpc_atomic_float4_div_rev_fp(ident_t *id_ref, int gtid, float *lhs,968                                     _Quad rhs);969void __kmpc_atomic_float8_sub_rev_fp(ident_t *id_ref, int gtid, double *lhs,970                                     _Quad rhs);971void __kmpc_atomic_float8_div_rev_fp(ident_t *id_ref, int gtid, double *lhs,972                                     _Quad rhs);973void __kmpc_atomic_float10_sub_rev_fp(ident_t *id_ref, int gtid,974                                      long double *lhs, _Quad rhs);975void __kmpc_atomic_float10_div_rev_fp(ident_t *id_ref, int gtid,976                                      long double *lhs, _Quad rhs);977 978#endif // KMP_HAVE_QUAD979 980// RHS=cmplx8981void __kmpc_atomic_cmplx4_add_cmplx8(ident_t *id_ref, int gtid,982                                     kmp_cmplx32 *lhs, kmp_cmplx64 rhs);983void __kmpc_atomic_cmplx4_sub_cmplx8(ident_t *id_ref, int gtid,984                                     kmp_cmplx32 *lhs, kmp_cmplx64 rhs);985void __kmpc_atomic_cmplx4_mul_cmplx8(ident_t *id_ref, int gtid,986                                     kmp_cmplx32 *lhs, kmp_cmplx64 rhs);987void __kmpc_atomic_cmplx4_div_cmplx8(ident_t *id_ref, int gtid,988                                     kmp_cmplx32 *lhs, kmp_cmplx64 rhs);989 990// generic atomic routines991void __kmpc_atomic_1(ident_t *id_ref, int gtid, void *lhs, void *rhs,992                     void (*f)(void *, void *, void *));993void __kmpc_atomic_2(ident_t *id_ref, int gtid, void *lhs, void *rhs,994                     void (*f)(void *, void *, void *));995void __kmpc_atomic_4(ident_t *id_ref, int gtid, void *lhs, void *rhs,996                     void (*f)(void *, void *, void *));997void __kmpc_atomic_8(ident_t *id_ref, int gtid, void *lhs, void *rhs,998                     void (*f)(void *, void *, void *));999void __kmpc_atomic_10(ident_t *id_ref, int gtid, void *lhs, void *rhs,1000                      void (*f)(void *, void *, void *));1001void __kmpc_atomic_16(ident_t *id_ref, int gtid, void *lhs, void *rhs,1002                      void (*f)(void *, void *, void *));1003void __kmpc_atomic_20(ident_t *id_ref, int gtid, void *lhs, void *rhs,1004                      void (*f)(void *, void *, void *));1005void __kmpc_atomic_32(ident_t *id_ref, int gtid, void *lhs, void *rhs,1006                      void (*f)(void *, void *, void *));1007 1008// READ, WRITE, CAPTURE1009 1010//  Below routines for atomic READ are listed1011char __kmpc_atomic_fixed1_rd(ident_t *id_ref, int gtid, char *loc);1012short __kmpc_atomic_fixed2_rd(ident_t *id_ref, int gtid, short *loc);1013kmp_int32 __kmpc_atomic_fixed4_rd(ident_t *id_ref, int gtid, kmp_int32 *loc);1014kmp_int64 __kmpc_atomic_fixed8_rd(ident_t *id_ref, int gtid, kmp_int64 *loc);1015kmp_real32 __kmpc_atomic_float4_rd(ident_t *id_ref, int gtid, kmp_real32 *loc);1016kmp_real64 __kmpc_atomic_float8_rd(ident_t *id_ref, int gtid, kmp_real64 *loc);1017long double __kmpc_atomic_float10_rd(ident_t *id_ref, int gtid,1018                                     long double *loc);1019#if KMP_HAVE_QUAD1020QUAD_LEGACY __kmpc_atomic_float16_rd(ident_t *id_ref, int gtid,1021                                     QUAD_LEGACY *loc);1022#endif1023// Fix for CQ220361: cmplx4 READ will return void on Windows* OS; read value1024// will be returned through an additional parameter1025#if (KMP_OS_WINDOWS)1026void __kmpc_atomic_cmplx4_rd(kmp_cmplx32 *out, ident_t *id_ref, int gtid,1027                             kmp_cmplx32 *loc);1028#else1029kmp_cmplx32 __kmpc_atomic_cmplx4_rd(ident_t *id_ref, int gtid,1030                                    kmp_cmplx32 *loc);1031#endif1032kmp_cmplx64 __kmpc_atomic_cmplx8_rd(ident_t *id_ref, int gtid,1033                                    kmp_cmplx64 *loc);1034kmp_cmplx80 __kmpc_atomic_cmplx10_rd(ident_t *id_ref, int gtid,1035                                     kmp_cmplx80 *loc);1036#if KMP_HAVE_QUAD1037CPLX128_LEG __kmpc_atomic_cmplx16_rd(ident_t *id_ref, int gtid,1038                                     CPLX128_LEG *loc);1039#if (KMP_ARCH_X86)1040// Routines with 16-byte arguments aligned to 16-byte boundary1041Quad_a16_t __kmpc_atomic_float16_a16_rd(ident_t *id_ref, int gtid,1042                                        Quad_a16_t *loc);1043kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_a16_rd(ident_t *id_ref, int gtid,1044                                                kmp_cmplx128_a16_t *loc);1045#endif1046#endif1047 1048//  Below routines for atomic WRITE are listed1049void __kmpc_atomic_fixed1_wr(ident_t *id_ref, int gtid, char *lhs, char rhs);1050void __kmpc_atomic_fixed2_wr(ident_t *id_ref, int gtid, short *lhs, short rhs);1051void __kmpc_atomic_fixed4_wr(ident_t *id_ref, int gtid, kmp_int32 *lhs,1052                             kmp_int32 rhs);1053void __kmpc_atomic_fixed8_wr(ident_t *id_ref, int gtid, kmp_int64 *lhs,1054                             kmp_int64 rhs);1055void __kmpc_atomic_float4_wr(ident_t *id_ref, int gtid, kmp_real32 *lhs,1056                             kmp_real32 rhs);1057void __kmpc_atomic_float8_wr(ident_t *id_ref, int gtid, kmp_real64 *lhs,1058                             kmp_real64 rhs);1059void __kmpc_atomic_float10_wr(ident_t *id_ref, int gtid, long double *lhs,1060                              long double rhs);1061#if KMP_HAVE_QUAD1062void __kmpc_atomic_float16_wr(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,1063                              QUAD_LEGACY rhs);1064#endif1065void __kmpc_atomic_cmplx4_wr(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,1066                             kmp_cmplx32 rhs);1067void __kmpc_atomic_cmplx8_wr(ident_t *id_ref, int gtid, kmp_cmplx64 *lhs,1068                             kmp_cmplx64 rhs);1069void __kmpc_atomic_cmplx10_wr(ident_t *id_ref, int gtid, kmp_cmplx80 *lhs,1070                              kmp_cmplx80 rhs);1071#if KMP_HAVE_QUAD1072void __kmpc_atomic_cmplx16_wr(ident_t *id_ref, int gtid, CPLX128_LEG *lhs,1073                              CPLX128_LEG rhs);1074#if (KMP_ARCH_X86)1075// Routines with 16-byte arguments aligned to 16-byte boundary1076void __kmpc_atomic_float16_a16_wr(ident_t *id_ref, int gtid, Quad_a16_t *lhs,1077                                  Quad_a16_t rhs);1078void __kmpc_atomic_cmplx16_a16_wr(ident_t *id_ref, int gtid,1079                                  kmp_cmplx128_a16_t *lhs,1080                                  kmp_cmplx128_a16_t rhs);1081#endif1082#endif1083 1084//  Below routines for atomic CAPTURE are listed1085 1086// 1-byte1087char __kmpc_atomic_fixed1_add_cpt(ident_t *id_ref, int gtid, char *lhs,1088                                  char rhs, int flag);1089char __kmpc_atomic_fixed1_andb_cpt(ident_t *id_ref, int gtid, char *lhs,1090                                   char rhs, int flag);1091char __kmpc_atomic_fixed1_div_cpt(ident_t *id_ref, int gtid, char *lhs,1092                                  char rhs, int flag);1093unsigned char __kmpc_atomic_fixed1u_div_cpt(ident_t *id_ref, int gtid,1094                                            unsigned char *lhs,1095                                            unsigned char rhs, int flag);1096char __kmpc_atomic_fixed1_mul_cpt(ident_t *id_ref, int gtid, char *lhs,1097                                  char rhs, int flag);1098char __kmpc_atomic_fixed1_orb_cpt(ident_t *id_ref, int gtid, char *lhs,1099                                  char rhs, int flag);1100char __kmpc_atomic_fixed1_shl_cpt(ident_t *id_ref, int gtid, char *lhs,1101                                  char rhs, int flag);1102char __kmpc_atomic_fixed1_shr_cpt(ident_t *id_ref, int gtid, char *lhs,1103                                  char rhs, int flag);1104unsigned char __kmpc_atomic_fixed1u_shr_cpt(ident_t *id_ref, int gtid,1105                                            unsigned char *lhs,1106                                            unsigned char rhs, int flag);1107char __kmpc_atomic_fixed1_sub_cpt(ident_t *id_ref, int gtid, char *lhs,1108                                  char rhs, int flag);1109char __kmpc_atomic_fixed1_xor_cpt(ident_t *id_ref, int gtid, char *lhs,1110                                  char rhs, int flag);1111// 2-byte1112short __kmpc_atomic_fixed2_add_cpt(ident_t *id_ref, int gtid, short *lhs,1113                                   short rhs, int flag);1114short __kmpc_atomic_fixed2_andb_cpt(ident_t *id_ref, int gtid, short *lhs,1115                                    short rhs, int flag);1116short __kmpc_atomic_fixed2_div_cpt(ident_t *id_ref, int gtid, short *lhs,1117                                   short rhs, int flag);1118unsigned short __kmpc_atomic_fixed2u_div_cpt(ident_t *id_ref, int gtid,1119                                             unsigned short *lhs,1120                                             unsigned short rhs, int flag);1121short __kmpc_atomic_fixed2_mul_cpt(ident_t *id_ref, int gtid, short *lhs,1122                                   short rhs, int flag);1123short __kmpc_atomic_fixed2_orb_cpt(ident_t *id_ref, int gtid, short *lhs,1124                                   short rhs, int flag);1125short __kmpc_atomic_fixed2_shl_cpt(ident_t *id_ref, int gtid, short *lhs,1126                                   short rhs, int flag);1127short __kmpc_atomic_fixed2_shr_cpt(ident_t *id_ref, int gtid, short *lhs,1128                                   short rhs, int flag);1129unsigned short __kmpc_atomic_fixed2u_shr_cpt(ident_t *id_ref, int gtid,1130                                             unsigned short *lhs,1131                                             unsigned short rhs, int flag);1132short __kmpc_atomic_fixed2_sub_cpt(ident_t *id_ref, int gtid, short *lhs,1133                                   short rhs, int flag);1134short __kmpc_atomic_fixed2_xor_cpt(ident_t *id_ref, int gtid, short *lhs,1135                                   short rhs, int flag);1136// 4-byte add / sub fixed1137kmp_int32 __kmpc_atomic_fixed4_add_cpt(ident_t *id_ref, int gtid,1138                                       kmp_int32 *lhs, kmp_int32 rhs, int flag);1139kmp_int32 __kmpc_atomic_fixed4_sub_cpt(ident_t *id_ref, int gtid,1140                                       kmp_int32 *lhs, kmp_int32 rhs, int flag);1141// 4-byte add / sub float1142kmp_real32 __kmpc_atomic_float4_add_cpt(ident_t *id_ref, int gtid,1143                                        kmp_real32 *lhs, kmp_real32 rhs,1144                                        int flag);1145kmp_real32 __kmpc_atomic_float4_sub_cpt(ident_t *id_ref, int gtid,1146                                        kmp_real32 *lhs, kmp_real32 rhs,1147                                        int flag);1148// 8-byte add / sub fixed1149kmp_int64 __kmpc_atomic_fixed8_add_cpt(ident_t *id_ref, int gtid,1150                                       kmp_int64 *lhs, kmp_int64 rhs, int flag);1151kmp_int64 __kmpc_atomic_fixed8_sub_cpt(ident_t *id_ref, int gtid,1152                                       kmp_int64 *lhs, kmp_int64 rhs, int flag);1153// 8-byte add / sub float1154kmp_real64 __kmpc_atomic_float8_add_cpt(ident_t *id_ref, int gtid,1155                                        kmp_real64 *lhs, kmp_real64 rhs,1156                                        int flag);1157kmp_real64 __kmpc_atomic_float8_sub_cpt(ident_t *id_ref, int gtid,1158                                        kmp_real64 *lhs, kmp_real64 rhs,1159                                        int flag);1160// 4-byte fixed1161kmp_int32 __kmpc_atomic_fixed4_andb_cpt(ident_t *id_ref, int gtid,1162                                        kmp_int32 *lhs, kmp_int32 rhs,1163                                        int flag);1164kmp_int32 __kmpc_atomic_fixed4_div_cpt(ident_t *id_ref, int gtid,1165                                       kmp_int32 *lhs, kmp_int32 rhs, int flag);1166kmp_uint32 __kmpc_atomic_fixed4u_div_cpt(ident_t *id_ref, int gtid,1167                                         kmp_uint32 *lhs, kmp_uint32 rhs,1168                                         int flag);1169kmp_int32 __kmpc_atomic_fixed4_mul_cpt(ident_t *id_ref, int gtid,1170                                       kmp_int32 *lhs, kmp_int32 rhs, int flag);1171kmp_int32 __kmpc_atomic_fixed4_orb_cpt(ident_t *id_ref, int gtid,1172                                       kmp_int32 *lhs, kmp_int32 rhs, int flag);1173kmp_int32 __kmpc_atomic_fixed4_shl_cpt(ident_t *id_ref, int gtid,1174                                       kmp_int32 *lhs, kmp_int32 rhs, int flag);1175kmp_int32 __kmpc_atomic_fixed4_shr_cpt(ident_t *id_ref, int gtid,1176                                       kmp_int32 *lhs, kmp_int32 rhs, int flag);1177kmp_uint32 __kmpc_atomic_fixed4u_shr_cpt(ident_t *id_ref, int gtid,1178                                         kmp_uint32 *lhs, kmp_uint32 rhs,1179                                         int flag);1180kmp_int32 __kmpc_atomic_fixed4_xor_cpt(ident_t *id_ref, int gtid,1181                                       kmp_int32 *lhs, kmp_int32 rhs, int flag);1182// 8-byte fixed1183kmp_int64 __kmpc_atomic_fixed8_andb_cpt(ident_t *id_ref, int gtid,1184                                        kmp_int64 *lhs, kmp_int64 rhs,1185                                        int flag);1186kmp_int64 __kmpc_atomic_fixed8_div_cpt(ident_t *id_ref, int gtid,1187                                       kmp_int64 *lhs, kmp_int64 rhs, int flag);1188kmp_uint64 __kmpc_atomic_fixed8u_div_cpt(ident_t *id_ref, int gtid,1189                                         kmp_uint64 *lhs, kmp_uint64 rhs,1190                                         int flag);1191kmp_int64 __kmpc_atomic_fixed8_mul_cpt(ident_t *id_ref, int gtid,1192                                       kmp_int64 *lhs, kmp_int64 rhs, int flag);1193kmp_int64 __kmpc_atomic_fixed8_orb_cpt(ident_t *id_ref, int gtid,1194                                       kmp_int64 *lhs, kmp_int64 rhs, int flag);1195kmp_int64 __kmpc_atomic_fixed8_shl_cpt(ident_t *id_ref, int gtid,1196                                       kmp_int64 *lhs, kmp_int64 rhs, int flag);1197kmp_int64 __kmpc_atomic_fixed8_shr_cpt(ident_t *id_ref, int gtid,1198                                       kmp_int64 *lhs, kmp_int64 rhs, int flag);1199kmp_uint64 __kmpc_atomic_fixed8u_shr_cpt(ident_t *id_ref, int gtid,1200                                         kmp_uint64 *lhs, kmp_uint64 rhs,1201                                         int flag);1202kmp_int64 __kmpc_atomic_fixed8_xor_cpt(ident_t *id_ref, int gtid,1203                                       kmp_int64 *lhs, kmp_int64 rhs, int flag);1204// 4-byte float1205kmp_real32 __kmpc_atomic_float4_div_cpt(ident_t *id_ref, int gtid,1206                                        kmp_real32 *lhs, kmp_real32 rhs,1207                                        int flag);1208kmp_real32 __kmpc_atomic_float4_mul_cpt(ident_t *id_ref, int gtid,1209                                        kmp_real32 *lhs, kmp_real32 rhs,1210                                        int flag);1211// 8-byte float1212kmp_real64 __kmpc_atomic_float8_div_cpt(ident_t *id_ref, int gtid,1213                                        kmp_real64 *lhs, kmp_real64 rhs,1214                                        int flag);1215kmp_real64 __kmpc_atomic_float8_mul_cpt(ident_t *id_ref, int gtid,1216                                        kmp_real64 *lhs, kmp_real64 rhs,1217                                        int flag);1218// 1-, 2-, 4-, 8-byte logical (&&, ||)1219char __kmpc_atomic_fixed1_andl_cpt(ident_t *id_ref, int gtid, char *lhs,1220                                   char rhs, int flag);1221char __kmpc_atomic_fixed1_orl_cpt(ident_t *id_ref, int gtid, char *lhs,1222                                  char rhs, int flag);1223short __kmpc_atomic_fixed2_andl_cpt(ident_t *id_ref, int gtid, short *lhs,1224                                    short rhs, int flag);1225short __kmpc_atomic_fixed2_orl_cpt(ident_t *id_ref, int gtid, short *lhs,1226                                   short rhs, int flag);1227kmp_int32 __kmpc_atomic_fixed4_andl_cpt(ident_t *id_ref, int gtid,1228                                        kmp_int32 *lhs, kmp_int32 rhs,1229                                        int flag);1230kmp_int32 __kmpc_atomic_fixed4_orl_cpt(ident_t *id_ref, int gtid,1231                                       kmp_int32 *lhs, kmp_int32 rhs, int flag);1232kmp_int64 __kmpc_atomic_fixed8_andl_cpt(ident_t *id_ref, int gtid,1233                                        kmp_int64 *lhs, kmp_int64 rhs,1234                                        int flag);1235kmp_int64 __kmpc_atomic_fixed8_orl_cpt(ident_t *id_ref, int gtid,1236                                       kmp_int64 *lhs, kmp_int64 rhs, int flag);1237// MIN / MAX1238char __kmpc_atomic_fixed1_max_cpt(ident_t *id_ref, int gtid, char *lhs,1239                                  char rhs, int flag);1240char __kmpc_atomic_fixed1_min_cpt(ident_t *id_ref, int gtid, char *lhs,1241                                  char rhs, int flag);1242short __kmpc_atomic_fixed2_max_cpt(ident_t *id_ref, int gtid, short *lhs,1243                                   short rhs, int flag);1244short __kmpc_atomic_fixed2_min_cpt(ident_t *id_ref, int gtid, short *lhs,1245                                   short rhs, int flag);1246kmp_int32 __kmpc_atomic_fixed4_max_cpt(ident_t *id_ref, int gtid,1247                                       kmp_int32 *lhs, kmp_int32 rhs, int flag);1248kmp_int32 __kmpc_atomic_fixed4_min_cpt(ident_t *id_ref, int gtid,1249                                       kmp_int32 *lhs, kmp_int32 rhs, int flag);1250kmp_int64 __kmpc_atomic_fixed8_max_cpt(ident_t *id_ref, int gtid,1251                                       kmp_int64 *lhs, kmp_int64 rhs, int flag);1252kmp_int64 __kmpc_atomic_fixed8_min_cpt(ident_t *id_ref, int gtid,1253                                       kmp_int64 *lhs, kmp_int64 rhs, int flag);1254kmp_real32 __kmpc_atomic_float4_max_cpt(ident_t *id_ref, int gtid,1255                                        kmp_real32 *lhs, kmp_real32 rhs,1256                                        int flag);1257kmp_real32 __kmpc_atomic_float4_min_cpt(ident_t *id_ref, int gtid,1258                                        kmp_real32 *lhs, kmp_real32 rhs,1259                                        int flag);1260kmp_real64 __kmpc_atomic_float8_max_cpt(ident_t *id_ref, int gtid,1261                                        kmp_real64 *lhs, kmp_real64 rhs,1262                                        int flag);1263kmp_real64 __kmpc_atomic_float8_min_cpt(ident_t *id_ref, int gtid,1264                                        kmp_real64 *lhs, kmp_real64 rhs,1265                                        int flag);1266long double __kmpc_atomic_float10_max_cpt(ident_t *id_ref, int gtid,1267                                          long double *lhs, long double rhs,1268                                          int flag);1269long double __kmpc_atomic_float10_min_cpt(ident_t *id_ref, int gtid,1270                                          long double *lhs, long double rhs,1271                                          int flag);1272#if KMP_HAVE_QUAD1273QUAD_LEGACY __kmpc_atomic_float16_max_cpt(ident_t *id_ref, int gtid,1274                                          QUAD_LEGACY *lhs, QUAD_LEGACY rhs,1275                                          int flag);1276QUAD_LEGACY __kmpc_atomic_float16_min_cpt(ident_t *id_ref, int gtid,1277                                          QUAD_LEGACY *lhs, QUAD_LEGACY rhs,1278                                          int flag);1279#endif1280// .NEQV. (same as xor)1281char __kmpc_atomic_fixed1_neqv_cpt(ident_t *id_ref, int gtid, char *lhs,1282                                   char rhs, int flag);1283short __kmpc_atomic_fixed2_neqv_cpt(ident_t *id_ref, int gtid, short *lhs,1284                                    short rhs, int flag);1285kmp_int32 __kmpc_atomic_fixed4_neqv_cpt(ident_t *id_ref, int gtid,1286                                        kmp_int32 *lhs, kmp_int32 rhs,1287                                        int flag);1288kmp_int64 __kmpc_atomic_fixed8_neqv_cpt(ident_t *id_ref, int gtid,1289                                        kmp_int64 *lhs, kmp_int64 rhs,1290                                        int flag);1291// .EQV. (same as ~xor)1292char __kmpc_atomic_fixed1_eqv_cpt(ident_t *id_ref, int gtid, char *lhs,1293                                  char rhs, int flag);1294short __kmpc_atomic_fixed2_eqv_cpt(ident_t *id_ref, int gtid, short *lhs,1295                                   short rhs, int flag);1296kmp_int32 __kmpc_atomic_fixed4_eqv_cpt(ident_t *id_ref, int gtid,1297                                       kmp_int32 *lhs, kmp_int32 rhs, int flag);1298kmp_int64 __kmpc_atomic_fixed8_eqv_cpt(ident_t *id_ref, int gtid,1299                                       kmp_int64 *lhs, kmp_int64 rhs, int flag);1300// long double type1301long double __kmpc_atomic_float10_add_cpt(ident_t *id_ref, int gtid,1302                                          long double *lhs, long double rhs,1303                                          int flag);1304long double __kmpc_atomic_float10_sub_cpt(ident_t *id_ref, int gtid,1305                                          long double *lhs, long double rhs,1306                                          int flag);1307long double __kmpc_atomic_float10_mul_cpt(ident_t *id_ref, int gtid,1308                                          long double *lhs, long double rhs,1309                                          int flag);1310long double __kmpc_atomic_float10_div_cpt(ident_t *id_ref, int gtid,1311                                          long double *lhs, long double rhs,1312                                          int flag);1313#if KMP_HAVE_QUAD1314// _Quad type1315QUAD_LEGACY __kmpc_atomic_float16_add_cpt(ident_t *id_ref, int gtid,1316                                          QUAD_LEGACY *lhs, QUAD_LEGACY rhs,1317                                          int flag);1318QUAD_LEGACY __kmpc_atomic_float16_sub_cpt(ident_t *id_ref, int gtid,1319                                          QUAD_LEGACY *lhs, QUAD_LEGACY rhs,1320                                          int flag);1321QUAD_LEGACY __kmpc_atomic_float16_mul_cpt(ident_t *id_ref, int gtid,1322                                          QUAD_LEGACY *lhs, QUAD_LEGACY rhs,1323                                          int flag);1324QUAD_LEGACY __kmpc_atomic_float16_div_cpt(ident_t *id_ref, int gtid,1325                                          QUAD_LEGACY *lhs, QUAD_LEGACY rhs,1326                                          int flag);1327#endif1328// routines for complex types1329// Workaround for cmplx4 routines - return void; captured value is returned via1330// the argument1331void __kmpc_atomic_cmplx4_add_cpt(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,1332                                  kmp_cmplx32 rhs, kmp_cmplx32 *out, int flag);1333void __kmpc_atomic_cmplx4_sub_cpt(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,1334                                  kmp_cmplx32 rhs, kmp_cmplx32 *out, int flag);1335void __kmpc_atomic_cmplx4_mul_cpt(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,1336                                  kmp_cmplx32 rhs, kmp_cmplx32 *out, int flag);1337void __kmpc_atomic_cmplx4_div_cpt(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,1338                                  kmp_cmplx32 rhs, kmp_cmplx32 *out, int flag);1339kmp_cmplx64 __kmpc_atomic_cmplx8_add_cpt(ident_t *id_ref, int gtid,1340                                         kmp_cmplx64 *lhs, kmp_cmplx64 rhs,1341                                         int flag);1342kmp_cmplx64 __kmpc_atomic_cmplx8_sub_cpt(ident_t *id_ref, int gtid,1343                                         kmp_cmplx64 *lhs, kmp_cmplx64 rhs,1344                                         int flag);1345kmp_cmplx64 __kmpc_atomic_cmplx8_mul_cpt(ident_t *id_ref, int gtid,1346                                         kmp_cmplx64 *lhs, kmp_cmplx64 rhs,1347                                         int flag);1348kmp_cmplx64 __kmpc_atomic_cmplx8_div_cpt(ident_t *id_ref, int gtid,1349                                         kmp_cmplx64 *lhs, kmp_cmplx64 rhs,1350                                         int flag);1351kmp_cmplx80 __kmpc_atomic_cmplx10_add_cpt(ident_t *id_ref, int gtid,1352                                          kmp_cmplx80 *lhs, kmp_cmplx80 rhs,1353                                          int flag);1354kmp_cmplx80 __kmpc_atomic_cmplx10_sub_cpt(ident_t *id_ref, int gtid,1355                                          kmp_cmplx80 *lhs, kmp_cmplx80 rhs,1356                                          int flag);1357kmp_cmplx80 __kmpc_atomic_cmplx10_mul_cpt(ident_t *id_ref, int gtid,1358                                          kmp_cmplx80 *lhs, kmp_cmplx80 rhs,1359                                          int flag);1360kmp_cmplx80 __kmpc_atomic_cmplx10_div_cpt(ident_t *id_ref, int gtid,1361                                          kmp_cmplx80 *lhs, kmp_cmplx80 rhs,1362                                          int flag);1363#if KMP_HAVE_QUAD1364CPLX128_LEG __kmpc_atomic_cmplx16_add_cpt(ident_t *id_ref, int gtid,1365                                          CPLX128_LEG *lhs, CPLX128_LEG rhs,1366                                          int flag);1367CPLX128_LEG __kmpc_atomic_cmplx16_sub_cpt(ident_t *id_ref, int gtid,1368                                          CPLX128_LEG *lhs, CPLX128_LEG rhs,1369                                          int flag);1370CPLX128_LEG __kmpc_atomic_cmplx16_mul_cpt(ident_t *id_ref, int gtid,1371                                          CPLX128_LEG *lhs, CPLX128_LEG rhs,1372                                          int flag);1373CPLX128_LEG __kmpc_atomic_cmplx16_div_cpt(ident_t *id_ref, int gtid,1374                                          CPLX128_LEG *lhs, CPLX128_LEG rhs,1375                                          int flag);1376#if (KMP_ARCH_X86)1377// Routines with 16-byte arguments aligned to 16-byte boundary1378Quad_a16_t __kmpc_atomic_float16_add_a16_cpt(ident_t *id_ref, int gtid,1379                                             Quad_a16_t *lhs, Quad_a16_t rhs,1380                                             int flag);1381Quad_a16_t __kmpc_atomic_float16_sub_a16_cpt(ident_t *id_ref, int gtid,1382                                             Quad_a16_t *lhs, Quad_a16_t rhs,1383                                             int flag);1384Quad_a16_t __kmpc_atomic_float16_mul_a16_cpt(ident_t *id_ref, int gtid,1385                                             Quad_a16_t *lhs, Quad_a16_t rhs,1386                                             int flag);1387Quad_a16_t __kmpc_atomic_float16_div_a16_cpt(ident_t *id_ref, int gtid,1388                                             Quad_a16_t *lhs, Quad_a16_t rhs,1389                                             int flag);1390Quad_a16_t __kmpc_atomic_float16_max_a16_cpt(ident_t *id_ref, int gtid,1391                                             Quad_a16_t *lhs, Quad_a16_t rhs,1392                                             int flag);1393Quad_a16_t __kmpc_atomic_float16_min_a16_cpt(ident_t *id_ref, int gtid,1394                                             Quad_a16_t *lhs, Quad_a16_t rhs,1395                                             int flag);1396kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_add_a16_cpt(ident_t *id_ref, int gtid,1397                                                     kmp_cmplx128_a16_t *lhs,1398                                                     kmp_cmplx128_a16_t rhs,1399                                                     int flag);1400kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_sub_a16_cpt(ident_t *id_ref, int gtid,1401                                                     kmp_cmplx128_a16_t *lhs,1402                                                     kmp_cmplx128_a16_t rhs,1403                                                     int flag);1404kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_mul_a16_cpt(ident_t *id_ref, int gtid,1405                                                     kmp_cmplx128_a16_t *lhs,1406                                                     kmp_cmplx128_a16_t rhs,1407                                                     int flag);1408kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_div_a16_cpt(ident_t *id_ref, int gtid,1409                                                     kmp_cmplx128_a16_t *lhs,1410                                                     kmp_cmplx128_a16_t rhs,1411                                                     int flag);1412#endif1413#endif1414 1415void __kmpc_atomic_start(void);1416void __kmpc_atomic_end(void);1417 1418// OpenMP 4.0: v = x = expr binop x; { v = x; x = expr binop x; } { x = expr1419// binop x; v = x; }  for non-commutative operations.1420#if KMP_ARCH_X86 || KMP_ARCH_X86_641421char __kmpc_atomic_fixed1_sub_cpt_rev(ident_t *id_ref, int gtid, char *lhs,1422                                      char rhs, int flag);1423char __kmpc_atomic_fixed1_div_cpt_rev(ident_t *id_ref, int gtid, char *lhs,1424                                      char rhs, int flag);1425unsigned char __kmpc_atomic_fixed1u_div_cpt_rev(ident_t *id_ref, int gtid,1426                                                unsigned char *lhs,1427                                                unsigned char rhs, int flag);1428char __kmpc_atomic_fixed1_shl_cpt_rev(ident_t *id_ref, int gtid, char *lhs,1429                                      char rhs, int flag);1430char __kmpc_atomic_fixed1_shr_cpt_rev(ident_t *id_ref, int gtid, char *lhs,1431                                      char rhs, int flag);1432unsigned char __kmpc_atomic_fixed1u_shr_cpt_rev(ident_t *id_ref, int gtid,1433                                                unsigned char *lhs,1434                                                unsigned char rhs, int flag);1435short __kmpc_atomic_fixed2_sub_cpt_rev(ident_t *id_ref, int gtid, short *lhs,1436                                       short rhs, int flag);1437short __kmpc_atomic_fixed2_div_cpt_rev(ident_t *id_ref, int gtid, short *lhs,1438                                       short rhs, int flag);1439unsigned short __kmpc_atomic_fixed2u_div_cpt_rev(ident_t *id_ref, int gtid,1440                                                 unsigned short *lhs,1441                                                 unsigned short rhs, int flag);1442short __kmpc_atomic_fixed2_shl_cpt_rev(ident_t *id_ref, int gtid, short *lhs,1443                                       short rhs, int flag);1444short __kmpc_atomic_fixed2_shr_cpt_rev(ident_t *id_ref, int gtid, short *lhs,1445                                       short rhs, int flag);1446unsigned short __kmpc_atomic_fixed2u_shr_cpt_rev(ident_t *id_ref, int gtid,1447                                                 unsigned short *lhs,1448                                                 unsigned short rhs, int flag);1449kmp_int32 __kmpc_atomic_fixed4_sub_cpt_rev(ident_t *id_ref, int gtid,1450                                           kmp_int32 *lhs, kmp_int32 rhs,1451                                           int flag);1452kmp_int32 __kmpc_atomic_fixed4_div_cpt_rev(ident_t *id_ref, int gtid,1453                                           kmp_int32 *lhs, kmp_int32 rhs,1454                                           int flag);1455kmp_uint32 __kmpc_atomic_fixed4u_div_cpt_rev(ident_t *id_ref, int gtid,1456                                             kmp_uint32 *lhs, kmp_uint32 rhs,1457                                             int flag);1458kmp_int32 __kmpc_atomic_fixed4_shl_cpt_rev(ident_t *id_ref, int gtid,1459                                           kmp_int32 *lhs, kmp_int32 rhs,1460                                           int flag);1461kmp_int32 __kmpc_atomic_fixed4_shr_cpt_rev(ident_t *id_ref, int gtid,1462                                           kmp_int32 *lhs, kmp_int32 rhs,1463                                           int flag);1464kmp_uint32 __kmpc_atomic_fixed4u_shr_cpt_rev(ident_t *id_ref, int gtid,1465                                             kmp_uint32 *lhs, kmp_uint32 rhs,1466                                             int flag);1467kmp_int64 __kmpc_atomic_fixed8_sub_cpt_rev(ident_t *id_ref, int gtid,1468                                           kmp_int64 *lhs, kmp_int64 rhs,1469                                           int flag);1470kmp_int64 __kmpc_atomic_fixed8_div_cpt_rev(ident_t *id_ref, int gtid,1471                                           kmp_int64 *lhs, kmp_int64 rhs,1472                                           int flag);1473kmp_uint64 __kmpc_atomic_fixed8u_div_cpt_rev(ident_t *id_ref, int gtid,1474                                             kmp_uint64 *lhs, kmp_uint64 rhs,1475                                             int flag);1476kmp_int64 __kmpc_atomic_fixed8_shl_cpt_rev(ident_t *id_ref, int gtid,1477                                           kmp_int64 *lhs, kmp_int64 rhs,1478                                           int flag);1479kmp_int64 __kmpc_atomic_fixed8_shr_cpt_rev(ident_t *id_ref, int gtid,1480                                           kmp_int64 *lhs, kmp_int64 rhs,1481                                           int flag);1482kmp_uint64 __kmpc_atomic_fixed8u_shr_cpt_rev(ident_t *id_ref, int gtid,1483                                             kmp_uint64 *lhs, kmp_uint64 rhs,1484                                             int flag);1485float __kmpc_atomic_float4_sub_cpt_rev(ident_t *id_ref, int gtid, float *lhs,1486                                       float rhs, int flag);1487float __kmpc_atomic_float4_div_cpt_rev(ident_t *id_ref, int gtid, float *lhs,1488                                       float rhs, int flag);1489double __kmpc_atomic_float8_sub_cpt_rev(ident_t *id_ref, int gtid, double *lhs,1490                                        double rhs, int flag);1491double __kmpc_atomic_float8_div_cpt_rev(ident_t *id_ref, int gtid, double *lhs,1492                                        double rhs, int flag);1493long double __kmpc_atomic_float10_sub_cpt_rev(ident_t *id_ref, int gtid,1494                                              long double *lhs, long double rhs,1495                                              int flag);1496long double __kmpc_atomic_float10_div_cpt_rev(ident_t *id_ref, int gtid,1497                                              long double *lhs, long double rhs,1498                                              int flag);1499#if KMP_HAVE_QUAD1500QUAD_LEGACY __kmpc_atomic_float16_sub_cpt_rev(ident_t *id_ref, int gtid,1501                                              QUAD_LEGACY *lhs, QUAD_LEGACY rhs,1502                                              int flag);1503QUAD_LEGACY __kmpc_atomic_float16_div_cpt_rev(ident_t *id_ref, int gtid,1504                                              QUAD_LEGACY *lhs, QUAD_LEGACY rhs,1505                                              int flag);1506#endif1507// Workaround for cmplx4 routines - return void; captured value is returned via1508// the argument1509void __kmpc_atomic_cmplx4_sub_cpt_rev(ident_t *id_ref, int gtid,1510                                      kmp_cmplx32 *lhs, kmp_cmplx32 rhs,1511                                      kmp_cmplx32 *out, int flag);1512void __kmpc_atomic_cmplx4_div_cpt_rev(ident_t *id_ref, int gtid,1513                                      kmp_cmplx32 *lhs, kmp_cmplx32 rhs,1514                                      kmp_cmplx32 *out, int flag);1515kmp_cmplx64 __kmpc_atomic_cmplx8_sub_cpt_rev(ident_t *id_ref, int gtid,1516                                             kmp_cmplx64 *lhs, kmp_cmplx64 rhs,1517                                             int flag);1518kmp_cmplx64 __kmpc_atomic_cmplx8_div_cpt_rev(ident_t *id_ref, int gtid,1519                                             kmp_cmplx64 *lhs, kmp_cmplx64 rhs,1520                                             int flag);1521kmp_cmplx80 __kmpc_atomic_cmplx10_sub_cpt_rev(ident_t *id_ref, int gtid,1522                                              kmp_cmplx80 *lhs, kmp_cmplx80 rhs,1523                                              int flag);1524kmp_cmplx80 __kmpc_atomic_cmplx10_div_cpt_rev(ident_t *id_ref, int gtid,1525                                              kmp_cmplx80 *lhs, kmp_cmplx80 rhs,1526                                              int flag);1527#if KMP_HAVE_QUAD1528CPLX128_LEG __kmpc_atomic_cmplx16_sub_cpt_rev(ident_t *id_ref, int gtid,1529                                              CPLX128_LEG *lhs, CPLX128_LEG rhs,1530                                              int flag);1531CPLX128_LEG __kmpc_atomic_cmplx16_div_cpt_rev(ident_t *id_ref, int gtid,1532                                              CPLX128_LEG *lhs, CPLX128_LEG rhs,1533                                              int flag);1534#if (KMP_ARCH_X86)1535Quad_a16_t __kmpc_atomic_float16_sub_a16_cpt_rev(ident_t *id_ref, int gtid,1536                                                 Quad_a16_t *lhs,1537                                                 Quad_a16_t rhs, int flag);1538Quad_a16_t __kmpc_atomic_float16_div_a16_cpt_rev(ident_t *id_ref, int gtid,1539                                                 Quad_a16_t *lhs,1540                                                 Quad_a16_t rhs, int flag);1541kmp_cmplx128_a16_t1542__kmpc_atomic_cmplx16_sub_a16_cpt_rev(ident_t *id_ref, int gtid,1543                                      kmp_cmplx128_a16_t *lhs,1544                                      kmp_cmplx128_a16_t rhs, int flag);1545kmp_cmplx128_a16_t1546__kmpc_atomic_cmplx16_div_a16_cpt_rev(ident_t *id_ref, int gtid,1547                                      kmp_cmplx128_a16_t *lhs,1548                                      kmp_cmplx128_a16_t rhs, int flag);1549#endif1550#endif1551 1552//   OpenMP 4.0 Capture-write (swap): {v = x; x = expr;}1553char __kmpc_atomic_fixed1_swp(ident_t *id_ref, int gtid, char *lhs, char rhs);1554short __kmpc_atomic_fixed2_swp(ident_t *id_ref, int gtid, short *lhs,1555                               short rhs);1556kmp_int32 __kmpc_atomic_fixed4_swp(ident_t *id_ref, int gtid, kmp_int32 *lhs,1557                                   kmp_int32 rhs);1558kmp_int64 __kmpc_atomic_fixed8_swp(ident_t *id_ref, int gtid, kmp_int64 *lhs,1559                                   kmp_int64 rhs);1560float __kmpc_atomic_float4_swp(ident_t *id_ref, int gtid, float *lhs,1561                               float rhs);1562double __kmpc_atomic_float8_swp(ident_t *id_ref, int gtid, double *lhs,1563                                double rhs);1564long double __kmpc_atomic_float10_swp(ident_t *id_ref, int gtid,1565                                      long double *lhs, long double rhs);1566#if KMP_HAVE_QUAD1567QUAD_LEGACY __kmpc_atomic_float16_swp(ident_t *id_ref, int gtid,1568                                      QUAD_LEGACY *lhs, QUAD_LEGACY rhs);1569#endif1570// !!! TODO: check if we need a workaround here1571void __kmpc_atomic_cmplx4_swp(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,1572                              kmp_cmplx32 rhs, kmp_cmplx32 *out);1573// kmp_cmplx32   	__kmpc_atomic_cmplx4_swp(  ident_t *id_ref, int gtid,1574// kmp_cmplx32 * lhs, kmp_cmplx32 rhs );1575 1576kmp_cmplx64 __kmpc_atomic_cmplx8_swp(ident_t *id_ref, int gtid,1577                                     kmp_cmplx64 *lhs, kmp_cmplx64 rhs);1578kmp_cmplx80 __kmpc_atomic_cmplx10_swp(ident_t *id_ref, int gtid,1579                                      kmp_cmplx80 *lhs, kmp_cmplx80 rhs);1580#if KMP_HAVE_QUAD1581CPLX128_LEG __kmpc_atomic_cmplx16_swp(ident_t *id_ref, int gtid,1582                                      CPLX128_LEG *lhs, CPLX128_LEG rhs);1583#if (KMP_ARCH_X86)1584Quad_a16_t __kmpc_atomic_float16_a16_swp(ident_t *id_ref, int gtid,1585                                         Quad_a16_t *lhs, Quad_a16_t rhs);1586kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_a16_swp(ident_t *id_ref, int gtid,1587                                                 kmp_cmplx128_a16_t *lhs,1588                                                 kmp_cmplx128_a16_t rhs);1589#endif1590#endif1591 1592// Capture routines for mixed types (RHS=float16)1593#if KMP_HAVE_QUAD1594 1595char __kmpc_atomic_fixed1_add_cpt_fp(ident_t *id_ref, int gtid, char *lhs,1596                                     _Quad rhs, int flag);1597char __kmpc_atomic_fixed1_sub_cpt_fp(ident_t *id_ref, int gtid, char *lhs,1598                                     _Quad rhs, int flag);1599char __kmpc_atomic_fixed1_mul_cpt_fp(ident_t *id_ref, int gtid, char *lhs,1600                                     _Quad rhs, int flag);1601char __kmpc_atomic_fixed1_div_cpt_fp(ident_t *id_ref, int gtid, char *lhs,1602                                     _Quad rhs, int flag);1603unsigned char __kmpc_atomic_fixed1u_add_cpt_fp(ident_t *id_ref, int gtid,1604                                               unsigned char *lhs, _Quad rhs,1605                                               int flag);1606unsigned char __kmpc_atomic_fixed1u_sub_cpt_fp(ident_t *id_ref, int gtid,1607                                               unsigned char *lhs, _Quad rhs,1608                                               int flag);1609unsigned char __kmpc_atomic_fixed1u_mul_cpt_fp(ident_t *id_ref, int gtid,1610                                               unsigned char *lhs, _Quad rhs,1611                                               int flag);1612unsigned char __kmpc_atomic_fixed1u_div_cpt_fp(ident_t *id_ref, int gtid,1613                                               unsigned char *lhs, _Quad rhs,1614                                               int flag);1615 1616short __kmpc_atomic_fixed2_add_cpt_fp(ident_t *id_ref, int gtid, short *lhs,1617                                      _Quad rhs, int flag);1618short __kmpc_atomic_fixed2_sub_cpt_fp(ident_t *id_ref, int gtid, short *lhs,1619                                      _Quad rhs, int flag);1620short __kmpc_atomic_fixed2_mul_cpt_fp(ident_t *id_ref, int gtid, short *lhs,1621                                      _Quad rhs, int flag);1622short __kmpc_atomic_fixed2_div_cpt_fp(ident_t *id_ref, int gtid, short *lhs,1623                                      _Quad rhs, int flag);1624unsigned short __kmpc_atomic_fixed2u_add_cpt_fp(ident_t *id_ref, int gtid,1625                                                unsigned short *lhs, _Quad rhs,1626                                                int flag);1627unsigned short __kmpc_atomic_fixed2u_sub_cpt_fp(ident_t *id_ref, int gtid,1628                                                unsigned short *lhs, _Quad rhs,1629                                                int flag);1630unsigned short __kmpc_atomic_fixed2u_mul_cpt_fp(ident_t *id_ref, int gtid,1631                                                unsigned short *lhs, _Quad rhs,1632                                                int flag);1633unsigned short __kmpc_atomic_fixed2u_div_cpt_fp(ident_t *id_ref, int gtid,1634                                                unsigned short *lhs, _Quad rhs,1635                                                int flag);1636 1637kmp_int32 __kmpc_atomic_fixed4_add_cpt_fp(ident_t *id_ref, int gtid,1638                                          kmp_int32 *lhs, _Quad rhs, int flag);1639kmp_int32 __kmpc_atomic_fixed4_sub_cpt_fp(ident_t *id_ref, int gtid,1640                                          kmp_int32 *lhs, _Quad rhs, int flag);1641kmp_int32 __kmpc_atomic_fixed4_mul_cpt_fp(ident_t *id_ref, int gtid,1642                                          kmp_int32 *lhs, _Quad rhs, int flag);1643kmp_int32 __kmpc_atomic_fixed4_div_cpt_fp(ident_t *id_ref, int gtid,1644                                          kmp_int32 *lhs, _Quad rhs, int flag);1645kmp_uint32 __kmpc_atomic_fixed4u_add_cpt_fp(ident_t *id_ref, int gtid,1646                                            kmp_uint32 *lhs, _Quad rhs,1647                                            int flag);1648kmp_uint32 __kmpc_atomic_fixed4u_sub_cpt_fp(ident_t *id_ref, int gtid,1649                                            kmp_uint32 *lhs, _Quad rhs,1650                                            int flag);1651kmp_uint32 __kmpc_atomic_fixed4u_mul_cpt_fp(ident_t *id_ref, int gtid,1652                                            kmp_uint32 *lhs, _Quad rhs,1653                                            int flag);1654kmp_uint32 __kmpc_atomic_fixed4u_div_cpt_fp(ident_t *id_ref, int gtid,1655                                            kmp_uint32 *lhs, _Quad rhs,1656                                            int flag);1657 1658kmp_int64 __kmpc_atomic_fixed8_add_cpt_fp(ident_t *id_ref, int gtid,1659                                          kmp_int64 *lhs, _Quad rhs, int flag);1660kmp_int64 __kmpc_atomic_fixed8_sub_cpt_fp(ident_t *id_ref, int gtid,1661                                          kmp_int64 *lhs, _Quad rhs, int flag);1662kmp_int64 __kmpc_atomic_fixed8_mul_cpt_fp(ident_t *id_ref, int gtid,1663                                          kmp_int64 *lhs, _Quad rhs, int flag);1664kmp_int64 __kmpc_atomic_fixed8_div_cpt_fp(ident_t *id_ref, int gtid,1665                                          kmp_int64 *lhs, _Quad rhs, int flag);1666kmp_uint64 __kmpc_atomic_fixed8u_add_cpt_fp(ident_t *id_ref, int gtid,1667                                            kmp_uint64 *lhs, _Quad rhs,1668                                            int flag);1669kmp_uint64 __kmpc_atomic_fixed8u_sub_cpt_fp(ident_t *id_ref, int gtid,1670                                            kmp_uint64 *lhs, _Quad rhs,1671                                            int flag);1672kmp_uint64 __kmpc_atomic_fixed8u_mul_cpt_fp(ident_t *id_ref, int gtid,1673                                            kmp_uint64 *lhs, _Quad rhs,1674                                            int flag);1675kmp_uint64 __kmpc_atomic_fixed8u_div_cpt_fp(ident_t *id_ref, int gtid,1676                                            kmp_uint64 *lhs, _Quad rhs,1677                                            int flag);1678 1679float __kmpc_atomic_float4_add_cpt_fp(ident_t *id_ref, int gtid,1680                                      kmp_real32 *lhs, _Quad rhs, int flag);1681float __kmpc_atomic_float4_sub_cpt_fp(ident_t *id_ref, int gtid,1682                                      kmp_real32 *lhs, _Quad rhs, int flag);1683float __kmpc_atomic_float4_mul_cpt_fp(ident_t *id_ref, int gtid,1684                                      kmp_real32 *lhs, _Quad rhs, int flag);1685float __kmpc_atomic_float4_div_cpt_fp(ident_t *id_ref, int gtid,1686                                      kmp_real32 *lhs, _Quad rhs, int flag);1687 1688double __kmpc_atomic_float8_add_cpt_fp(ident_t *id_ref, int gtid,1689                                       kmp_real64 *lhs, _Quad rhs, int flag);1690double __kmpc_atomic_float8_sub_cpt_fp(ident_t *id_ref, int gtid,1691                                       kmp_real64 *lhs, _Quad rhs, int flag);1692double __kmpc_atomic_float8_mul_cpt_fp(ident_t *id_ref, int gtid,1693                                       kmp_real64 *lhs, _Quad rhs, int flag);1694double __kmpc_atomic_float8_div_cpt_fp(ident_t *id_ref, int gtid,1695                                       kmp_real64 *lhs, _Quad rhs, int flag);1696 1697long double __kmpc_atomic_float10_add_cpt_fp(ident_t *id_ref, int gtid,1698                                             long double *lhs, _Quad rhs,1699                                             int flag);1700long double __kmpc_atomic_float10_sub_cpt_fp(ident_t *id_ref, int gtid,1701                                             long double *lhs, _Quad rhs,1702                                             int flag);1703long double __kmpc_atomic_float10_mul_cpt_fp(ident_t *id_ref, int gtid,1704                                             long double *lhs, _Quad rhs,1705                                             int flag);1706long double __kmpc_atomic_float10_div_cpt_fp(ident_t *id_ref, int gtid,1707                                             long double *lhs, _Quad rhs,1708                                             int flag);1709 1710char __kmpc_atomic_fixed1_sub_cpt_rev_fp(ident_t *id_ref, int gtid, char *lhs,1711                                         _Quad rhs, int flag);1712unsigned char __kmpc_atomic_fixed1u_sub_cpt_rev_fp(ident_t *id_ref, int gtid,1713                                                   unsigned char *lhs,1714                                                   _Quad rhs, int flag);1715char __kmpc_atomic_fixed1_div_cpt_rev_fp(ident_t *id_ref, int gtid, char *lhs,1716                                         _Quad rhs, int flag);1717unsigned char __kmpc_atomic_fixed1u_div_cpt_rev_fp(ident_t *id_ref, int gtid,1718                                                   unsigned char *lhs,1719                                                   _Quad rhs, int flag);1720short __kmpc_atomic_fixed2_sub_cpt_rev_fp(ident_t *id_ref, int gtid, short *lhs,1721                                          _Quad rhs, int flag);1722unsigned short __kmpc_atomic_fixed2u_sub_cpt_rev_fp(ident_t *id_ref, int gtid,1723                                                    unsigned short *lhs,1724                                                    _Quad rhs, int flag);1725short __kmpc_atomic_fixed2_div_cpt_rev_fp(ident_t *id_ref, int gtid, short *lhs,1726                                          _Quad rhs, int flag);1727unsigned short __kmpc_atomic_fixed2u_div_cpt_rev_fp(ident_t *id_ref, int gtid,1728                                                    unsigned short *lhs,1729                                                    _Quad rhs, int flag);1730kmp_int32 __kmpc_atomic_fixed4_sub_cpt_rev_fp(ident_t *id_ref, int gtid,1731                                              kmp_int32 *lhs, _Quad rhs,1732                                              int flag);1733kmp_uint32 __kmpc_atomic_fixed4u_sub_cpt_rev_fp(ident_t *id_ref, int gtid,1734                                                kmp_uint32 *lhs, _Quad rhs,1735                                                int flag);1736kmp_int32 __kmpc_atomic_fixed4_div_cpt_rev_fp(ident_t *id_ref, int gtid,1737                                              kmp_int32 *lhs, _Quad rhs,1738                                              int flag);1739kmp_uint32 __kmpc_atomic_fixed4u_div_cpt_rev_fp(ident_t *id_ref, int gtid,1740                                                kmp_uint32 *lhs, _Quad rhs,1741                                                int flag);1742kmp_int64 __kmpc_atomic_fixed8_sub_cpt_rev_fp(ident_t *id_ref, int gtid,1743                                              kmp_int64 *lhs, _Quad rhs,1744                                              int flag);1745kmp_uint64 __kmpc_atomic_fixed8u_sub_cpt_rev_fp(ident_t *id_ref, int gtid,1746                                                kmp_uint64 *lhs, _Quad rhs,1747                                                int flag);1748kmp_int64 __kmpc_atomic_fixed8_div_cpt_rev_fp(ident_t *id_ref, int gtid,1749                                              kmp_int64 *lhs, _Quad rhs,1750                                              int flag);1751kmp_uint64 __kmpc_atomic_fixed8u_div_cpt_rev_fp(ident_t *id_ref, int gtid,1752                                                kmp_uint64 *lhs, _Quad rhs,1753                                                int flag);1754float __kmpc_atomic_float4_sub_cpt_rev_fp(ident_t *id_ref, int gtid, float *lhs,1755                                          _Quad rhs, int flag);1756float __kmpc_atomic_float4_div_cpt_rev_fp(ident_t *id_ref, int gtid, float *lhs,1757                                          _Quad rhs, int flag);1758double __kmpc_atomic_float8_sub_cpt_rev_fp(ident_t *id_ref, int gtid,1759                                           double *lhs, _Quad rhs, int flag);1760double __kmpc_atomic_float8_div_cpt_rev_fp(ident_t *id_ref, int gtid,1761                                           double *lhs, _Quad rhs, int flag);1762long double __kmpc_atomic_float10_sub_cpt_rev_fp(ident_t *id_ref, int gtid,1763                                                 long double *lhs, _Quad rhs,1764                                                 int flag);1765long double __kmpc_atomic_float10_div_cpt_rev_fp(ident_t *id_ref, int gtid,1766                                                 long double *lhs, _Quad rhs,1767                                                 int flag);1768 1769#endif // KMP_HAVE_QUAD1770 1771// End of OpenMP 4.0 capture1772 1773// OpenMP 5.1 compare and swap1774/*1775    __kmpc_atomic_bool_1_cas1776    __kmpc_atomic_bool_2_cas1777    __kmpc_atomic_bool_4_cas1778    __kmpc_atomic_bool_8_cas1779    __kmpc_atomic_val_1_cas1780    __kmpc_atomic_val_2_cas1781    __kmpc_atomic_val_4_cas1782    __kmpc_atomic_val_8_cas1783    __kmpc_atomic_bool_1_cas_cpt1784    __kmpc_atomic_bool_2_cas_cpt1785    __kmpc_atomic_bool_4_cas_cpt1786    __kmpc_atomic_bool_8_cas_cpt1787    __kmpc_atomic_val_1_cas_cpt1788    __kmpc_atomic_val_2_cas_cpt1789    __kmpc_atomic_val_4_cas_cpt1790    __kmpc_atomic_val_8_cas_cpt1791*/1792// In all interfaces of CAS (Compare And Swap):1793// r is the boolean result of comparison1794// x is memory location to operate on1795// e is expected (old) value1796// d is desired (new) value1797// pv is pointer to captured value v whose location may coincide with e1798 1799// { r = x == e; if(r) { x = d; } }1800// functions return result of comparison1801bool __kmpc_atomic_bool_1_cas(ident_t *loc, int gtid, char *x, char e, char d);1802bool __kmpc_atomic_bool_2_cas(ident_t *loc, int gtid, short *x, short e,1803                              short d);1804bool __kmpc_atomic_bool_4_cas(ident_t *loc, int gtid, kmp_int32 *x, kmp_int32 e,1805                              kmp_int32 d);1806bool __kmpc_atomic_bool_8_cas(ident_t *loc, int gtid, kmp_int64 *x, kmp_int64 e,1807                              kmp_int64 d);1808 1809// { v = x; if (x == e) { x = d; } }1810// functions return old value1811char __kmpc_atomic_val_1_cas(ident_t *loc, int gtid, char *x, char e, char d);1812short __kmpc_atomic_val_2_cas(ident_t *loc, int gtid, short *x, short e,1813                              short d);1814kmp_int32 __kmpc_atomic_val_4_cas(ident_t *loc, int gtid, kmp_int32 *x,1815                                  kmp_int32 e, kmp_int32 d);1816kmp_int64 __kmpc_atomic_val_8_cas(ident_t *loc, int gtid, kmp_int64 *x,1817                                  kmp_int64 e, kmp_int64 d);1818 1819// { r = x == e; if(r) { x = d; } else { v = x; } }1820// v gets old value if comparison failed, untouched otherwise1821// functions return result of comparison1822bool __kmpc_atomic_bool_1_cas_cpt(ident_t *loc, int gtid, char *x, char e,1823                                  char d, char *pv);1824bool __kmpc_atomic_bool_2_cas_cpt(ident_t *loc, int gtid, short *x, short e,1825                                  short d, short *pv);1826bool __kmpc_atomic_bool_4_cas_cpt(ident_t *loc, int gtid, kmp_int32 *x,1827                                  kmp_int32 e, kmp_int32 d, kmp_int32 *pv);1828bool __kmpc_atomic_bool_8_cas_cpt(ident_t *loc, int gtid, kmp_int64 *x,1829                                  kmp_int64 e, kmp_int64 d, kmp_int64 *pv);1830 1831// { if (x == e) { x = d; }; v = x; }1832// v gets old value if comparison failed, new value otherwise1833// functions return old value1834char __kmpc_atomic_val_1_cas_cpt(ident_t *loc, int gtid, char *x, char e,1835                                 char d, char *pv);1836short __kmpc_atomic_val_2_cas_cpt(ident_t *loc, int gtid, short *x, short e,1837                                  short d, short *pv);1838kmp_int32 __kmpc_atomic_val_4_cas_cpt(ident_t *loc, int gtid, kmp_int32 *x,1839                                      kmp_int32 e, kmp_int32 d, kmp_int32 *pv);1840kmp_int64 __kmpc_atomic_val_8_cas_cpt(ident_t *loc, int gtid, kmp_int64 *x,1841                                      kmp_int64 e, kmp_int64 d, kmp_int64 *pv);1842 1843// End OpenMP 5.1 compare + capture1844 1845#endif // KMP_ARCH_X86 || KMP_ARCH_X86_641846 1847/* ------------------------------------------------------------------------ */1848 1849#ifdef __cplusplus1850} // extern "C"1851#endif1852 1853#endif /* KMP_ATOMIC_H */1854 1855// end of file1856