123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857 |
- /*
- * kmp_atomic.h - ATOMIC header file
- */
- //===----------------------------------------------------------------------===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #ifndef KMP_ATOMIC_H
- #define KMP_ATOMIC_H
- #include "kmp_lock.h"
- #include "kmp_os.h"
- #if OMPT_SUPPORT
- #include "ompt-specific.h"
- #endif
- // C++ build port.
- // Intel compiler does not support _Complex datatype on win.
- // Intel compiler supports _Complex datatype on lin and mac.
- // On the other side, there is a problem of stack alignment on lin_32 and mac_32
- // if the rhs is cmplx80 or cmplx128 typedef'ed datatype.
- // The decision is: to use compiler supported _Complex type on lin and mac,
- // to use typedef'ed types on win.
- // Condition for WIN64 was modified in anticipation of 10.1 build compiler.
- #if defined(__cplusplus) && (KMP_OS_WINDOWS)
- // create shortcuts for c99 complex types
- // Visual Studio cannot have function parameters that have the
- // align __declspec attribute, so we must remove it. (Compiler Error C2719)
- #if KMP_COMPILER_MSVC
- #undef KMP_DO_ALIGN
- #define KMP_DO_ALIGN(alignment) /* Nothing */
- #endif
- #if defined(_MSC_VER) && (_MSC_VER < 1600) && defined(_DEBUG)
- // Workaround for the problem of _DebugHeapTag unresolved external.
- // This problem prevented to use our static debug library for C tests
- // compiled with /MDd option (the library itself built with /MTd),
- #undef _DEBUG
- #define _DEBUG_TEMPORARILY_UNSET_
- #endif
- #include <complex>
- template <typename type_lhs, typename type_rhs>
- std::complex<type_lhs> __kmp_lhs_div_rhs(const std::complex<type_lhs> &lhs,
- const std::complex<type_rhs> &rhs) {
- type_lhs a = lhs.real();
- type_lhs b = lhs.imag();
- type_rhs c = rhs.real();
- type_rhs d = rhs.imag();
- type_rhs den = c * c + d * d;
- type_rhs r = (a * c + b * d);
- type_rhs i = (b * c - a * d);
- std::complex<type_lhs> ret(r / den, i / den);
- return ret;
- }
- // complex8
- struct __kmp_cmplx64_t : std::complex<double> {
- __kmp_cmplx64_t() : std::complex<double>() {}
- __kmp_cmplx64_t(const std::complex<double> &cd) : std::complex<double>(cd) {}
- void operator/=(const __kmp_cmplx64_t &rhs) {
- std::complex<double> lhs = *this;
- *this = __kmp_lhs_div_rhs(lhs, rhs);
- }
- __kmp_cmplx64_t operator/(const __kmp_cmplx64_t &rhs) {
- std::complex<double> lhs = *this;
- return __kmp_lhs_div_rhs(lhs, rhs);
- }
- };
- typedef struct __kmp_cmplx64_t kmp_cmplx64;
- // complex4
- struct __kmp_cmplx32_t : std::complex<float> {
- __kmp_cmplx32_t() : std::complex<float>() {}
- __kmp_cmplx32_t(const std::complex<float> &cf) : std::complex<float>(cf) {}
- __kmp_cmplx32_t operator+(const __kmp_cmplx32_t &b) {
- std::complex<float> lhs = *this;
- std::complex<float> rhs = b;
- return (lhs + rhs);
- }
- __kmp_cmplx32_t operator-(const __kmp_cmplx32_t &b) {
- std::complex<float> lhs = *this;
- std::complex<float> rhs = b;
- return (lhs - rhs);
- }
- __kmp_cmplx32_t operator*(const __kmp_cmplx32_t &b) {
- std::complex<float> lhs = *this;
- std::complex<float> rhs = b;
- return (lhs * rhs);
- }
- __kmp_cmplx32_t operator+(const kmp_cmplx64 &b) {
- kmp_cmplx64 t = kmp_cmplx64(*this) + b;
- std::complex<double> d(t);
- std::complex<float> f(d);
- __kmp_cmplx32_t r(f);
- return r;
- }
- __kmp_cmplx32_t operator-(const kmp_cmplx64 &b) {
- kmp_cmplx64 t = kmp_cmplx64(*this) - b;
- std::complex<double> d(t);
- std::complex<float> f(d);
- __kmp_cmplx32_t r(f);
- return r;
- }
- __kmp_cmplx32_t operator*(const kmp_cmplx64 &b) {
- kmp_cmplx64 t = kmp_cmplx64(*this) * b;
- std::complex<double> d(t);
- std::complex<float> f(d);
- __kmp_cmplx32_t r(f);
- return r;
- }
- void operator/=(const __kmp_cmplx32_t &rhs) {
- std::complex<float> lhs = *this;
- *this = __kmp_lhs_div_rhs(lhs, rhs);
- }
- __kmp_cmplx32_t operator/(const __kmp_cmplx32_t &rhs) {
- std::complex<float> lhs = *this;
- return __kmp_lhs_div_rhs(lhs, rhs);
- }
- void operator/=(const kmp_cmplx64 &rhs) {
- std::complex<float> lhs = *this;
- *this = __kmp_lhs_div_rhs(lhs, rhs);
- }
- __kmp_cmplx32_t operator/(const kmp_cmplx64 &rhs) {
- std::complex<float> lhs = *this;
- return __kmp_lhs_div_rhs(lhs, rhs);
- }
- };
- typedef struct __kmp_cmplx32_t kmp_cmplx32;
- // complex10
- struct KMP_DO_ALIGN(16) __kmp_cmplx80_t : std::complex<long double> {
- __kmp_cmplx80_t() : std::complex<long double>() {}
- __kmp_cmplx80_t(const std::complex<long double> &cld)
- : std::complex<long double>(cld) {}
- void operator/=(const __kmp_cmplx80_t &rhs) {
- std::complex<long double> lhs = *this;
- *this = __kmp_lhs_div_rhs(lhs, rhs);
- }
- __kmp_cmplx80_t operator/(const __kmp_cmplx80_t &rhs) {
- std::complex<long double> lhs = *this;
- return __kmp_lhs_div_rhs(lhs, rhs);
- }
- };
- typedef KMP_DO_ALIGN(16) struct __kmp_cmplx80_t kmp_cmplx80;
- // complex16
- #if KMP_HAVE_QUAD
- struct __kmp_cmplx128_t : std::complex<_Quad> {
- __kmp_cmplx128_t() : std::complex<_Quad>() {}
- __kmp_cmplx128_t(const std::complex<_Quad> &cq) : std::complex<_Quad>(cq) {}
- void operator/=(const __kmp_cmplx128_t &rhs) {
- std::complex<_Quad> lhs = *this;
- *this = __kmp_lhs_div_rhs(lhs, rhs);
- }
- __kmp_cmplx128_t operator/(const __kmp_cmplx128_t &rhs) {
- std::complex<_Quad> lhs = *this;
- return __kmp_lhs_div_rhs(lhs, rhs);
- }
- };
- typedef struct __kmp_cmplx128_t kmp_cmplx128;
- #endif /* KMP_HAVE_QUAD */
- #ifdef _DEBUG_TEMPORARILY_UNSET_
- #undef _DEBUG_TEMPORARILY_UNSET_
- // Set it back now
- #define _DEBUG 1
- #endif
- #else
- // create shortcuts for c99 complex types
- typedef float _Complex kmp_cmplx32;
- typedef double _Complex kmp_cmplx64;
- typedef long double _Complex kmp_cmplx80;
- #if KMP_HAVE_QUAD
- typedef _Quad _Complex kmp_cmplx128;
- #endif
- #endif
- // Compiler 12.0 changed alignment of 16 and 32-byte arguments (like _Quad
- // and kmp_cmplx128) on IA-32 architecture. The following aligned structures
- // are implemented to support the old alignment in 10.1, 11.0, 11.1 and
- // introduce the new alignment in 12.0. See CQ88405.
- #if KMP_ARCH_X86 && KMP_HAVE_QUAD
- // 4-byte aligned structures for backward compatibility.
- #pragma pack(push, 4)
- struct KMP_DO_ALIGN(4) Quad_a4_t {
- _Quad q;
- Quad_a4_t() : q() {}
- Quad_a4_t(const _Quad &cq) : q(cq) {}
- Quad_a4_t operator+(const Quad_a4_t &b) {
- _Quad lhs = (*this).q;
- _Quad rhs = b.q;
- return (Quad_a4_t)(lhs + rhs);
- }
- Quad_a4_t operator-(const Quad_a4_t &b) {
- _Quad lhs = (*this).q;
- _Quad rhs = b.q;
- return (Quad_a4_t)(lhs - rhs);
- }
- Quad_a4_t operator*(const Quad_a4_t &b) {
- _Quad lhs = (*this).q;
- _Quad rhs = b.q;
- return (Quad_a4_t)(lhs * rhs);
- }
- Quad_a4_t operator/(const Quad_a4_t &b) {
- _Quad lhs = (*this).q;
- _Quad rhs = b.q;
- return (Quad_a4_t)(lhs / rhs);
- }
- };
- struct KMP_DO_ALIGN(4) kmp_cmplx128_a4_t {
- kmp_cmplx128 q;
- kmp_cmplx128_a4_t() : q() {}
- #if defined(__cplusplus) && (KMP_OS_WINDOWS)
- kmp_cmplx128_a4_t(const std::complex<_Quad> &c128) : q(c128) {}
- #endif
- kmp_cmplx128_a4_t(const kmp_cmplx128 &c128) : q(c128) {}
- kmp_cmplx128_a4_t operator+(const kmp_cmplx128_a4_t &b) {
- kmp_cmplx128 lhs = (*this).q;
- kmp_cmplx128 rhs = b.q;
- return (kmp_cmplx128_a4_t)(lhs + rhs);
- }
- kmp_cmplx128_a4_t operator-(const kmp_cmplx128_a4_t &b) {
- kmp_cmplx128 lhs = (*this).q;
- kmp_cmplx128 rhs = b.q;
- return (kmp_cmplx128_a4_t)(lhs - rhs);
- }
- kmp_cmplx128_a4_t operator*(const kmp_cmplx128_a4_t &b) {
- kmp_cmplx128 lhs = (*this).q;
- kmp_cmplx128 rhs = b.q;
- return (kmp_cmplx128_a4_t)(lhs * rhs);
- }
- kmp_cmplx128_a4_t operator/(const kmp_cmplx128_a4_t &b) {
- kmp_cmplx128 lhs = (*this).q;
- kmp_cmplx128 rhs = b.q;
- return (kmp_cmplx128_a4_t)(lhs / rhs);
- }
- };
- #pragma pack(pop)
- // New 16-byte aligned structures for 12.0 compiler.
- struct KMP_DO_ALIGN(16) Quad_a16_t {
- _Quad q;
- Quad_a16_t() : q() {}
- Quad_a16_t(const _Quad &cq) : q(cq) {}
- Quad_a16_t operator+(const Quad_a16_t &b) {
- _Quad lhs = (*this).q;
- _Quad rhs = b.q;
- return (Quad_a16_t)(lhs + rhs);
- }
- Quad_a16_t operator-(const Quad_a16_t &b) {
- _Quad lhs = (*this).q;
- _Quad rhs = b.q;
- return (Quad_a16_t)(lhs - rhs);
- }
- Quad_a16_t operator*(const Quad_a16_t &b) {
- _Quad lhs = (*this).q;
- _Quad rhs = b.q;
- return (Quad_a16_t)(lhs * rhs);
- }
- Quad_a16_t operator/(const Quad_a16_t &b) {
- _Quad lhs = (*this).q;
- _Quad rhs = b.q;
- return (Quad_a16_t)(lhs / rhs);
- }
- };
- struct KMP_DO_ALIGN(16) kmp_cmplx128_a16_t {
- kmp_cmplx128 q;
- kmp_cmplx128_a16_t() : q() {}
- #if defined(__cplusplus) && (KMP_OS_WINDOWS)
- kmp_cmplx128_a16_t(const std::complex<_Quad> &c128) : q(c128) {}
- #endif
- kmp_cmplx128_a16_t(const kmp_cmplx128 &c128) : q(c128) {}
- kmp_cmplx128_a16_t operator+(const kmp_cmplx128_a16_t &b) {
- kmp_cmplx128 lhs = (*this).q;
- kmp_cmplx128 rhs = b.q;
- return (kmp_cmplx128_a16_t)(lhs + rhs);
- }
- kmp_cmplx128_a16_t operator-(const kmp_cmplx128_a16_t &b) {
- kmp_cmplx128 lhs = (*this).q;
- kmp_cmplx128 rhs = b.q;
- return (kmp_cmplx128_a16_t)(lhs - rhs);
- }
- kmp_cmplx128_a16_t operator*(const kmp_cmplx128_a16_t &b) {
- kmp_cmplx128 lhs = (*this).q;
- kmp_cmplx128 rhs = b.q;
- return (kmp_cmplx128_a16_t)(lhs * rhs);
- }
- kmp_cmplx128_a16_t operator/(const kmp_cmplx128_a16_t &b) {
- kmp_cmplx128 lhs = (*this).q;
- kmp_cmplx128 rhs = b.q;
- return (kmp_cmplx128_a16_t)(lhs / rhs);
- }
- };
- #endif
- #if (KMP_ARCH_X86)
- #define QUAD_LEGACY Quad_a4_t
- #define CPLX128_LEG kmp_cmplx128_a4_t
- #else
- #define QUAD_LEGACY _Quad
- #define CPLX128_LEG kmp_cmplx128
- #endif
- #ifdef __cplusplus
- extern "C" {
- #endif
- extern int __kmp_atomic_mode;
- // Atomic locks can easily become contended, so we use queuing locks for them.
- typedef kmp_queuing_lock_t kmp_atomic_lock_t;
- static inline void __kmp_acquire_atomic_lock(kmp_atomic_lock_t *lck,
- kmp_int32 gtid) {
- #if OMPT_SUPPORT && OMPT_OPTIONAL
- if (ompt_enabled.ompt_callback_mutex_acquire) {
- ompt_callbacks.ompt_callback(ompt_callback_mutex_acquire)(
- ompt_mutex_atomic, 0, kmp_mutex_impl_queuing,
- (ompt_wait_id_t)(uintptr_t)lck, OMPT_GET_RETURN_ADDRESS(0));
- }
- #endif
- __kmp_acquire_queuing_lock(lck, gtid);
- #if OMPT_SUPPORT && OMPT_OPTIONAL
- if (ompt_enabled.ompt_callback_mutex_acquired) {
- ompt_callbacks.ompt_callback(ompt_callback_mutex_acquired)(
- ompt_mutex_atomic, (ompt_wait_id_t)(uintptr_t)lck,
- OMPT_GET_RETURN_ADDRESS(0));
- }
- #endif
- }
- static inline int __kmp_test_atomic_lock(kmp_atomic_lock_t *lck,
- kmp_int32 gtid) {
- return __kmp_test_queuing_lock(lck, gtid);
- }
- static inline void __kmp_release_atomic_lock(kmp_atomic_lock_t *lck,
- kmp_int32 gtid) {
- __kmp_release_queuing_lock(lck, gtid);
- #if OMPT_SUPPORT && OMPT_OPTIONAL
- if (ompt_enabled.ompt_callback_mutex_released) {
- ompt_callbacks.ompt_callback(ompt_callback_mutex_released)(
- ompt_mutex_atomic, (ompt_wait_id_t)(uintptr_t)lck,
- OMPT_GET_RETURN_ADDRESS(0));
- }
- #endif
- }
- static inline void __kmp_init_atomic_lock(kmp_atomic_lock_t *lck) {
- __kmp_init_queuing_lock(lck);
- }
- static inline void __kmp_destroy_atomic_lock(kmp_atomic_lock_t *lck) {
- __kmp_destroy_queuing_lock(lck);
- }
- // Global Locks
- extern kmp_atomic_lock_t __kmp_atomic_lock; /* Control access to all user coded
- atomics in Gnu compat mode */
- extern kmp_atomic_lock_t __kmp_atomic_lock_1i; /* Control access to all user
- coded atomics for 1-byte fixed
- data types */
- extern kmp_atomic_lock_t __kmp_atomic_lock_2i; /* Control access to all user
- coded atomics for 2-byte fixed
- data types */
- extern kmp_atomic_lock_t __kmp_atomic_lock_4i; /* Control access to all user
- coded atomics for 4-byte fixed
- data types */
- extern kmp_atomic_lock_t __kmp_atomic_lock_4r; /* Control access to all user
- coded atomics for kmp_real32
- data type */
- extern kmp_atomic_lock_t __kmp_atomic_lock_8i; /* Control access to all user
- coded atomics for 8-byte fixed
- data types */
- extern kmp_atomic_lock_t __kmp_atomic_lock_8r; /* Control access to all user
- coded atomics for kmp_real64
- data type */
- extern kmp_atomic_lock_t
- __kmp_atomic_lock_8c; /* Control access to all user coded atomics for
- complex byte data type */
- extern kmp_atomic_lock_t
- __kmp_atomic_lock_10r; /* Control access to all user coded atomics for long
- double data type */
- extern kmp_atomic_lock_t __kmp_atomic_lock_16r; /* Control access to all user
- coded atomics for _Quad data
- type */
- extern kmp_atomic_lock_t __kmp_atomic_lock_16c; /* Control access to all user
- coded atomics for double
- complex data type*/
- extern kmp_atomic_lock_t
- __kmp_atomic_lock_20c; /* Control access to all user coded atomics for long
- double complex type*/
- extern kmp_atomic_lock_t __kmp_atomic_lock_32c; /* Control access to all user
- coded atomics for _Quad
- complex data type */
- // Below routines for atomic UPDATE are listed
- // 1-byte
- void __kmpc_atomic_fixed1_add(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed1_andb(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed1_div(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed1u_div(ident_t *id_ref, int gtid, unsigned char *lhs,
- unsigned char rhs);
- void __kmpc_atomic_fixed1_mul(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed1_orb(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed1_shl(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed1_shr(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed1u_shr(ident_t *id_ref, int gtid, unsigned char *lhs,
- unsigned char rhs);
- void __kmpc_atomic_fixed1_sub(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed1_xor(ident_t *id_ref, int gtid, char *lhs, char rhs);
- // 2-byte
- void __kmpc_atomic_fixed2_add(ident_t *id_ref, int gtid, short *lhs, short rhs);
- void __kmpc_atomic_fixed2_andb(ident_t *id_ref, int gtid, short *lhs,
- short rhs);
- void __kmpc_atomic_fixed2_div(ident_t *id_ref, int gtid, short *lhs, short rhs);
- void __kmpc_atomic_fixed2u_div(ident_t *id_ref, int gtid, unsigned short *lhs,
- unsigned short rhs);
- void __kmpc_atomic_fixed2_mul(ident_t *id_ref, int gtid, short *lhs, short rhs);
- void __kmpc_atomic_fixed2_orb(ident_t *id_ref, int gtid, short *lhs, short rhs);
- void __kmpc_atomic_fixed2_shl(ident_t *id_ref, int gtid, short *lhs, short rhs);
- void __kmpc_atomic_fixed2_shr(ident_t *id_ref, int gtid, short *lhs, short rhs);
- void __kmpc_atomic_fixed2u_shr(ident_t *id_ref, int gtid, unsigned short *lhs,
- unsigned short rhs);
- void __kmpc_atomic_fixed2_sub(ident_t *id_ref, int gtid, short *lhs, short rhs);
- void __kmpc_atomic_fixed2_xor(ident_t *id_ref, int gtid, short *lhs, short rhs);
- // 4-byte add / sub fixed
- void __kmpc_atomic_fixed4_add(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed4_sub(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- // 4-byte add / sub float
- void __kmpc_atomic_float4_add(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- kmp_real32 rhs);
- void __kmpc_atomic_float4_sub(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- kmp_real32 rhs);
- // 8-byte add / sub fixed
- void __kmpc_atomic_fixed8_add(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_fixed8_sub(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- // 8-byte add / sub float
- void __kmpc_atomic_float8_add(ident_t *id_ref, int gtid, kmp_real64 *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_float8_sub(ident_t *id_ref, int gtid, kmp_real64 *lhs,
- kmp_real64 rhs);
- // 4-byte fixed
- void __kmpc_atomic_fixed4_andb(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed4_div(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed4u_div(ident_t *id_ref, int gtid, kmp_uint32 *lhs,
- kmp_uint32 rhs);
- void __kmpc_atomic_fixed4_mul(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed4_orb(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed4_shl(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed4_shr(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed4u_shr(ident_t *id_ref, int gtid, kmp_uint32 *lhs,
- kmp_uint32 rhs);
- void __kmpc_atomic_fixed4_xor(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- // 8-byte fixed
- void __kmpc_atomic_fixed8_andb(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_fixed8_div(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_fixed8u_div(ident_t *id_ref, int gtid, kmp_uint64 *lhs,
- kmp_uint64 rhs);
- void __kmpc_atomic_fixed8_mul(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_fixed8_orb(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_fixed8_shl(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_fixed8_shr(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_fixed8u_shr(ident_t *id_ref, int gtid, kmp_uint64 *lhs,
- kmp_uint64 rhs);
- void __kmpc_atomic_fixed8_xor(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- // 4-byte float
- void __kmpc_atomic_float4_div(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- kmp_real32 rhs);
- void __kmpc_atomic_float4_mul(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- kmp_real32 rhs);
- // 8-byte float
- void __kmpc_atomic_float8_div(ident_t *id_ref, int gtid, kmp_real64 *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_float8_mul(ident_t *id_ref, int gtid, kmp_real64 *lhs,
- kmp_real64 rhs);
- // 1-, 2-, 4-, 8-byte logical (&&, ||)
- void __kmpc_atomic_fixed1_andl(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed1_orl(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed2_andl(ident_t *id_ref, int gtid, short *lhs,
- short rhs);
- void __kmpc_atomic_fixed2_orl(ident_t *id_ref, int gtid, short *lhs, short rhs);
- void __kmpc_atomic_fixed4_andl(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed4_orl(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed8_andl(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_fixed8_orl(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- // MIN / MAX
- void __kmpc_atomic_fixed1_max(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed1_min(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed2_max(ident_t *id_ref, int gtid, short *lhs, short rhs);
- void __kmpc_atomic_fixed2_min(ident_t *id_ref, int gtid, short *lhs, short rhs);
- void __kmpc_atomic_fixed4_max(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed4_min(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed8_max(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_fixed8_min(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_float4_max(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- kmp_real32 rhs);
- void __kmpc_atomic_float4_min(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- kmp_real32 rhs);
- void __kmpc_atomic_float8_max(ident_t *id_ref, int gtid, kmp_real64 *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_float8_min(ident_t *id_ref, int gtid, kmp_real64 *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_float10_max(ident_t *id_ref, int gtid, long double *lhs,
- long double rhs);
- void __kmpc_atomic_float10_min(ident_t *id_ref, int gtid, long double *lhs,
- long double rhs);
- #if KMP_HAVE_QUAD
- void __kmpc_atomic_float16_max(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,
- QUAD_LEGACY rhs);
- void __kmpc_atomic_float16_min(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,
- QUAD_LEGACY rhs);
- #if (KMP_ARCH_X86)
- // Routines with 16-byte arguments aligned to 16-byte boundary; IA-32
- // architecture only
- void __kmpc_atomic_float16_max_a16(ident_t *id_ref, int gtid, Quad_a16_t *lhs,
- Quad_a16_t rhs);
- void __kmpc_atomic_float16_min_a16(ident_t *id_ref, int gtid, Quad_a16_t *lhs,
- Quad_a16_t rhs);
- #endif
- #endif
- // .NEQV. (same as xor)
- void __kmpc_atomic_fixed1_neqv(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed2_neqv(ident_t *id_ref, int gtid, short *lhs,
- short rhs);
- void __kmpc_atomic_fixed4_neqv(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed8_neqv(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- // .EQV. (same as ~xor)
- void __kmpc_atomic_fixed1_eqv(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed2_eqv(ident_t *id_ref, int gtid, short *lhs, short rhs);
- void __kmpc_atomic_fixed4_eqv(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed8_eqv(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- // long double type
- void __kmpc_atomic_float10_add(ident_t *id_ref, int gtid, long double *lhs,
- long double rhs);
- void __kmpc_atomic_float10_sub(ident_t *id_ref, int gtid, long double *lhs,
- long double rhs);
- void __kmpc_atomic_float10_mul(ident_t *id_ref, int gtid, long double *lhs,
- long double rhs);
- void __kmpc_atomic_float10_div(ident_t *id_ref, int gtid, long double *lhs,
- long double rhs);
- // _Quad type
- #if KMP_HAVE_QUAD
- void __kmpc_atomic_float16_add(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,
- QUAD_LEGACY rhs);
- void __kmpc_atomic_float16_sub(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,
- QUAD_LEGACY rhs);
- void __kmpc_atomic_float16_mul(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,
- QUAD_LEGACY rhs);
- void __kmpc_atomic_float16_div(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,
- QUAD_LEGACY rhs);
- #if (KMP_ARCH_X86)
- // Routines with 16-byte arguments aligned to 16-byte boundary
- void __kmpc_atomic_float16_add_a16(ident_t *id_ref, int gtid, Quad_a16_t *lhs,
- Quad_a16_t rhs);
- void __kmpc_atomic_float16_sub_a16(ident_t *id_ref, int gtid, Quad_a16_t *lhs,
- Quad_a16_t rhs);
- void __kmpc_atomic_float16_mul_a16(ident_t *id_ref, int gtid, Quad_a16_t *lhs,
- Quad_a16_t rhs);
- void __kmpc_atomic_float16_div_a16(ident_t *id_ref, int gtid, Quad_a16_t *lhs,
- Quad_a16_t rhs);
- #endif
- #endif
- // routines for complex types
- void __kmpc_atomic_cmplx4_add(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,
- kmp_cmplx32 rhs);
- void __kmpc_atomic_cmplx4_sub(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,
- kmp_cmplx32 rhs);
- void __kmpc_atomic_cmplx4_mul(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,
- kmp_cmplx32 rhs);
- void __kmpc_atomic_cmplx4_div(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,
- kmp_cmplx32 rhs);
- void __kmpc_atomic_cmplx8_add(ident_t *id_ref, int gtid, kmp_cmplx64 *lhs,
- kmp_cmplx64 rhs);
- void __kmpc_atomic_cmplx8_sub(ident_t *id_ref, int gtid, kmp_cmplx64 *lhs,
- kmp_cmplx64 rhs);
- void __kmpc_atomic_cmplx8_mul(ident_t *id_ref, int gtid, kmp_cmplx64 *lhs,
- kmp_cmplx64 rhs);
- void __kmpc_atomic_cmplx8_div(ident_t *id_ref, int gtid, kmp_cmplx64 *lhs,
- kmp_cmplx64 rhs);
- void __kmpc_atomic_cmplx10_add(ident_t *id_ref, int gtid, kmp_cmplx80 *lhs,
- kmp_cmplx80 rhs);
- void __kmpc_atomic_cmplx10_sub(ident_t *id_ref, int gtid, kmp_cmplx80 *lhs,
- kmp_cmplx80 rhs);
- void __kmpc_atomic_cmplx10_mul(ident_t *id_ref, int gtid, kmp_cmplx80 *lhs,
- kmp_cmplx80 rhs);
- void __kmpc_atomic_cmplx10_div(ident_t *id_ref, int gtid, kmp_cmplx80 *lhs,
- kmp_cmplx80 rhs);
- #if KMP_HAVE_QUAD
- void __kmpc_atomic_cmplx16_add(ident_t *id_ref, int gtid, CPLX128_LEG *lhs,
- CPLX128_LEG rhs);
- void __kmpc_atomic_cmplx16_sub(ident_t *id_ref, int gtid, CPLX128_LEG *lhs,
- CPLX128_LEG rhs);
- void __kmpc_atomic_cmplx16_mul(ident_t *id_ref, int gtid, CPLX128_LEG *lhs,
- CPLX128_LEG rhs);
- void __kmpc_atomic_cmplx16_div(ident_t *id_ref, int gtid, CPLX128_LEG *lhs,
- CPLX128_LEG rhs);
- #if (KMP_ARCH_X86)
- // Routines with 16-byte arguments aligned to 16-byte boundary
- void __kmpc_atomic_cmplx16_add_a16(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *lhs,
- kmp_cmplx128_a16_t rhs);
- void __kmpc_atomic_cmplx16_sub_a16(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *lhs,
- kmp_cmplx128_a16_t rhs);
- void __kmpc_atomic_cmplx16_mul_a16(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *lhs,
- kmp_cmplx128_a16_t rhs);
- void __kmpc_atomic_cmplx16_div_a16(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *lhs,
- kmp_cmplx128_a16_t rhs);
- #endif
- #endif
- // OpenMP 4.0: x = expr binop x for non-commutative operations.
- // Supported only on IA-32 architecture and Intel(R) 64
- #if KMP_ARCH_X86 || KMP_ARCH_X86_64
- void __kmpc_atomic_fixed1_sub_rev(ident_t *id_ref, int gtid, char *lhs,
- char rhs);
- void __kmpc_atomic_fixed1_div_rev(ident_t *id_ref, int gtid, char *lhs,
- char rhs);
- void __kmpc_atomic_fixed1u_div_rev(ident_t *id_ref, int gtid,
- unsigned char *lhs, unsigned char rhs);
- void __kmpc_atomic_fixed1_shl_rev(ident_t *id_ref, int gtid, char *lhs,
- char rhs);
- void __kmpc_atomic_fixed1_shr_rev(ident_t *id_ref, int gtid, char *lhs,
- char rhs);
- void __kmpc_atomic_fixed1u_shr_rev(ident_t *id_ref, int gtid,
- unsigned char *lhs, unsigned char rhs);
- void __kmpc_atomic_fixed2_sub_rev(ident_t *id_ref, int gtid, short *lhs,
- short rhs);
- void __kmpc_atomic_fixed2_div_rev(ident_t *id_ref, int gtid, short *lhs,
- short rhs);
- void __kmpc_atomic_fixed2u_div_rev(ident_t *id_ref, int gtid,
- unsigned short *lhs, unsigned short rhs);
- void __kmpc_atomic_fixed2_shl_rev(ident_t *id_ref, int gtid, short *lhs,
- short rhs);
- void __kmpc_atomic_fixed2_shr_rev(ident_t *id_ref, int gtid, short *lhs,
- short rhs);
- void __kmpc_atomic_fixed2u_shr_rev(ident_t *id_ref, int gtid,
- unsigned short *lhs, unsigned short rhs);
- void __kmpc_atomic_fixed4_sub_rev(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed4_div_rev(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed4u_div_rev(ident_t *id_ref, int gtid, kmp_uint32 *lhs,
- kmp_uint32 rhs);
- void __kmpc_atomic_fixed4_shl_rev(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed4_shr_rev(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed4u_shr_rev(ident_t *id_ref, int gtid, kmp_uint32 *lhs,
- kmp_uint32 rhs);
- void __kmpc_atomic_fixed8_sub_rev(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_fixed8_div_rev(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_fixed8u_div_rev(ident_t *id_ref, int gtid, kmp_uint64 *lhs,
- kmp_uint64 rhs);
- void __kmpc_atomic_fixed8_shl_rev(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_fixed8_shr_rev(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_fixed8u_shr_rev(ident_t *id_ref, int gtid, kmp_uint64 *lhs,
- kmp_uint64 rhs);
- void __kmpc_atomic_float4_sub_rev(ident_t *id_ref, int gtid, float *lhs,
- float rhs);
- void __kmpc_atomic_float4_div_rev(ident_t *id_ref, int gtid, float *lhs,
- float rhs);
- void __kmpc_atomic_float8_sub_rev(ident_t *id_ref, int gtid, double *lhs,
- double rhs);
- void __kmpc_atomic_float8_div_rev(ident_t *id_ref, int gtid, double *lhs,
- double rhs);
- void __kmpc_atomic_float10_sub_rev(ident_t *id_ref, int gtid, long double *lhs,
- long double rhs);
- void __kmpc_atomic_float10_div_rev(ident_t *id_ref, int gtid, long double *lhs,
- long double rhs);
- #if KMP_HAVE_QUAD
- void __kmpc_atomic_float16_sub_rev(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,
- QUAD_LEGACY rhs);
- void __kmpc_atomic_float16_div_rev(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,
- QUAD_LEGACY rhs);
- #endif
- void __kmpc_atomic_cmplx4_sub_rev(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,
- kmp_cmplx32 rhs);
- void __kmpc_atomic_cmplx4_div_rev(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,
- kmp_cmplx32 rhs);
- void __kmpc_atomic_cmplx8_sub_rev(ident_t *id_ref, int gtid, kmp_cmplx64 *lhs,
- kmp_cmplx64 rhs);
- void __kmpc_atomic_cmplx8_div_rev(ident_t *id_ref, int gtid, kmp_cmplx64 *lhs,
- kmp_cmplx64 rhs);
- void __kmpc_atomic_cmplx10_sub_rev(ident_t *id_ref, int gtid, kmp_cmplx80 *lhs,
- kmp_cmplx80 rhs);
- void __kmpc_atomic_cmplx10_div_rev(ident_t *id_ref, int gtid, kmp_cmplx80 *lhs,
- kmp_cmplx80 rhs);
- #if KMP_HAVE_QUAD
- void __kmpc_atomic_cmplx16_sub_rev(ident_t *id_ref, int gtid, CPLX128_LEG *lhs,
- CPLX128_LEG rhs);
- void __kmpc_atomic_cmplx16_div_rev(ident_t *id_ref, int gtid, CPLX128_LEG *lhs,
- CPLX128_LEG rhs);
- #if (KMP_ARCH_X86)
- // Routines with 16-byte arguments aligned to 16-byte boundary
- void __kmpc_atomic_float16_sub_a16_rev(ident_t *id_ref, int gtid,
- Quad_a16_t *lhs, Quad_a16_t rhs);
- void __kmpc_atomic_float16_div_a16_rev(ident_t *id_ref, int gtid,
- Quad_a16_t *lhs, Quad_a16_t rhs);
- void __kmpc_atomic_cmplx16_sub_a16_rev(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *lhs,
- kmp_cmplx128_a16_t rhs);
- void __kmpc_atomic_cmplx16_div_a16_rev(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *lhs,
- kmp_cmplx128_a16_t rhs);
- #endif
- #endif // KMP_HAVE_QUAD
- #endif // KMP_ARCH_X86 || KMP_ARCH_X86_64
- // routines for mixed types
- // RHS=float8
- void __kmpc_atomic_fixed1_mul_float8(ident_t *id_ref, int gtid, char *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_fixed1_div_float8(ident_t *id_ref, int gtid, char *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_fixed2_mul_float8(ident_t *id_ref, int gtid, short *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_fixed2_div_float8(ident_t *id_ref, int gtid, short *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_fixed4_mul_float8(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_fixed4_div_float8(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_fixed8_mul_float8(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_fixed8_div_float8(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_float4_add_float8(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_float4_sub_float8(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_float4_mul_float8(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_float4_div_float8(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- kmp_real64 rhs);
- // RHS=float16 (deprecated, to be removed when we are sure the compiler does not
- // use them)
- #if KMP_HAVE_QUAD
- void __kmpc_atomic_fixed1_add_fp(ident_t *id_ref, int gtid, char *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed1u_add_fp(ident_t *id_ref, int gtid, unsigned char *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed1_sub_fp(ident_t *id_ref, int gtid, char *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed1u_sub_fp(ident_t *id_ref, int gtid, unsigned char *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed1_mul_fp(ident_t *id_ref, int gtid, char *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed1u_mul_fp(ident_t *id_ref, int gtid, unsigned char *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed1_div_fp(ident_t *id_ref, int gtid, char *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed1u_div_fp(ident_t *id_ref, int gtid, unsigned char *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed2_add_fp(ident_t *id_ref, int gtid, short *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed2u_add_fp(ident_t *id_ref, int gtid,
- unsigned short *lhs, _Quad rhs);
- void __kmpc_atomic_fixed2_sub_fp(ident_t *id_ref, int gtid, short *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed2u_sub_fp(ident_t *id_ref, int gtid,
- unsigned short *lhs, _Quad rhs);
- void __kmpc_atomic_fixed2_mul_fp(ident_t *id_ref, int gtid, short *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed2u_mul_fp(ident_t *id_ref, int gtid,
- unsigned short *lhs, _Quad rhs);
- void __kmpc_atomic_fixed2_div_fp(ident_t *id_ref, int gtid, short *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed2u_div_fp(ident_t *id_ref, int gtid,
- unsigned short *lhs, _Quad rhs);
- void __kmpc_atomic_fixed4_add_fp(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed4u_add_fp(ident_t *id_ref, int gtid, kmp_uint32 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed4_sub_fp(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed4u_sub_fp(ident_t *id_ref, int gtid, kmp_uint32 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed4_mul_fp(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed4u_mul_fp(ident_t *id_ref, int gtid, kmp_uint32 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed4_div_fp(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed4u_div_fp(ident_t *id_ref, int gtid, kmp_uint32 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed8_add_fp(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed8u_add_fp(ident_t *id_ref, int gtid, kmp_uint64 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed8_sub_fp(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed8u_sub_fp(ident_t *id_ref, int gtid, kmp_uint64 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed8_mul_fp(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed8u_mul_fp(ident_t *id_ref, int gtid, kmp_uint64 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed8_div_fp(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed8u_div_fp(ident_t *id_ref, int gtid, kmp_uint64 *lhs,
- _Quad rhs);
- void __kmpc_atomic_float4_add_fp(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- _Quad rhs);
- void __kmpc_atomic_float4_sub_fp(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- _Quad rhs);
- void __kmpc_atomic_float4_mul_fp(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- _Quad rhs);
- void __kmpc_atomic_float4_div_fp(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- _Quad rhs);
- void __kmpc_atomic_float8_add_fp(ident_t *id_ref, int gtid, kmp_real64 *lhs,
- _Quad rhs);
- void __kmpc_atomic_float8_sub_fp(ident_t *id_ref, int gtid, kmp_real64 *lhs,
- _Quad rhs);
- void __kmpc_atomic_float8_mul_fp(ident_t *id_ref, int gtid, kmp_real64 *lhs,
- _Quad rhs);
- void __kmpc_atomic_float8_div_fp(ident_t *id_ref, int gtid, kmp_real64 *lhs,
- _Quad rhs);
- void __kmpc_atomic_float10_add_fp(ident_t *id_ref, int gtid, long double *lhs,
- _Quad rhs);
- void __kmpc_atomic_float10_sub_fp(ident_t *id_ref, int gtid, long double *lhs,
- _Quad rhs);
- void __kmpc_atomic_float10_mul_fp(ident_t *id_ref, int gtid, long double *lhs,
- _Quad rhs);
- void __kmpc_atomic_float10_div_fp(ident_t *id_ref, int gtid, long double *lhs,
- _Quad rhs);
- // Reverse operations
- void __kmpc_atomic_fixed1_sub_rev_fp(ident_t *id_ref, int gtid, char *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed1u_sub_rev_fp(ident_t *id_ref, int gtid,
- unsigned char *lhs, _Quad rhs);
- void __kmpc_atomic_fixed1_div_rev_fp(ident_t *id_ref, int gtid, char *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed1u_div_rev_fp(ident_t *id_ref, int gtid,
- unsigned char *lhs, _Quad rhs);
- void __kmpc_atomic_fixed2_sub_rev_fp(ident_t *id_ref, int gtid, short *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed2u_sub_rev_fp(ident_t *id_ref, int gtid,
- unsigned short *lhs, _Quad rhs);
- void __kmpc_atomic_fixed2_div_rev_fp(ident_t *id_ref, int gtid, short *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed2u_div_rev_fp(ident_t *id_ref, int gtid,
- unsigned short *lhs, _Quad rhs);
- void __kmpc_atomic_fixed4_sub_rev_fp(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed4u_sub_rev_fp(ident_t *id_ref, int gtid,
- kmp_uint32 *lhs, _Quad rhs);
- void __kmpc_atomic_fixed4_div_rev_fp(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed4u_div_rev_fp(ident_t *id_ref, int gtid,
- kmp_uint32 *lhs, _Quad rhs);
- void __kmpc_atomic_fixed8_sub_rev_fp(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed8u_sub_rev_fp(ident_t *id_ref, int gtid,
- kmp_uint64 *lhs, _Quad rhs);
- void __kmpc_atomic_fixed8_div_rev_fp(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- _Quad rhs);
- void __kmpc_atomic_fixed8u_div_rev_fp(ident_t *id_ref, int gtid,
- kmp_uint64 *lhs, _Quad rhs);
- void __kmpc_atomic_float4_sub_rev_fp(ident_t *id_ref, int gtid, float *lhs,
- _Quad rhs);
- void __kmpc_atomic_float4_div_rev_fp(ident_t *id_ref, int gtid, float *lhs,
- _Quad rhs);
- void __kmpc_atomic_float8_sub_rev_fp(ident_t *id_ref, int gtid, double *lhs,
- _Quad rhs);
- void __kmpc_atomic_float8_div_rev_fp(ident_t *id_ref, int gtid, double *lhs,
- _Quad rhs);
- void __kmpc_atomic_float10_sub_rev_fp(ident_t *id_ref, int gtid,
- long double *lhs, _Quad rhs);
- void __kmpc_atomic_float10_div_rev_fp(ident_t *id_ref, int gtid,
- long double *lhs, _Quad rhs);
- #endif // KMP_HAVE_QUAD
- // RHS=cmplx8
- void __kmpc_atomic_cmplx4_add_cmplx8(ident_t *id_ref, int gtid,
- kmp_cmplx32 *lhs, kmp_cmplx64 rhs);
- void __kmpc_atomic_cmplx4_sub_cmplx8(ident_t *id_ref, int gtid,
- kmp_cmplx32 *lhs, kmp_cmplx64 rhs);
- void __kmpc_atomic_cmplx4_mul_cmplx8(ident_t *id_ref, int gtid,
- kmp_cmplx32 *lhs, kmp_cmplx64 rhs);
- void __kmpc_atomic_cmplx4_div_cmplx8(ident_t *id_ref, int gtid,
- kmp_cmplx32 *lhs, kmp_cmplx64 rhs);
- // generic atomic routines
- void __kmpc_atomic_1(ident_t *id_ref, int gtid, void *lhs, void *rhs,
- void (*f)(void *, void *, void *));
- void __kmpc_atomic_2(ident_t *id_ref, int gtid, void *lhs, void *rhs,
- void (*f)(void *, void *, void *));
- void __kmpc_atomic_4(ident_t *id_ref, int gtid, void *lhs, void *rhs,
- void (*f)(void *, void *, void *));
- void __kmpc_atomic_8(ident_t *id_ref, int gtid, void *lhs, void *rhs,
- void (*f)(void *, void *, void *));
- void __kmpc_atomic_10(ident_t *id_ref, int gtid, void *lhs, void *rhs,
- void (*f)(void *, void *, void *));
- void __kmpc_atomic_16(ident_t *id_ref, int gtid, void *lhs, void *rhs,
- void (*f)(void *, void *, void *));
- void __kmpc_atomic_20(ident_t *id_ref, int gtid, void *lhs, void *rhs,
- void (*f)(void *, void *, void *));
- void __kmpc_atomic_32(ident_t *id_ref, int gtid, void *lhs, void *rhs,
- void (*f)(void *, void *, void *));
- // READ, WRITE, CAPTURE are supported only on IA-32 architecture and Intel(R) 64
- #if KMP_ARCH_X86 || KMP_ARCH_X86_64
- // Below routines for atomic READ are listed
- char __kmpc_atomic_fixed1_rd(ident_t *id_ref, int gtid, char *loc);
- short __kmpc_atomic_fixed2_rd(ident_t *id_ref, int gtid, short *loc);
- kmp_int32 __kmpc_atomic_fixed4_rd(ident_t *id_ref, int gtid, kmp_int32 *loc);
- kmp_int64 __kmpc_atomic_fixed8_rd(ident_t *id_ref, int gtid, kmp_int64 *loc);
- kmp_real32 __kmpc_atomic_float4_rd(ident_t *id_ref, int gtid, kmp_real32 *loc);
- kmp_real64 __kmpc_atomic_float8_rd(ident_t *id_ref, int gtid, kmp_real64 *loc);
- long double __kmpc_atomic_float10_rd(ident_t *id_ref, int gtid,
- long double *loc);
- #if KMP_HAVE_QUAD
- QUAD_LEGACY __kmpc_atomic_float16_rd(ident_t *id_ref, int gtid,
- QUAD_LEGACY *loc);
- #endif
- // Fix for CQ220361: cmplx4 READ will return void on Windows* OS; read value
- // will be returned through an additional parameter
- #if (KMP_OS_WINDOWS)
- void __kmpc_atomic_cmplx4_rd(kmp_cmplx32 *out, ident_t *id_ref, int gtid,
- kmp_cmplx32 *loc);
- #else
- kmp_cmplx32 __kmpc_atomic_cmplx4_rd(ident_t *id_ref, int gtid,
- kmp_cmplx32 *loc);
- #endif
- kmp_cmplx64 __kmpc_atomic_cmplx8_rd(ident_t *id_ref, int gtid,
- kmp_cmplx64 *loc);
- kmp_cmplx80 __kmpc_atomic_cmplx10_rd(ident_t *id_ref, int gtid,
- kmp_cmplx80 *loc);
- #if KMP_HAVE_QUAD
- CPLX128_LEG __kmpc_atomic_cmplx16_rd(ident_t *id_ref, int gtid,
- CPLX128_LEG *loc);
- #if (KMP_ARCH_X86)
- // Routines with 16-byte arguments aligned to 16-byte boundary
- Quad_a16_t __kmpc_atomic_float16_a16_rd(ident_t *id_ref, int gtid,
- Quad_a16_t *loc);
- kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_a16_rd(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *loc);
- #endif
- #endif
- // Below routines for atomic WRITE are listed
- void __kmpc_atomic_fixed1_wr(ident_t *id_ref, int gtid, char *lhs, char rhs);
- void __kmpc_atomic_fixed2_wr(ident_t *id_ref, int gtid, short *lhs, short rhs);
- void __kmpc_atomic_fixed4_wr(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- void __kmpc_atomic_fixed8_wr(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- void __kmpc_atomic_float4_wr(ident_t *id_ref, int gtid, kmp_real32 *lhs,
- kmp_real32 rhs);
- void __kmpc_atomic_float8_wr(ident_t *id_ref, int gtid, kmp_real64 *lhs,
- kmp_real64 rhs);
- void __kmpc_atomic_float10_wr(ident_t *id_ref, int gtid, long double *lhs,
- long double rhs);
- #if KMP_HAVE_QUAD
- void __kmpc_atomic_float16_wr(ident_t *id_ref, int gtid, QUAD_LEGACY *lhs,
- QUAD_LEGACY rhs);
- #endif
- void __kmpc_atomic_cmplx4_wr(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,
- kmp_cmplx32 rhs);
- void __kmpc_atomic_cmplx8_wr(ident_t *id_ref, int gtid, kmp_cmplx64 *lhs,
- kmp_cmplx64 rhs);
- void __kmpc_atomic_cmplx10_wr(ident_t *id_ref, int gtid, kmp_cmplx80 *lhs,
- kmp_cmplx80 rhs);
- #if KMP_HAVE_QUAD
- void __kmpc_atomic_cmplx16_wr(ident_t *id_ref, int gtid, CPLX128_LEG *lhs,
- CPLX128_LEG rhs);
- #if (KMP_ARCH_X86)
- // Routines with 16-byte arguments aligned to 16-byte boundary
- void __kmpc_atomic_float16_a16_wr(ident_t *id_ref, int gtid, Quad_a16_t *lhs,
- Quad_a16_t rhs);
- void __kmpc_atomic_cmplx16_a16_wr(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *lhs,
- kmp_cmplx128_a16_t rhs);
- #endif
- #endif
- // Below routines for atomic CAPTURE are listed
- // 1-byte
- char __kmpc_atomic_fixed1_add_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- char __kmpc_atomic_fixed1_andb_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- char __kmpc_atomic_fixed1_div_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- unsigned char __kmpc_atomic_fixed1u_div_cpt(ident_t *id_ref, int gtid,
- unsigned char *lhs,
- unsigned char rhs, int flag);
- char __kmpc_atomic_fixed1_mul_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- char __kmpc_atomic_fixed1_orb_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- char __kmpc_atomic_fixed1_shl_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- char __kmpc_atomic_fixed1_shr_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- unsigned char __kmpc_atomic_fixed1u_shr_cpt(ident_t *id_ref, int gtid,
- unsigned char *lhs,
- unsigned char rhs, int flag);
- char __kmpc_atomic_fixed1_sub_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- char __kmpc_atomic_fixed1_xor_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- // 2-byte
- short __kmpc_atomic_fixed2_add_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- short __kmpc_atomic_fixed2_andb_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- short __kmpc_atomic_fixed2_div_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- unsigned short __kmpc_atomic_fixed2u_div_cpt(ident_t *id_ref, int gtid,
- unsigned short *lhs,
- unsigned short rhs, int flag);
- short __kmpc_atomic_fixed2_mul_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- short __kmpc_atomic_fixed2_orb_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- short __kmpc_atomic_fixed2_shl_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- short __kmpc_atomic_fixed2_shr_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- unsigned short __kmpc_atomic_fixed2u_shr_cpt(ident_t *id_ref, int gtid,
- unsigned short *lhs,
- unsigned short rhs, int flag);
- short __kmpc_atomic_fixed2_sub_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- short __kmpc_atomic_fixed2_xor_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- // 4-byte add / sub fixed
- kmp_int32 __kmpc_atomic_fixed4_add_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs, int flag);
- kmp_int32 __kmpc_atomic_fixed4_sub_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs, int flag);
- // 4-byte add / sub float
- kmp_real32 __kmpc_atomic_float4_add_cpt(ident_t *id_ref, int gtid,
- kmp_real32 *lhs, kmp_real32 rhs,
- int flag);
- kmp_real32 __kmpc_atomic_float4_sub_cpt(ident_t *id_ref, int gtid,
- kmp_real32 *lhs, kmp_real32 rhs,
- int flag);
- // 8-byte add / sub fixed
- kmp_int64 __kmpc_atomic_fixed8_add_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs, int flag);
- kmp_int64 __kmpc_atomic_fixed8_sub_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs, int flag);
- // 8-byte add / sub float
- kmp_real64 __kmpc_atomic_float8_add_cpt(ident_t *id_ref, int gtid,
- kmp_real64 *lhs, kmp_real64 rhs,
- int flag);
- kmp_real64 __kmpc_atomic_float8_sub_cpt(ident_t *id_ref, int gtid,
- kmp_real64 *lhs, kmp_real64 rhs,
- int flag);
- // 4-byte fixed
- kmp_int32 __kmpc_atomic_fixed4_andb_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs,
- int flag);
- kmp_int32 __kmpc_atomic_fixed4_div_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs, int flag);
- kmp_uint32 __kmpc_atomic_fixed4u_div_cpt(ident_t *id_ref, int gtid,
- kmp_uint32 *lhs, kmp_uint32 rhs,
- int flag);
- kmp_int32 __kmpc_atomic_fixed4_mul_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs, int flag);
- kmp_int32 __kmpc_atomic_fixed4_orb_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs, int flag);
- kmp_int32 __kmpc_atomic_fixed4_shl_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs, int flag);
- kmp_int32 __kmpc_atomic_fixed4_shr_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs, int flag);
- kmp_uint32 __kmpc_atomic_fixed4u_shr_cpt(ident_t *id_ref, int gtid,
- kmp_uint32 *lhs, kmp_uint32 rhs,
- int flag);
- kmp_int32 __kmpc_atomic_fixed4_xor_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs, int flag);
- // 8-byte fixed
- kmp_int64 __kmpc_atomic_fixed8_andb_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs,
- int flag);
- kmp_int64 __kmpc_atomic_fixed8_div_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs, int flag);
- kmp_uint64 __kmpc_atomic_fixed8u_div_cpt(ident_t *id_ref, int gtid,
- kmp_uint64 *lhs, kmp_uint64 rhs,
- int flag);
- kmp_int64 __kmpc_atomic_fixed8_mul_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs, int flag);
- kmp_int64 __kmpc_atomic_fixed8_orb_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs, int flag);
- kmp_int64 __kmpc_atomic_fixed8_shl_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs, int flag);
- kmp_int64 __kmpc_atomic_fixed8_shr_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs, int flag);
- kmp_uint64 __kmpc_atomic_fixed8u_shr_cpt(ident_t *id_ref, int gtid,
- kmp_uint64 *lhs, kmp_uint64 rhs,
- int flag);
- kmp_int64 __kmpc_atomic_fixed8_xor_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs, int flag);
- // 4-byte float
- kmp_real32 __kmpc_atomic_float4_div_cpt(ident_t *id_ref, int gtid,
- kmp_real32 *lhs, kmp_real32 rhs,
- int flag);
- kmp_real32 __kmpc_atomic_float4_mul_cpt(ident_t *id_ref, int gtid,
- kmp_real32 *lhs, kmp_real32 rhs,
- int flag);
- // 8-byte float
- kmp_real64 __kmpc_atomic_float8_div_cpt(ident_t *id_ref, int gtid,
- kmp_real64 *lhs, kmp_real64 rhs,
- int flag);
- kmp_real64 __kmpc_atomic_float8_mul_cpt(ident_t *id_ref, int gtid,
- kmp_real64 *lhs, kmp_real64 rhs,
- int flag);
- // 1-, 2-, 4-, 8-byte logical (&&, ||)
- char __kmpc_atomic_fixed1_andl_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- char __kmpc_atomic_fixed1_orl_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- short __kmpc_atomic_fixed2_andl_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- short __kmpc_atomic_fixed2_orl_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- kmp_int32 __kmpc_atomic_fixed4_andl_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs,
- int flag);
- kmp_int32 __kmpc_atomic_fixed4_orl_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs, int flag);
- kmp_int64 __kmpc_atomic_fixed8_andl_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs,
- int flag);
- kmp_int64 __kmpc_atomic_fixed8_orl_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs, int flag);
- // MIN / MAX
- char __kmpc_atomic_fixed1_max_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- char __kmpc_atomic_fixed1_min_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- short __kmpc_atomic_fixed2_max_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- short __kmpc_atomic_fixed2_min_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- kmp_int32 __kmpc_atomic_fixed4_max_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs, int flag);
- kmp_int32 __kmpc_atomic_fixed4_min_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs, int flag);
- kmp_int64 __kmpc_atomic_fixed8_max_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs, int flag);
- kmp_int64 __kmpc_atomic_fixed8_min_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs, int flag);
- kmp_real32 __kmpc_atomic_float4_max_cpt(ident_t *id_ref, int gtid,
- kmp_real32 *lhs, kmp_real32 rhs,
- int flag);
- kmp_real32 __kmpc_atomic_float4_min_cpt(ident_t *id_ref, int gtid,
- kmp_real32 *lhs, kmp_real32 rhs,
- int flag);
- kmp_real64 __kmpc_atomic_float8_max_cpt(ident_t *id_ref, int gtid,
- kmp_real64 *lhs, kmp_real64 rhs,
- int flag);
- kmp_real64 __kmpc_atomic_float8_min_cpt(ident_t *id_ref, int gtid,
- kmp_real64 *lhs, kmp_real64 rhs,
- int flag);
- long double __kmpc_atomic_float10_max_cpt(ident_t *id_ref, int gtid,
- long double *lhs, long double rhs,
- int flag);
- long double __kmpc_atomic_float10_min_cpt(ident_t *id_ref, int gtid,
- long double *lhs, long double rhs,
- int flag);
- #if KMP_HAVE_QUAD
- QUAD_LEGACY __kmpc_atomic_float16_max_cpt(ident_t *id_ref, int gtid,
- QUAD_LEGACY *lhs, QUAD_LEGACY rhs,
- int flag);
- QUAD_LEGACY __kmpc_atomic_float16_min_cpt(ident_t *id_ref, int gtid,
- QUAD_LEGACY *lhs, QUAD_LEGACY rhs,
- int flag);
- #endif
- // .NEQV. (same as xor)
- char __kmpc_atomic_fixed1_neqv_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- short __kmpc_atomic_fixed2_neqv_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- kmp_int32 __kmpc_atomic_fixed4_neqv_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs,
- int flag);
- kmp_int64 __kmpc_atomic_fixed8_neqv_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs,
- int flag);
- // .EQV. (same as ~xor)
- char __kmpc_atomic_fixed1_eqv_cpt(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- short __kmpc_atomic_fixed2_eqv_cpt(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- kmp_int32 __kmpc_atomic_fixed4_eqv_cpt(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs, int flag);
- kmp_int64 __kmpc_atomic_fixed8_eqv_cpt(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs, int flag);
- // long double type
- long double __kmpc_atomic_float10_add_cpt(ident_t *id_ref, int gtid,
- long double *lhs, long double rhs,
- int flag);
- long double __kmpc_atomic_float10_sub_cpt(ident_t *id_ref, int gtid,
- long double *lhs, long double rhs,
- int flag);
- long double __kmpc_atomic_float10_mul_cpt(ident_t *id_ref, int gtid,
- long double *lhs, long double rhs,
- int flag);
- long double __kmpc_atomic_float10_div_cpt(ident_t *id_ref, int gtid,
- long double *lhs, long double rhs,
- int flag);
- #if KMP_HAVE_QUAD
- // _Quad type
- QUAD_LEGACY __kmpc_atomic_float16_add_cpt(ident_t *id_ref, int gtid,
- QUAD_LEGACY *lhs, QUAD_LEGACY rhs,
- int flag);
- QUAD_LEGACY __kmpc_atomic_float16_sub_cpt(ident_t *id_ref, int gtid,
- QUAD_LEGACY *lhs, QUAD_LEGACY rhs,
- int flag);
- QUAD_LEGACY __kmpc_atomic_float16_mul_cpt(ident_t *id_ref, int gtid,
- QUAD_LEGACY *lhs, QUAD_LEGACY rhs,
- int flag);
- QUAD_LEGACY __kmpc_atomic_float16_div_cpt(ident_t *id_ref, int gtid,
- QUAD_LEGACY *lhs, QUAD_LEGACY rhs,
- int flag);
- #endif
- // routines for complex types
- // Workaround for cmplx4 routines - return void; captured value is returned via
- // the argument
- void __kmpc_atomic_cmplx4_add_cpt(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,
- kmp_cmplx32 rhs, kmp_cmplx32 *out, int flag);
- void __kmpc_atomic_cmplx4_sub_cpt(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,
- kmp_cmplx32 rhs, kmp_cmplx32 *out, int flag);
- void __kmpc_atomic_cmplx4_mul_cpt(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,
- kmp_cmplx32 rhs, kmp_cmplx32 *out, int flag);
- void __kmpc_atomic_cmplx4_div_cpt(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,
- kmp_cmplx32 rhs, kmp_cmplx32 *out, int flag);
- kmp_cmplx64 __kmpc_atomic_cmplx8_add_cpt(ident_t *id_ref, int gtid,
- kmp_cmplx64 *lhs, kmp_cmplx64 rhs,
- int flag);
- kmp_cmplx64 __kmpc_atomic_cmplx8_sub_cpt(ident_t *id_ref, int gtid,
- kmp_cmplx64 *lhs, kmp_cmplx64 rhs,
- int flag);
- kmp_cmplx64 __kmpc_atomic_cmplx8_mul_cpt(ident_t *id_ref, int gtid,
- kmp_cmplx64 *lhs, kmp_cmplx64 rhs,
- int flag);
- kmp_cmplx64 __kmpc_atomic_cmplx8_div_cpt(ident_t *id_ref, int gtid,
- kmp_cmplx64 *lhs, kmp_cmplx64 rhs,
- int flag);
- kmp_cmplx80 __kmpc_atomic_cmplx10_add_cpt(ident_t *id_ref, int gtid,
- kmp_cmplx80 *lhs, kmp_cmplx80 rhs,
- int flag);
- kmp_cmplx80 __kmpc_atomic_cmplx10_sub_cpt(ident_t *id_ref, int gtid,
- kmp_cmplx80 *lhs, kmp_cmplx80 rhs,
- int flag);
- kmp_cmplx80 __kmpc_atomic_cmplx10_mul_cpt(ident_t *id_ref, int gtid,
- kmp_cmplx80 *lhs, kmp_cmplx80 rhs,
- int flag);
- kmp_cmplx80 __kmpc_atomic_cmplx10_div_cpt(ident_t *id_ref, int gtid,
- kmp_cmplx80 *lhs, kmp_cmplx80 rhs,
- int flag);
- #if KMP_HAVE_QUAD
- CPLX128_LEG __kmpc_atomic_cmplx16_add_cpt(ident_t *id_ref, int gtid,
- CPLX128_LEG *lhs, CPLX128_LEG rhs,
- int flag);
- CPLX128_LEG __kmpc_atomic_cmplx16_sub_cpt(ident_t *id_ref, int gtid,
- CPLX128_LEG *lhs, CPLX128_LEG rhs,
- int flag);
- CPLX128_LEG __kmpc_atomic_cmplx16_mul_cpt(ident_t *id_ref, int gtid,
- CPLX128_LEG *lhs, CPLX128_LEG rhs,
- int flag);
- CPLX128_LEG __kmpc_atomic_cmplx16_div_cpt(ident_t *id_ref, int gtid,
- CPLX128_LEG *lhs, CPLX128_LEG rhs,
- int flag);
- #if (KMP_ARCH_X86)
- // Routines with 16-byte arguments aligned to 16-byte boundary
- Quad_a16_t __kmpc_atomic_float16_add_a16_cpt(ident_t *id_ref, int gtid,
- Quad_a16_t *lhs, Quad_a16_t rhs,
- int flag);
- Quad_a16_t __kmpc_atomic_float16_sub_a16_cpt(ident_t *id_ref, int gtid,
- Quad_a16_t *lhs, Quad_a16_t rhs,
- int flag);
- Quad_a16_t __kmpc_atomic_float16_mul_a16_cpt(ident_t *id_ref, int gtid,
- Quad_a16_t *lhs, Quad_a16_t rhs,
- int flag);
- Quad_a16_t __kmpc_atomic_float16_div_a16_cpt(ident_t *id_ref, int gtid,
- Quad_a16_t *lhs, Quad_a16_t rhs,
- int flag);
- Quad_a16_t __kmpc_atomic_float16_max_a16_cpt(ident_t *id_ref, int gtid,
- Quad_a16_t *lhs, Quad_a16_t rhs,
- int flag);
- Quad_a16_t __kmpc_atomic_float16_min_a16_cpt(ident_t *id_ref, int gtid,
- Quad_a16_t *lhs, Quad_a16_t rhs,
- int flag);
- kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_add_a16_cpt(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *lhs,
- kmp_cmplx128_a16_t rhs,
- int flag);
- kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_sub_a16_cpt(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *lhs,
- kmp_cmplx128_a16_t rhs,
- int flag);
- kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_mul_a16_cpt(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *lhs,
- kmp_cmplx128_a16_t rhs,
- int flag);
- kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_div_a16_cpt(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *lhs,
- kmp_cmplx128_a16_t rhs,
- int flag);
- #endif
- #endif
- void __kmpc_atomic_start(void);
- void __kmpc_atomic_end(void);
- // OpenMP 4.0: v = x = expr binop x; { v = x; x = expr binop x; } { x = expr
- // binop x; v = x; } for non-commutative operations.
- char __kmpc_atomic_fixed1_sub_cpt_rev(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- char __kmpc_atomic_fixed1_div_cpt_rev(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- unsigned char __kmpc_atomic_fixed1u_div_cpt_rev(ident_t *id_ref, int gtid,
- unsigned char *lhs,
- unsigned char rhs, int flag);
- char __kmpc_atomic_fixed1_shl_cpt_rev(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- char __kmpc_atomic_fixed1_shr_cpt_rev(ident_t *id_ref, int gtid, char *lhs,
- char rhs, int flag);
- unsigned char __kmpc_atomic_fixed1u_shr_cpt_rev(ident_t *id_ref, int gtid,
- unsigned char *lhs,
- unsigned char rhs, int flag);
- short __kmpc_atomic_fixed2_sub_cpt_rev(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- short __kmpc_atomic_fixed2_div_cpt_rev(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- unsigned short __kmpc_atomic_fixed2u_div_cpt_rev(ident_t *id_ref, int gtid,
- unsigned short *lhs,
- unsigned short rhs, int flag);
- short __kmpc_atomic_fixed2_shl_cpt_rev(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- short __kmpc_atomic_fixed2_shr_cpt_rev(ident_t *id_ref, int gtid, short *lhs,
- short rhs, int flag);
- unsigned short __kmpc_atomic_fixed2u_shr_cpt_rev(ident_t *id_ref, int gtid,
- unsigned short *lhs,
- unsigned short rhs, int flag);
- kmp_int32 __kmpc_atomic_fixed4_sub_cpt_rev(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs,
- int flag);
- kmp_int32 __kmpc_atomic_fixed4_div_cpt_rev(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs,
- int flag);
- kmp_uint32 __kmpc_atomic_fixed4u_div_cpt_rev(ident_t *id_ref, int gtid,
- kmp_uint32 *lhs, kmp_uint32 rhs,
- int flag);
- kmp_int32 __kmpc_atomic_fixed4_shl_cpt_rev(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs,
- int flag);
- kmp_int32 __kmpc_atomic_fixed4_shr_cpt_rev(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, kmp_int32 rhs,
- int flag);
- kmp_uint32 __kmpc_atomic_fixed4u_shr_cpt_rev(ident_t *id_ref, int gtid,
- kmp_uint32 *lhs, kmp_uint32 rhs,
- int flag);
- kmp_int64 __kmpc_atomic_fixed8_sub_cpt_rev(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs,
- int flag);
- kmp_int64 __kmpc_atomic_fixed8_div_cpt_rev(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs,
- int flag);
- kmp_uint64 __kmpc_atomic_fixed8u_div_cpt_rev(ident_t *id_ref, int gtid,
- kmp_uint64 *lhs, kmp_uint64 rhs,
- int flag);
- kmp_int64 __kmpc_atomic_fixed8_shl_cpt_rev(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs,
- int flag);
- kmp_int64 __kmpc_atomic_fixed8_shr_cpt_rev(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, kmp_int64 rhs,
- int flag);
- kmp_uint64 __kmpc_atomic_fixed8u_shr_cpt_rev(ident_t *id_ref, int gtid,
- kmp_uint64 *lhs, kmp_uint64 rhs,
- int flag);
- float __kmpc_atomic_float4_sub_cpt_rev(ident_t *id_ref, int gtid, float *lhs,
- float rhs, int flag);
- float __kmpc_atomic_float4_div_cpt_rev(ident_t *id_ref, int gtid, float *lhs,
- float rhs, int flag);
- double __kmpc_atomic_float8_sub_cpt_rev(ident_t *id_ref, int gtid, double *lhs,
- double rhs, int flag);
- double __kmpc_atomic_float8_div_cpt_rev(ident_t *id_ref, int gtid, double *lhs,
- double rhs, int flag);
- long double __kmpc_atomic_float10_sub_cpt_rev(ident_t *id_ref, int gtid,
- long double *lhs, long double rhs,
- int flag);
- long double __kmpc_atomic_float10_div_cpt_rev(ident_t *id_ref, int gtid,
- long double *lhs, long double rhs,
- int flag);
- #if KMP_HAVE_QUAD
- QUAD_LEGACY __kmpc_atomic_float16_sub_cpt_rev(ident_t *id_ref, int gtid,
- QUAD_LEGACY *lhs, QUAD_LEGACY rhs,
- int flag);
- QUAD_LEGACY __kmpc_atomic_float16_div_cpt_rev(ident_t *id_ref, int gtid,
- QUAD_LEGACY *lhs, QUAD_LEGACY rhs,
- int flag);
- #endif
- // Workaround for cmplx4 routines - return void; captured value is returned via
- // the argument
- void __kmpc_atomic_cmplx4_sub_cpt_rev(ident_t *id_ref, int gtid,
- kmp_cmplx32 *lhs, kmp_cmplx32 rhs,
- kmp_cmplx32 *out, int flag);
- void __kmpc_atomic_cmplx4_div_cpt_rev(ident_t *id_ref, int gtid,
- kmp_cmplx32 *lhs, kmp_cmplx32 rhs,
- kmp_cmplx32 *out, int flag);
- kmp_cmplx64 __kmpc_atomic_cmplx8_sub_cpt_rev(ident_t *id_ref, int gtid,
- kmp_cmplx64 *lhs, kmp_cmplx64 rhs,
- int flag);
- kmp_cmplx64 __kmpc_atomic_cmplx8_div_cpt_rev(ident_t *id_ref, int gtid,
- kmp_cmplx64 *lhs, kmp_cmplx64 rhs,
- int flag);
- kmp_cmplx80 __kmpc_atomic_cmplx10_sub_cpt_rev(ident_t *id_ref, int gtid,
- kmp_cmplx80 *lhs, kmp_cmplx80 rhs,
- int flag);
- kmp_cmplx80 __kmpc_atomic_cmplx10_div_cpt_rev(ident_t *id_ref, int gtid,
- kmp_cmplx80 *lhs, kmp_cmplx80 rhs,
- int flag);
- #if KMP_HAVE_QUAD
- CPLX128_LEG __kmpc_atomic_cmplx16_sub_cpt_rev(ident_t *id_ref, int gtid,
- CPLX128_LEG *lhs, CPLX128_LEG rhs,
- int flag);
- CPLX128_LEG __kmpc_atomic_cmplx16_div_cpt_rev(ident_t *id_ref, int gtid,
- CPLX128_LEG *lhs, CPLX128_LEG rhs,
- int flag);
- #if (KMP_ARCH_X86)
- Quad_a16_t __kmpc_atomic_float16_sub_a16_cpt_rev(ident_t *id_ref, int gtid,
- Quad_a16_t *lhs,
- Quad_a16_t rhs, int flag);
- Quad_a16_t __kmpc_atomic_float16_div_a16_cpt_rev(ident_t *id_ref, int gtid,
- Quad_a16_t *lhs,
- Quad_a16_t rhs, int flag);
- kmp_cmplx128_a16_t
- __kmpc_atomic_cmplx16_sub_a16_cpt_rev(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *lhs,
- kmp_cmplx128_a16_t rhs, int flag);
- kmp_cmplx128_a16_t
- __kmpc_atomic_cmplx16_div_a16_cpt_rev(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *lhs,
- kmp_cmplx128_a16_t rhs, int flag);
- #endif
- #endif
- // OpenMP 4.0 Capture-write (swap): {v = x; x = expr;}
- char __kmpc_atomic_fixed1_swp(ident_t *id_ref, int gtid, char *lhs, char rhs);
- short __kmpc_atomic_fixed2_swp(ident_t *id_ref, int gtid, short *lhs,
- short rhs);
- kmp_int32 __kmpc_atomic_fixed4_swp(ident_t *id_ref, int gtid, kmp_int32 *lhs,
- kmp_int32 rhs);
- kmp_int64 __kmpc_atomic_fixed8_swp(ident_t *id_ref, int gtid, kmp_int64 *lhs,
- kmp_int64 rhs);
- float __kmpc_atomic_float4_swp(ident_t *id_ref, int gtid, float *lhs,
- float rhs);
- double __kmpc_atomic_float8_swp(ident_t *id_ref, int gtid, double *lhs,
- double rhs);
- long double __kmpc_atomic_float10_swp(ident_t *id_ref, int gtid,
- long double *lhs, long double rhs);
- #if KMP_HAVE_QUAD
- QUAD_LEGACY __kmpc_atomic_float16_swp(ident_t *id_ref, int gtid,
- QUAD_LEGACY *lhs, QUAD_LEGACY rhs);
- #endif
- // !!! TODO: check if we need a workaround here
- void __kmpc_atomic_cmplx4_swp(ident_t *id_ref, int gtid, kmp_cmplx32 *lhs,
- kmp_cmplx32 rhs, kmp_cmplx32 *out);
- // kmp_cmplx32 __kmpc_atomic_cmplx4_swp( ident_t *id_ref, int gtid,
- // kmp_cmplx32 * lhs, kmp_cmplx32 rhs );
- kmp_cmplx64 __kmpc_atomic_cmplx8_swp(ident_t *id_ref, int gtid,
- kmp_cmplx64 *lhs, kmp_cmplx64 rhs);
- kmp_cmplx80 __kmpc_atomic_cmplx10_swp(ident_t *id_ref, int gtid,
- kmp_cmplx80 *lhs, kmp_cmplx80 rhs);
- #if KMP_HAVE_QUAD
- CPLX128_LEG __kmpc_atomic_cmplx16_swp(ident_t *id_ref, int gtid,
- CPLX128_LEG *lhs, CPLX128_LEG rhs);
- #if (KMP_ARCH_X86)
- Quad_a16_t __kmpc_atomic_float16_a16_swp(ident_t *id_ref, int gtid,
- Quad_a16_t *lhs, Quad_a16_t rhs);
- kmp_cmplx128_a16_t __kmpc_atomic_cmplx16_a16_swp(ident_t *id_ref, int gtid,
- kmp_cmplx128_a16_t *lhs,
- kmp_cmplx128_a16_t rhs);
- #endif
- #endif
- // Capture routines for mixed types (RHS=float16)
- #if KMP_HAVE_QUAD
- char __kmpc_atomic_fixed1_add_cpt_fp(ident_t *id_ref, int gtid, char *lhs,
- _Quad rhs, int flag);
- char __kmpc_atomic_fixed1_sub_cpt_fp(ident_t *id_ref, int gtid, char *lhs,
- _Quad rhs, int flag);
- char __kmpc_atomic_fixed1_mul_cpt_fp(ident_t *id_ref, int gtid, char *lhs,
- _Quad rhs, int flag);
- char __kmpc_atomic_fixed1_div_cpt_fp(ident_t *id_ref, int gtid, char *lhs,
- _Quad rhs, int flag);
- unsigned char __kmpc_atomic_fixed1u_add_cpt_fp(ident_t *id_ref, int gtid,
- unsigned char *lhs, _Quad rhs,
- int flag);
- unsigned char __kmpc_atomic_fixed1u_sub_cpt_fp(ident_t *id_ref, int gtid,
- unsigned char *lhs, _Quad rhs,
- int flag);
- unsigned char __kmpc_atomic_fixed1u_mul_cpt_fp(ident_t *id_ref, int gtid,
- unsigned char *lhs, _Quad rhs,
- int flag);
- unsigned char __kmpc_atomic_fixed1u_div_cpt_fp(ident_t *id_ref, int gtid,
- unsigned char *lhs, _Quad rhs,
- int flag);
- short __kmpc_atomic_fixed2_add_cpt_fp(ident_t *id_ref, int gtid, short *lhs,
- _Quad rhs, int flag);
- short __kmpc_atomic_fixed2_sub_cpt_fp(ident_t *id_ref, int gtid, short *lhs,
- _Quad rhs, int flag);
- short __kmpc_atomic_fixed2_mul_cpt_fp(ident_t *id_ref, int gtid, short *lhs,
- _Quad rhs, int flag);
- short __kmpc_atomic_fixed2_div_cpt_fp(ident_t *id_ref, int gtid, short *lhs,
- _Quad rhs, int flag);
- unsigned short __kmpc_atomic_fixed2u_add_cpt_fp(ident_t *id_ref, int gtid,
- unsigned short *lhs, _Quad rhs,
- int flag);
- unsigned short __kmpc_atomic_fixed2u_sub_cpt_fp(ident_t *id_ref, int gtid,
- unsigned short *lhs, _Quad rhs,
- int flag);
- unsigned short __kmpc_atomic_fixed2u_mul_cpt_fp(ident_t *id_ref, int gtid,
- unsigned short *lhs, _Quad rhs,
- int flag);
- unsigned short __kmpc_atomic_fixed2u_div_cpt_fp(ident_t *id_ref, int gtid,
- unsigned short *lhs, _Quad rhs,
- int flag);
- kmp_int32 __kmpc_atomic_fixed4_add_cpt_fp(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, _Quad rhs, int flag);
- kmp_int32 __kmpc_atomic_fixed4_sub_cpt_fp(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, _Quad rhs, int flag);
- kmp_int32 __kmpc_atomic_fixed4_mul_cpt_fp(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, _Quad rhs, int flag);
- kmp_int32 __kmpc_atomic_fixed4_div_cpt_fp(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, _Quad rhs, int flag);
- kmp_uint32 __kmpc_atomic_fixed4u_add_cpt_fp(ident_t *id_ref, int gtid,
- kmp_uint32 *lhs, _Quad rhs,
- int flag);
- kmp_uint32 __kmpc_atomic_fixed4u_sub_cpt_fp(ident_t *id_ref, int gtid,
- kmp_uint32 *lhs, _Quad rhs,
- int flag);
- kmp_uint32 __kmpc_atomic_fixed4u_mul_cpt_fp(ident_t *id_ref, int gtid,
- kmp_uint32 *lhs, _Quad rhs,
- int flag);
- kmp_uint32 __kmpc_atomic_fixed4u_div_cpt_fp(ident_t *id_ref, int gtid,
- kmp_uint32 *lhs, _Quad rhs,
- int flag);
- kmp_int64 __kmpc_atomic_fixed8_add_cpt_fp(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, _Quad rhs, int flag);
- kmp_int64 __kmpc_atomic_fixed8_sub_cpt_fp(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, _Quad rhs, int flag);
- kmp_int64 __kmpc_atomic_fixed8_mul_cpt_fp(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, _Quad rhs, int flag);
- kmp_int64 __kmpc_atomic_fixed8_div_cpt_fp(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, _Quad rhs, int flag);
- kmp_uint64 __kmpc_atomic_fixed8u_add_cpt_fp(ident_t *id_ref, int gtid,
- kmp_uint64 *lhs, _Quad rhs,
- int flag);
- kmp_uint64 __kmpc_atomic_fixed8u_sub_cpt_fp(ident_t *id_ref, int gtid,
- kmp_uint64 *lhs, _Quad rhs,
- int flag);
- kmp_uint64 __kmpc_atomic_fixed8u_mul_cpt_fp(ident_t *id_ref, int gtid,
- kmp_uint64 *lhs, _Quad rhs,
- int flag);
- kmp_uint64 __kmpc_atomic_fixed8u_div_cpt_fp(ident_t *id_ref, int gtid,
- kmp_uint64 *lhs, _Quad rhs,
- int flag);
- float __kmpc_atomic_float4_add_cpt_fp(ident_t *id_ref, int gtid,
- kmp_real32 *lhs, _Quad rhs, int flag);
- float __kmpc_atomic_float4_sub_cpt_fp(ident_t *id_ref, int gtid,
- kmp_real32 *lhs, _Quad rhs, int flag);
- float __kmpc_atomic_float4_mul_cpt_fp(ident_t *id_ref, int gtid,
- kmp_real32 *lhs, _Quad rhs, int flag);
- float __kmpc_atomic_float4_div_cpt_fp(ident_t *id_ref, int gtid,
- kmp_real32 *lhs, _Quad rhs, int flag);
- double __kmpc_atomic_float8_add_cpt_fp(ident_t *id_ref, int gtid,
- kmp_real64 *lhs, _Quad rhs, int flag);
- double __kmpc_atomic_float8_sub_cpt_fp(ident_t *id_ref, int gtid,
- kmp_real64 *lhs, _Quad rhs, int flag);
- double __kmpc_atomic_float8_mul_cpt_fp(ident_t *id_ref, int gtid,
- kmp_real64 *lhs, _Quad rhs, int flag);
- double __kmpc_atomic_float8_div_cpt_fp(ident_t *id_ref, int gtid,
- kmp_real64 *lhs, _Quad rhs, int flag);
- long double __kmpc_atomic_float10_add_cpt_fp(ident_t *id_ref, int gtid,
- long double *lhs, _Quad rhs,
- int flag);
- long double __kmpc_atomic_float10_sub_cpt_fp(ident_t *id_ref, int gtid,
- long double *lhs, _Quad rhs,
- int flag);
- long double __kmpc_atomic_float10_mul_cpt_fp(ident_t *id_ref, int gtid,
- long double *lhs, _Quad rhs,
- int flag);
- long double __kmpc_atomic_float10_div_cpt_fp(ident_t *id_ref, int gtid,
- long double *lhs, _Quad rhs,
- int flag);
- char __kmpc_atomic_fixed1_sub_cpt_rev_fp(ident_t *id_ref, int gtid, char *lhs,
- _Quad rhs, int flag);
- unsigned char __kmpc_atomic_fixed1u_sub_cpt_rev_fp(ident_t *id_ref, int gtid,
- unsigned char *lhs,
- _Quad rhs, int flag);
- char __kmpc_atomic_fixed1_div_cpt_rev_fp(ident_t *id_ref, int gtid, char *lhs,
- _Quad rhs, int flag);
- unsigned char __kmpc_atomic_fixed1u_div_cpt_rev_fp(ident_t *id_ref, int gtid,
- unsigned char *lhs,
- _Quad rhs, int flag);
- short __kmpc_atomic_fixed2_sub_cpt_rev_fp(ident_t *id_ref, int gtid, short *lhs,
- _Quad rhs, int flag);
- unsigned short __kmpc_atomic_fixed2u_sub_cpt_rev_fp(ident_t *id_ref, int gtid,
- unsigned short *lhs,
- _Quad rhs, int flag);
- short __kmpc_atomic_fixed2_div_cpt_rev_fp(ident_t *id_ref, int gtid, short *lhs,
- _Quad rhs, int flag);
- unsigned short __kmpc_atomic_fixed2u_div_cpt_rev_fp(ident_t *id_ref, int gtid,
- unsigned short *lhs,
- _Quad rhs, int flag);
- kmp_int32 __kmpc_atomic_fixed4_sub_cpt_rev_fp(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, _Quad rhs,
- int flag);
- kmp_uint32 __kmpc_atomic_fixed4u_sub_cpt_rev_fp(ident_t *id_ref, int gtid,
- kmp_uint32 *lhs, _Quad rhs,
- int flag);
- kmp_int32 __kmpc_atomic_fixed4_div_cpt_rev_fp(ident_t *id_ref, int gtid,
- kmp_int32 *lhs, _Quad rhs,
- int flag);
- kmp_uint32 __kmpc_atomic_fixed4u_div_cpt_rev_fp(ident_t *id_ref, int gtid,
- kmp_uint32 *lhs, _Quad rhs,
- int flag);
- kmp_int64 __kmpc_atomic_fixed8_sub_cpt_rev_fp(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, _Quad rhs,
- int flag);
- kmp_uint64 __kmpc_atomic_fixed8u_sub_cpt_rev_fp(ident_t *id_ref, int gtid,
- kmp_uint64 *lhs, _Quad rhs,
- int flag);
- kmp_int64 __kmpc_atomic_fixed8_div_cpt_rev_fp(ident_t *id_ref, int gtid,
- kmp_int64 *lhs, _Quad rhs,
- int flag);
- kmp_uint64 __kmpc_atomic_fixed8u_div_cpt_rev_fp(ident_t *id_ref, int gtid,
- kmp_uint64 *lhs, _Quad rhs,
- int flag);
- float __kmpc_atomic_float4_sub_cpt_rev_fp(ident_t *id_ref, int gtid, float *lhs,
- _Quad rhs, int flag);
- float __kmpc_atomic_float4_div_cpt_rev_fp(ident_t *id_ref, int gtid, float *lhs,
- _Quad rhs, int flag);
- double __kmpc_atomic_float8_sub_cpt_rev_fp(ident_t *id_ref, int gtid,
- double *lhs, _Quad rhs, int flag);
- double __kmpc_atomic_float8_div_cpt_rev_fp(ident_t *id_ref, int gtid,
- double *lhs, _Quad rhs, int flag);
- long double __kmpc_atomic_float10_sub_cpt_rev_fp(ident_t *id_ref, int gtid,
- long double *lhs, _Quad rhs,
- int flag);
- long double __kmpc_atomic_float10_div_cpt_rev_fp(ident_t *id_ref, int gtid,
- long double *lhs, _Quad rhs,
- int flag);
- #endif // KMP_HAVE_QUAD
- // End of OpenMP 4.0 capture
- // OpenMP 5.1 compare and swap
- /*
- __kmpc_atomic_bool_1_cas
- __kmpc_atomic_bool_2_cas
- __kmpc_atomic_bool_4_cas
- __kmpc_atomic_bool_8_cas
- __kmpc_atomic_val_1_cas
- __kmpc_atomic_val_2_cas
- __kmpc_atomic_val_4_cas
- __kmpc_atomic_val_8_cas
- __kmpc_atomic_bool_1_cas_cpt
- __kmpc_atomic_bool_2_cas_cpt
- __kmpc_atomic_bool_4_cas_cpt
- __kmpc_atomic_bool_8_cas_cpt
- __kmpc_atomic_val_1_cas_cpt
- __kmpc_atomic_val_2_cas_cpt
- __kmpc_atomic_val_4_cas_cpt
- __kmpc_atomic_val_8_cas_cpt
- */
- // In all interfaces of CAS (Compare And Swap):
- // r is the boolean result of comparison
- // x is memory location to operate on
- // e is expected (old) value
- // d is desired (new) value
- // pv is pointer to captured value v whose location may coincide with e
- // { r = x == e; if(r) { x = d; } }
- // functions return result of comparison
- bool __kmpc_atomic_bool_1_cas(ident_t *loc, int gtid, char *x, char e, char d);
- bool __kmpc_atomic_bool_2_cas(ident_t *loc, int gtid, short *x, short e,
- short d);
- bool __kmpc_atomic_bool_4_cas(ident_t *loc, int gtid, kmp_int32 *x, kmp_int32 e,
- kmp_int32 d);
- bool __kmpc_atomic_bool_8_cas(ident_t *loc, int gtid, kmp_int64 *x, kmp_int64 e,
- kmp_int64 d);
- // { v = x; if (x == e) { x = d; } }
- // functions return old value
- char __kmpc_atomic_val_1_cas(ident_t *loc, int gtid, char *x, char e, char d);
- short __kmpc_atomic_val_2_cas(ident_t *loc, int gtid, short *x, short e,
- short d);
- kmp_int32 __kmpc_atomic_val_4_cas(ident_t *loc, int gtid, kmp_int32 *x,
- kmp_int32 e, kmp_int32 d);
- kmp_int64 __kmpc_atomic_val_8_cas(ident_t *loc, int gtid, kmp_int64 *x,
- kmp_int64 e, kmp_int64 d);
- // { r = x == e; if(r) { x = d; } else { v = x; } }
- // v gets old value if comparison failed, untouched otherwise
- // functions return result of comparison
- bool __kmpc_atomic_bool_1_cas_cpt(ident_t *loc, int gtid, char *x, char e,
- char d, char *pv);
- bool __kmpc_atomic_bool_2_cas_cpt(ident_t *loc, int gtid, short *x, short e,
- short d, short *pv);
- bool __kmpc_atomic_bool_4_cas_cpt(ident_t *loc, int gtid, kmp_int32 *x,
- kmp_int32 e, kmp_int32 d, kmp_int32 *pv);
- bool __kmpc_atomic_bool_8_cas_cpt(ident_t *loc, int gtid, kmp_int64 *x,
- kmp_int64 e, kmp_int64 d, kmp_int64 *pv);
- // { if (x == e) { x = d; }; v = x; }
- // v gets old value if comparison failed, new value otherwise
- // functions return old value
- char __kmpc_atomic_val_1_cas_cpt(ident_t *loc, int gtid, char *x, char e,
- char d, char *pv);
- short __kmpc_atomic_val_2_cas_cpt(ident_t *loc, int gtid, short *x, short e,
- short d, short *pv);
- kmp_int32 __kmpc_atomic_val_4_cas_cpt(ident_t *loc, int gtid, kmp_int32 *x,
- kmp_int32 e, kmp_int32 d, kmp_int32 *pv);
- kmp_int64 __kmpc_atomic_val_8_cas_cpt(ident_t *loc, int gtid, kmp_int64 *x,
- kmp_int64 e, kmp_int64 d, kmp_int64 *pv);
- // End OpenMP 5.1 compare + capture
- #endif // KMP_ARCH_X86 || KMP_ARCH_X86_64
- /* ------------------------------------------------------------------------ */
- #ifdef __cplusplus
- } // extern "C"
- #endif
- #endif /* KMP_ATOMIC_H */
- // end of file
|