Changes in / [2fa5bd2:aca6a54c]
- Files:
-
- 2 deleted
- 73 edited
-
Jenkinsfile (modified) (1 diff)
-
automake/missing (modified) (1 diff, 1 prop)
-
benchmark/Makefile.in (modified) (1 diff)
-
driver/cc1.cc (modified) (3 diffs)
-
driver/cfa.cc (modified) (2 diffs)
-
libcfa/configure (modified) (1 diff)
-
libcfa/configure.ac (modified) (1 diff)
-
libcfa/prelude/builtins.c (modified) (2 diffs)
-
libcfa/prelude/sync-builtins.cf (modified) (8 diffs)
-
libcfa/src/Makefile.am (modified) (1 diff)
-
libcfa/src/Makefile.in (modified) (2 diffs)
-
libcfa/src/assert.cfa (modified) (4 diffs)
-
libcfa/src/bits/align.hfa (modified) (2 diffs)
-
libcfa/src/bits/debug.cfa (modified) (6 diffs)
-
libcfa/src/bits/debug.hfa (modified) (3 diffs)
-
libcfa/src/bits/defs.hfa (modified) (1 diff)
-
libcfa/src/concurrency/alarm.cfa (modified) (4 diffs)
-
libcfa/src/concurrency/coroutine.cfa (modified) (4 diffs)
-
libcfa/src/concurrency/coroutine.hfa (modified) (4 diffs)
-
libcfa/src/concurrency/invoke.h (modified) (4 diffs)
-
libcfa/src/concurrency/kernel.cfa (modified) (23 diffs)
-
libcfa/src/concurrency/kernel.hfa (modified) (4 diffs)
-
libcfa/src/concurrency/kernel_private.hfa (modified) (3 diffs)
-
libcfa/src/concurrency/monitor.cfa (modified) (10 diffs)
-
libcfa/src/concurrency/monitor.hfa (modified) (3 diffs)
-
libcfa/src/concurrency/mutex.cfa (modified) (4 diffs)
-
libcfa/src/concurrency/mutex.hfa (modified) (2 diffs)
-
libcfa/src/concurrency/preemption.cfa (modified) (14 diffs)
-
libcfa/src/concurrency/thread.cfa (modified) (3 diffs)
-
libcfa/src/concurrency/thread.hfa (modified) (2 diffs)
-
libcfa/src/fstream.cfa (modified) (3 diffs)
-
libcfa/src/fstream.hfa (modified) (3 diffs)
-
libcfa/src/heap.cfa (modified) (41 diffs)
-
libcfa/src/interpose.cfa (modified) (5 diffs)
-
libcfa/src/startup.cfa (modified) (1 diff)
-
libcfa/src/stdlib.cfa (modified) (2 diffs)
-
libcfa/src/stdlib.hfa (modified) (8 diffs)
-
longrun_tests/Makefile.in (modified) (1 diff)
-
src/AST/Convert.cpp (modified) (2 diffs)
-
src/AST/Expr.hpp (modified) (1 diff)
-
src/AST/Pass.impl.hpp (modified) (1 diff)
-
src/AST/Print.cpp (modified) (1 diff)
-
src/CodeGen/CodeGenerator.cc (modified) (1 diff)
-
src/Common/PassVisitor.impl.h (modified) (3 diffs)
-
src/Common/SemanticError.cc (modified) (1 diff)
-
src/Common/SemanticError.h (modified) (1 diff)
-
src/Concurrency/Keywords.cc (modified) (7 diffs)
-
src/ControlStruct/MLEMutator.cc (modified) (1 diff)
-
src/GenPoly/Lvalue.cc (modified) (3 diffs)
-
src/Parser/parser.yy (modified) (8 diffs)
-
src/ResolvExpr/AlternativeFinder.cc (modified) (2 diffs)
-
src/ResolvExpr/Resolver.cc (modified) (2 diffs)
-
src/SynTree/Expression.cc (modified) (1 diff)
-
src/SynTree/Expression.h (modified) (2 diffs)
-
src/cfa.make (modified) (1 diff)
-
src/main.cc (modified) (4 diffs)
-
tests/.expect/alloc.txt (modified) (1 diff)
-
tests/.expect/gccExtensions.x64.txt (modified) (1 diff)
-
tests/.expect/gccExtensions.x86.txt (modified) (1 diff)
-
tests/.expect/references.txt (modified) (1 diff)
-
tests/Makefile.am (modified) (2 diffs)
-
tests/Makefile.in (modified) (3 diffs)
-
tests/alloc.cfa (modified) (4 diffs)
-
tests/builtins/sync.cfa (modified) (2 diffs)
-
tests/concurrent/.expect/keywordErrors.txt (deleted)
-
tests/concurrent/keywordErrors.cfa (deleted)
-
tests/concurrent/preempt.cfa (modified) (1 diff)
-
tests/concurrent/signal/wait.cfa (modified) (4 diffs)
-
tests/concurrent/thread.cfa (modified) (1 diff)
-
tests/heap.cfa (modified) (22 diffs)
-
tests/linking/withthreads.cfa (modified) (1 diff)
-
tests/raii/dtor-early-exit.cfa (modified) (1 diff)
-
tests/references.cfa (modified) (1 diff)
-
tests/test.py (modified) (2 diffs)
-
tests/time.cfa (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
Jenkinsfile
r2fa5bd2 raca6a54c 102 102 103 103 echo GitLogMessage() 104 105 // This is a complete hack but it solves problems with automake thinking it needs to regenerate makefiles106 // We fudged automake/missing to handle that but automake stills bakes prints inside the makefiles107 // and these cause more problems.108 sh 'find . -name Makefile.in -exec touch {} +'109 104 } 110 105 } -
automake/missing
-
Property mode
changed from
120000to100644
r2fa5bd2 raca6a54c 1 /usr/share/automake-1.15/missing 1 #! /bin/sh 2 # Tdelisle : having the Makefiles.in automatically regenerated causes problems 3 # when using multiple versions of automake, even if only on end user machines 4 # therefore I am disabling that feature by commenting this script 5 exit 0 -
Property mode
changed from
-
benchmark/Makefile.in
r2fa5bd2 raca6a54c 352 352 LTCFACOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ 353 353 $(LIBTOOLFLAGS) --mode=compile $(CFACC) $(DEFS) \ 354 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(AM_CFLAGS) $(CFAFLAGS) $(CFLAGS) 354 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(CFAFLAGS) \ 355 $(AM_CFLAGS) $(CFLAGS) 355 356 356 357 AM_V_CFA = $(am__v_CFA_@AM_V@) -
driver/cc1.cc
r2fa5bd2 raca6a54c 335 335 #endif // __DEBUG_H__ 336 336 337 enum {338 Color_Auto = 0,339 Color_Always = 1,340 Color_Never = 2,341 } color_arg = Color_Auto;342 343 const char * color_names[3] = { "--colors=auto", "--colors=always", "--colors=never" };344 345 337 // process all the arguments 346 338 … … 349 341 if ( prefix( arg, "-" ) ) { 350 342 // strip inappropriate flags 351 352 if ( prefix( arg, "-fdiagnostics-color=" ) ) {353 string choice = arg.substr(20);354 if(choice == "always") color_arg = Color_Always;355 else if(choice == "never" ) color_arg = Color_Never;356 else if(choice == "auto" ) color_arg = Color_Auto;357 } else if ( arg == "-fno-diagnostics-color" ) {358 color_arg = Color_Auto;359 }360 343 361 344 if ( arg == "-quiet" || arg == "-version" || arg == "-fpreprocessed" || … … 457 440 cargs[ncargs++] = cfa_cpp_out.c_str(); 458 441 } // if 459 460 cargs[ncargs++] = color_names[color_arg];461 462 442 cargs[ncargs] = nullptr; // terminate argument list 463 443 -
driver/cfa.cc
r2fa5bd2 raca6a54c 401 401 args[nargs++] = "-Xlinker"; 402 402 args[nargs++] = "--undefined=__cfaabi_appready_startup"; 403 args[nargs++] = "-z";404 args[nargs++] = "execstack";405 403 406 404 // include the cfa library in case it is needed … … 411 409 args[nargs++] = "-Wl,--pop-state"; 412 410 args[nargs++] = "-lcfa"; 413 args[nargs++] = "- pthread";411 args[nargs++] = "-lpthread"; 414 412 args[nargs++] = "-ldl"; 415 413 args[nargs++] = "-lrt"; -
libcfa/configure
r2fa5bd2 raca6a54c 3000 3000 case $CONFIGURATION in 3001 3001 "debug" ) 3002 CONFIG_CFLAGS="-O 0-g"3002 CONFIG_CFLAGS="-Og -g" 3003 3003 CONFIG_CFAFLAGS="-debug" 3004 3004 CONFIG_BUILDLIB="yes" -
libcfa/configure.ac
r2fa5bd2 raca6a54c 68 68 case $CONFIGURATION in 69 69 "debug" ) 70 CONFIG_CFLAGS="-O 0-g"70 CONFIG_CFLAGS="-Og -g" 71 71 CONFIG_CFAFLAGS="-debug" 72 72 CONFIG_BUILDLIB="yes" -
libcfa/prelude/builtins.c
r2fa5bd2 raca6a54c 10 10 // Created On : Fri Jul 21 16:21:03 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T hu Nov 21 16:31:39201913 // Update Count : 10112 // Last Modified On : Tue Jun 25 18:06:52 2019 13 // Update Count : 97 14 14 // 15 15 … … 69 69 70 70 // universal typed pointer constant 71 static inline forall( dtype DT ) DT * intptr( uintptr_t addr ) { return (DT *)addr; } 71 // Compiler issue: there is a problem with anonymous types that do not have a size. 72 static inline forall( dtype DT | sized(DT) ) DT * intptr( uintptr_t addr ) { return (DT *)addr; } 72 73 73 74 // exponentiation operator implementation -
libcfa/prelude/sync-builtins.cf
r2fa5bd2 raca6a54c 1 1 char __sync_fetch_and_add(volatile char *, char,...); 2 char __sync_fetch_and_add_1(volatile char *, char,...); 2 3 signed char __sync_fetch_and_add(volatile signed char *, signed char,...); 4 signed char __sync_fetch_and_add_1(volatile signed char *, signed char,...); 3 5 unsigned char __sync_fetch_and_add(volatile unsigned char *, unsigned char,...); 6 unsigned char __sync_fetch_and_add_1(volatile unsigned char *, unsigned char,...); 4 7 signed short __sync_fetch_and_add(volatile signed short *, signed short,...); 8 signed short __sync_fetch_and_add_2(volatile signed short *, signed short,...); 5 9 unsigned short __sync_fetch_and_add(volatile unsigned short *, unsigned short,...); 10 unsigned short __sync_fetch_and_add_2(volatile unsigned short *, unsigned short,...); 6 11 signed int __sync_fetch_and_add(volatile signed int *, signed int,...); 12 signed int __sync_fetch_and_add_4(volatile signed int *, signed int,...); 7 13 unsigned int __sync_fetch_and_add(volatile unsigned int *, unsigned int,...); 8 signed long int __sync_fetch_and_add(volatile signed long int *, signed long int,...); 9 unsigned long int __sync_fetch_and_add(volatile unsigned long int *, unsigned long int,...); 14 unsigned int __sync_fetch_and_add_4(volatile unsigned int *, unsigned int,...); 10 15 signed long long int __sync_fetch_and_add(volatile signed long long int *, signed long long int,...); 16 signed long long int __sync_fetch_and_add_8(volatile signed long long int *, signed long long int,...); 11 17 unsigned long long int __sync_fetch_and_add(volatile unsigned long long int *, unsigned long long int,...); 18 unsigned long long int __sync_fetch_and_add_8(volatile unsigned long long int *, unsigned long long int,...); 12 19 #if defined(__SIZEOF_INT128__) 13 20 signed __int128 __sync_fetch_and_add(volatile signed __int128 *, signed __int128,...); 21 signed __int128 __sync_fetch_and_add_16(volatile signed __int128 *, signed __int128,...); 14 22 unsigned __int128 __sync_fetch_and_add(volatile unsigned __int128 *, unsigned __int128,...); 23 unsigned __int128 __sync_fetch_and_add_16(volatile unsigned __int128 *, unsigned __int128,...); 15 24 #endif 16 25 17 26 char __sync_fetch_and_sub(volatile char *, char,...); 27 char __sync_fetch_and_sub_1(volatile char *, char,...); 18 28 signed char __sync_fetch_and_sub(volatile signed char *, signed char,...); 29 signed char __sync_fetch_and_sub_1(volatile signed char *, signed char,...); 19 30 unsigned char __sync_fetch_and_sub(volatile unsigned char *, unsigned char,...); 31 unsigned char __sync_fetch_and_sub_1(volatile unsigned char *, unsigned char,...); 20 32 signed short __sync_fetch_and_sub(volatile signed short *, signed short,...); 33 signed short __sync_fetch_and_sub_2(volatile signed short *, signed short,...); 21 34 unsigned short __sync_fetch_and_sub(volatile unsigned short *, unsigned short,...); 35 unsigned short __sync_fetch_and_sub_2(volatile unsigned short *, unsigned short,...); 22 36 signed int __sync_fetch_and_sub(volatile signed int *, signed int,...); 37 signed int __sync_fetch_and_sub_4(volatile signed int *, signed int,...); 23 38 unsigned int __sync_fetch_and_sub(volatile unsigned int *, unsigned int,...); 24 signed long int __sync_fetch_and_sub(volatile signed long int *, signed long int,...); 25 unsigned long int __sync_fetch_and_sub(volatile unsigned long int *, unsigned long int,...); 39 unsigned int __sync_fetch_and_sub_4(volatile unsigned int *, unsigned int,...); 26 40 signed long long int __sync_fetch_and_sub(volatile signed long long int *, signed long long int,...); 41 signed long long int __sync_fetch_and_sub_8(volatile signed long long int *, signed long long int,...); 27 42 unsigned long long int __sync_fetch_and_sub(volatile unsigned long long int *, unsigned long long int,...); 43 unsigned long long int __sync_fetch_and_sub_8(volatile unsigned long long int *, unsigned long long int,...); 28 44 #if defined(__SIZEOF_INT128__) 29 45 signed __int128 __sync_fetch_and_sub(volatile signed __int128 *, signed __int128,...); 46 signed __int128 __sync_fetch_and_sub_16(volatile signed __int128 *, signed __int128,...); 30 47 unsigned __int128 __sync_fetch_and_sub(volatile unsigned __int128 *, unsigned __int128,...); 48 unsigned __int128 __sync_fetch_and_sub_16(volatile unsigned __int128 *, unsigned __int128,...); 31 49 #endif 32 50 33 51 char __sync_fetch_and_or(volatile char *, char,...); 52 char __sync_fetch_and_or_1(volatile char *, char,...); 34 53 signed char __sync_fetch_and_or(volatile signed char *, signed char,...); 54 signed char __sync_fetch_and_or_1(volatile signed char *, signed char,...); 35 55 unsigned char __sync_fetch_and_or(volatile unsigned char *, unsigned char,...); 56 unsigned char __sync_fetch_and_or_1(volatile unsigned char *, unsigned char,...); 36 57 signed short __sync_fetch_and_or(volatile signed short *, signed short,...); 58 signed short __sync_fetch_and_or_2(volatile signed short *, signed short,...); 37 59 unsigned short __sync_fetch_and_or(volatile unsigned short *, unsigned short,...); 60 unsigned short __sync_fetch_and_or_2(volatile unsigned short *, unsigned short,...); 38 61 signed int __sync_fetch_and_or(volatile signed int *, signed int,...); 62 signed int __sync_fetch_and_or_4(volatile signed int *, signed int,...); 39 63 unsigned int __sync_fetch_and_or(volatile unsigned int *, unsigned int,...); 40 signed long int __sync_fetch_and_or(volatile signed long int *, signed long int,...); 41 unsigned long int __sync_fetch_and_or(volatile unsigned long int *, unsigned long int,...); 64 unsigned int __sync_fetch_and_or_4(volatile unsigned int *, unsigned int,...); 42 65 signed long long int __sync_fetch_and_or(volatile signed long long int *, signed long long int,...); 66 signed long long int __sync_fetch_and_or_8(volatile signed long long int *, signed long long int,...); 43 67 unsigned long long int __sync_fetch_and_or(volatile unsigned long long int *, unsigned long long int,...); 68 unsigned long long int __sync_fetch_and_or_8(volatile unsigned long long int *, unsigned long long int,...); 44 69 #if defined(__SIZEOF_INT128__) 45 70 signed __int128 __sync_fetch_and_or(volatile signed __int128 *, signed __int128,...); 71 signed __int128 __sync_fetch_and_or_16(volatile signed __int128 *, signed __int128,...); 46 72 unsigned __int128 __sync_fetch_and_or(volatile unsigned __int128 *, unsigned __int128,...); 73 unsigned __int128 __sync_fetch_and_or_16(volatile unsigned __int128 *, unsigned __int128,...); 47 74 #endif 48 75 49 76 char __sync_fetch_and_and(volatile char *, char,...); 77 char __sync_fetch_and_and_1(volatile char *, char,...); 50 78 signed char __sync_fetch_and_and(volatile signed char *, signed char,...); 79 signed char __sync_fetch_and_and_1(volatile signed char *, signed char,...); 51 80 unsigned char __sync_fetch_and_and(volatile unsigned char *, unsigned char,...); 81 unsigned char __sync_fetch_and_and_1(volatile unsigned char *, unsigned char,...); 52 82 signed short __sync_fetch_and_and(volatile signed short *, signed short,...); 83 signed short __sync_fetch_and_and_2(volatile signed short *, signed short,...); 53 84 unsigned short __sync_fetch_and_and(volatile unsigned short *, unsigned short,...); 85 unsigned short __sync_fetch_and_and_2(volatile unsigned short *, unsigned short,...); 54 86 signed int __sync_fetch_and_and(volatile signed int *, signed int,...); 87 signed int __sync_fetch_and_and_4(volatile signed int *, signed int,...); 55 88 unsigned int __sync_fetch_and_and(volatile unsigned int *, unsigned int,...); 56 signed long int __sync_fetch_and_and(volatile signed long int *, signed long int,...); 57 unsigned long int __sync_fetch_and_and(volatile unsigned long int *, unsigned long int,...); 89 unsigned int __sync_fetch_and_and_4(volatile unsigned int *, unsigned int,...); 58 90 signed long long int __sync_fetch_and_and(volatile signed long long int *, signed long long int,...); 91 signed long long int __sync_fetch_and_and_8(volatile signed long long int *, signed long long int,...); 59 92 unsigned long long int __sync_fetch_and_and(volatile unsigned long long int *, unsigned long long int,...); 93 unsigned long long int __sync_fetch_and_and_8(volatile unsigned long long int *, unsigned long long int,...); 60 94 #if defined(__SIZEOF_INT128__) 61 95 signed __int128 __sync_fetch_and_and(volatile signed __int128 *, signed __int128,...); 96 signed __int128 __sync_fetch_and_and_16(volatile signed __int128 *, signed __int128,...); 62 97 unsigned __int128 __sync_fetch_and_and(volatile unsigned __int128 *, unsigned __int128,...); 98 unsigned __int128 __sync_fetch_and_and_16(volatile unsigned __int128 *, unsigned __int128,...); 63 99 #endif 64 100 65 101 char __sync_fetch_and_xor(volatile char *, char,...); 102 char __sync_fetch_and_xor_1(volatile char *, char,...); 66 103 signed char __sync_fetch_and_xor(volatile signed char *, signed char,...); 104 signed char __sync_fetch_and_xor_1(volatile signed char *, signed char,...); 67 105 unsigned char __sync_fetch_and_xor(volatile unsigned char *, unsigned char,...); 106 unsigned char __sync_fetch_and_xor_1(volatile unsigned char *, unsigned char,...); 68 107 signed short __sync_fetch_and_xor(volatile signed short *, signed short,...); 108 signed short __sync_fetch_and_xor_2(volatile signed short *, signed short,...); 69 109 unsigned short __sync_fetch_and_xor(volatile unsigned short *, unsigned short,...); 110 unsigned short __sync_fetch_and_xor_2(volatile unsigned short *, unsigned short,...); 70 111 signed int __sync_fetch_and_xor(volatile signed int *, signed int,...); 112 signed int __sync_fetch_and_xor_4(volatile signed int *, signed int,...); 71 113 unsigned int __sync_fetch_and_xor(volatile unsigned int *, unsigned int,...); 72 signed long int __sync_fetch_and_xor(volatile signed long int *, signed long int,...); 73 unsigned long int __sync_fetch_and_xor(volatile unsigned long int *, unsigned long int,...); 114 unsigned int __sync_fetch_and_xor_4(volatile unsigned int *, unsigned int,...); 74 115 signed long long int __sync_fetch_and_xor(volatile signed long long int *, signed long long int,...); 116 signed long long int __sync_fetch_and_xor_8(volatile signed long long int *, signed long long int,...); 75 117 unsigned long long int __sync_fetch_and_xor(volatile unsigned long long int *, unsigned long long int,...); 118 unsigned long long int __sync_fetch_and_xor_8(volatile unsigned long long int *, unsigned long long int,...); 76 119 #if defined(__SIZEOF_INT128__) 77 120 signed __int128 __sync_fetch_and_xor(volatile signed __int128 *, signed __int128,...); 121 signed __int128 __sync_fetch_and_xor_16(volatile signed __int128 *, signed __int128,...); 78 122 unsigned __int128 __sync_fetch_and_xor(volatile unsigned __int128 *, unsigned __int128,...); 123 unsigned __int128 __sync_fetch_and_xor_16(volatile unsigned __int128 *, unsigned __int128,...); 79 124 #endif 80 125 81 126 char __sync_fetch_and_nand(volatile char *, char,...); 127 char __sync_fetch_and_nand_1(volatile char *, char,...); 82 128 signed char __sync_fetch_and_nand(volatile signed char *, signed char,...); 129 signed char __sync_fetch_and_nand_1(volatile signed char *, signed char,...); 83 130 unsigned char __sync_fetch_and_nand(volatile unsigned char *, unsigned char,...); 131 unsigned char __sync_fetch_and_nand_1(volatile unsigned char *, unsigned char,...); 84 132 signed short __sync_fetch_and_nand(volatile signed short *, signed short,...); 133 signed short __sync_fetch_and_nand_2(volatile signed short *, signed short,...); 85 134 unsigned short __sync_fetch_and_nand(volatile unsigned short *, unsigned short,...); 135 unsigned short __sync_fetch_and_nand_2(volatile unsigned short *, unsigned short,...); 86 136 signed int __sync_fetch_and_nand(volatile signed int *, signed int,...); 137 signed int __sync_fetch_and_nand_4(volatile signed int *, signed int,...); 87 138 unsigned int __sync_fetch_and_nand(volatile unsigned int *, unsigned int,...); 88 signed long int __sync_fetch_and_nand(volatile signed long int *, signed long int,...); 89 unsigned long int __sync_fetch_and_nand(volatile unsigned long int *, unsigned long int,...); 139 unsigned int __sync_fetch_and_nand_4(volatile unsigned int *, unsigned int,...); 90 140 signed long long int __sync_fetch_and_nand(volatile signed long long int *, signed long long int,...); 141 signed long long int __sync_fetch_and_nand_8(volatile signed long long int *, signed long long int,...); 91 142 unsigned long long int __sync_fetch_and_nand(volatile unsigned long long int *, unsigned long long int,...); 143 unsigned long long int __sync_fetch_and_nand_8(volatile unsigned long long int *, unsigned long long int,...); 92 144 #if defined(__SIZEOF_INT128__) 93 145 signed __int128 __sync_fetch_and_nand(volatile signed __int128 *, signed __int128,...); 146 signed __int128 __sync_fetch_and_nand_16(volatile signed __int128 *, signed __int128,...); 94 147 unsigned __int128 __sync_fetch_and_nand(volatile unsigned __int128 *, unsigned __int128,...); 148 unsigned __int128 __sync_fetch_and_nand_16(volatile unsigned __int128 *, unsigned __int128,...); 95 149 #endif 96 150 97 151 char __sync_add_and_fetch(volatile char *, char,...); 152 char __sync_add_and_fetch_1(volatile char *, char,...); 98 153 signed char __sync_add_and_fetch(volatile signed char *, signed char,...); 154 signed char __sync_add_and_fetch_1(volatile signed char *, signed char,...); 99 155 unsigned char __sync_add_and_fetch(volatile unsigned char *, unsigned char,...); 156 unsigned char __sync_add_and_fetch_1(volatile unsigned char *, unsigned char,...); 100 157 signed short __sync_add_and_fetch(volatile signed short *, signed short,...); 158 signed short __sync_add_and_fetch_2(volatile signed short *, signed short,...); 101 159 unsigned short __sync_add_and_fetch(volatile unsigned short *, unsigned short,...); 160 unsigned short __sync_add_and_fetch_2(volatile unsigned short *, unsigned short,...); 102 161 signed int __sync_add_and_fetch(volatile signed int *, signed int,...); 162 signed int __sync_add_and_fetch_4(volatile signed int *, signed int,...); 103 163 signed int __sync_add_and_fetch(volatile signed int *, signed int,...); 104 signed long int __sync_add_and_fetch(volatile signed long int *, signed long int,...); 105 unsigned long int __sync_add_and_fetch(volatile unsigned long int *, unsigned long int,...); 164 signed int __sync_add_and_fetch_4(volatile signed int *, signed int,...); 106 165 signed long long int __sync_add_and_fetch(volatile signed long long int *, signed long long int,...); 166 signed long long int __sync_add_and_fetch_8(volatile signed long long int *, signed long long int,...); 107 167 unsigned long long int __sync_add_and_fetch(volatile unsigned long long int *, unsigned long long int,...); 168 unsigned long long int __sync_add_and_fetch_8(volatile unsigned long long int *, unsigned long long int,...); 108 169 #if defined(__SIZEOF_INT128__) 109 170 signed __int128 __sync_add_and_fetch(volatile signed __int128 *, signed __int128,...); 171 signed __int128 __sync_add_and_fetch_16(volatile signed __int128 *, signed __int128,...); 110 172 unsigned __int128 __sync_add_and_fetch(volatile unsigned __int128 *, unsigned __int128,...); 173 unsigned __int128 __sync_add_and_fetch_16(volatile unsigned __int128 *, unsigned __int128,...); 111 174 #endif 112 175 113 176 char __sync_sub_and_fetch(volatile char *, char,...); 177 char __sync_sub_and_fetch_1(volatile char *, char,...); 114 178 signed char __sync_sub_and_fetch(volatile signed char *, signed char,...); 179 signed char __sync_sub_and_fetch_1(volatile signed char *, signed char,...); 115 180 unsigned char __sync_sub_and_fetch(volatile unsigned char *, unsigned char,...); 181 unsigned char __sync_sub_and_fetch_1(volatile unsigned char *, unsigned char,...); 116 182 signed short __sync_sub_and_fetch(volatile signed short *, signed short,...); 183 signed short __sync_sub_and_fetch_2(volatile signed short *, signed short,...); 117 184 unsigned short __sync_sub_and_fetch(volatile unsigned short *, unsigned short,...); 185 unsigned short __sync_sub_and_fetch_2(volatile unsigned short *, unsigned short,...); 118 186 signed int __sync_sub_and_fetch(volatile signed int *, signed int,...); 187 signed int __sync_sub_and_fetch_4(volatile signed int *, signed int,...); 119 188 unsigned int __sync_sub_and_fetch(volatile unsigned int *, unsigned int,...); 120 signed long int __sync_sub_and_fetch(volatile signed long int *, signed long int,...); 121 unsigned long int __sync_sub_and_fetch(volatile unsigned long int *, unsigned long int,...); 189 unsigned int __sync_sub_and_fetch_4(volatile unsigned int *, unsigned int,...); 122 190 signed long long int __sync_sub_and_fetch(volatile signed long long int *, signed long long int,...); 191 signed long long int __sync_sub_and_fetch_8(volatile signed long long int *, signed long long int,...); 123 192 unsigned long long int __sync_sub_and_fetch(volatile unsigned long long int *, unsigned long long int,...); 193 unsigned long long int __sync_sub_and_fetch_8(volatile unsigned long long int *, unsigned long long int,...); 124 194 #if defined(__SIZEOF_INT128__) 125 195 signed __int128 __sync_sub_and_fetch(volatile signed __int128 *, signed __int128,...); 196 signed __int128 __sync_sub_and_fetch_16(volatile signed __int128 *, signed __int128,...); 126 197 unsigned __int128 __sync_sub_and_fetch(volatile unsigned __int128 *, unsigned __int128,...); 198 unsigned __int128 __sync_sub_and_fetch_16(volatile unsigned __int128 *, unsigned __int128,...); 127 199 #endif 128 200 129 201 char __sync_or_and_fetch(volatile char *, char,...); 202 char __sync_or_and_fetch_1(volatile char *, char,...); 130 203 signed char __sync_or_and_fetch(volatile signed char *, signed char,...); 204 signed char __sync_or_and_fetch_1(volatile signed char *, signed char,...); 131 205 unsigned char __sync_or_and_fetch(volatile unsigned char *, unsigned char,...); 206 unsigned char __sync_or_and_fetch_1(volatile unsigned char *, unsigned char,...); 132 207 signed short __sync_or_and_fetch(volatile signed short *, signed short,...); 208 signed short __sync_or_and_fetch_2(volatile signed short *, signed short,...); 133 209 unsigned short __sync_or_and_fetch(volatile unsigned short *, unsigned short,...); 210 unsigned short __sync_or_and_fetch_2(volatile unsigned short *, unsigned short,...); 134 211 signed int __sync_or_and_fetch(volatile signed int *, signed int,...); 212 signed int __sync_or_and_fetch_4(volatile signed int *, signed int,...); 135 213 unsigned int __sync_or_and_fetch(volatile unsigned int *, unsigned int,...); 136 signed long int __sync_or_and_fetch(volatile signed long int *, signed long int,...); 137 unsigned long int __sync_or_and_fetch(volatile unsigned long int *, unsigned long int,...); 214 unsigned int __sync_or_and_fetch_4(volatile unsigned int *, unsigned int,...); 138 215 signed long long int __sync_or_and_fetch(volatile signed long long int *, signed long long int,...); 216 signed long long int __sync_or_and_fetch_8(volatile signed long long int *, signed long long int,...); 139 217 unsigned long long int __sync_or_and_fetch(volatile unsigned long long int *, unsigned long long int,...); 218 unsigned long long int __sync_or_and_fetch_8(volatile unsigned long long int *, unsigned long long int,...); 140 219 #if defined(__SIZEOF_INT128__) 141 220 signed __int128 __sync_or_and_fetch(volatile signed __int128 *, signed __int128,...); 221 signed __int128 __sync_or_and_fetch_16(volatile signed __int128 *, signed __int128,...); 142 222 unsigned __int128 __sync_or_and_fetch(volatile unsigned __int128 *, unsigned __int128,...); 223 unsigned __int128 __sync_or_and_fetch_16(volatile unsigned __int128 *, unsigned __int128,...); 143 224 #endif 144 225 145 226 char __sync_and_and_fetch(volatile char *, char,...); 227 char __sync_and_and_fetch_1(volatile char *, char,...); 146 228 signed char __sync_and_and_fetch(volatile signed char *, signed char,...); 229 signed char __sync_and_and_fetch_1(volatile signed char *, signed char,...); 147 230 unsigned char __sync_and_and_fetch(volatile unsigned char *, unsigned char,...); 231 unsigned char __sync_and_and_fetch_1(volatile unsigned char *, unsigned char,...); 148 232 signed short __sync_and_and_fetch(volatile signed short *, signed short,...); 233 signed short __sync_and_and_fetch_2(volatile signed short *, signed short,...); 149 234 unsigned short __sync_and_and_fetch(volatile unsigned short *, unsigned short,...); 235 unsigned short __sync_and_and_fetch_2(volatile unsigned short *, unsigned short,...); 150 236 signed int __sync_and_and_fetch(volatile signed int *, signed int,...); 237 signed int __sync_and_and_fetch_4(volatile signed int *, signed int,...); 151 238 unsigned int __sync_and_and_fetch(volatile unsigned int *, unsigned int,...); 152 signed long int __sync_and_and_fetch(volatile signed long int *, signed long int,...); 153 unsigned long int __sync_and_and_fetch(volatile unsigned long int *, unsigned long int,...); 239 unsigned int __sync_and_and_fetch_4(volatile unsigned int *, unsigned int,...); 154 240 signed long long int __sync_and_and_fetch(volatile signed long long int *, signed long long int,...); 241 signed long long int __sync_and_and_fetch_8(volatile signed long long int *, signed long long int,...); 155 242 unsigned long long int __sync_and_and_fetch(volatile unsigned long long int *, unsigned long long int,...); 243 unsigned long long int __sync_and_and_fetch_8(volatile unsigned long long int *, unsigned long long int,...); 156 244 #if defined(__SIZEOF_INT128__) 157 245 signed __int128 __sync_and_and_fetch(volatile signed __int128 *, signed __int128,...); 246 signed __int128 __sync_and_and_fetch_16(volatile signed __int128 *, signed __int128,...); 158 247 unsigned __int128 __sync_and_and_fetch(volatile unsigned __int128 *, unsigned __int128,...); 248 unsigned __int128 __sync_and_and_fetch_16(volatile unsigned __int128 *, unsigned __int128,...); 159 249 #endif 160 250 161 251 char __sync_xor_and_fetch(volatile char *, char,...); 252 char __sync_xor_and_fetch_1(volatile char *, char,...); 162 253 signed char __sync_xor_and_fetch(volatile signed char *, signed char,...); 254 signed char __sync_xor_and_fetch_1(volatile signed char *, signed char,...); 163 255 unsigned char __sync_xor_and_fetch(volatile unsigned char *, unsigned char,...); 256 unsigned char __sync_xor_and_fetch_1(volatile unsigned char *, unsigned char,...); 164 257 signed short __sync_xor_and_fetch(volatile signed short *, signed short,...); 258 signed short __sync_xor_and_fetch_2(volatile signed short *, signed short,...); 165 259 unsigned short __sync_xor_and_fetch(volatile unsigned short *, unsigned short,...); 260 unsigned short __sync_xor_and_fetch_2(volatile unsigned short *, unsigned short,...); 166 261 signed int __sync_xor_and_fetch(volatile signed int *, signed int,...); 262 signed int __sync_xor_and_fetch_4(volatile signed int *, signed int,...); 167 263 unsigned int __sync_xor_and_fetch(volatile unsigned int *, unsigned int,...); 168 signed long int __sync_xor_and_fetch(volatile signed long int *, signed long int,...); 169 unsigned long int __sync_xor_and_fetch(volatile unsigned long int *, unsigned long int,...); 264 unsigned int __sync_xor_and_fetch_4(volatile unsigned int *, unsigned int,...); 170 265 signed long long int __sync_xor_and_fetch(volatile signed long long int *, signed long long int,...); 266 signed long long int __sync_xor_and_fetch_8(volatile signed long long int *, signed long long int,...); 171 267 unsigned long long int __sync_xor_and_fetch(volatile unsigned long long int *, unsigned long long int,...); 268 unsigned long long int __sync_xor_and_fetch_8(volatile unsigned long long int *, unsigned long long int,...); 172 269 #if defined(__SIZEOF_INT128__) 173 270 signed __int128 __sync_xor_and_fetch(volatile signed __int128 *, signed __int128,...); 271 signed __int128 __sync_xor_and_fetch_16(volatile signed __int128 *, signed __int128,...); 174 272 unsigned __int128 __sync_xor_and_fetch(volatile unsigned __int128 *, unsigned __int128,...); 273 unsigned __int128 __sync_xor_and_fetch_16(volatile unsigned __int128 *, unsigned __int128,...); 175 274 #endif 176 275 177 276 char __sync_nand_and_fetch(volatile char *, char,...); 277 char __sync_nand_and_fetch_1(volatile char *, char,...); 178 278 signed char __sync_nand_and_fetch(volatile signed char *, signed char,...); 279 signed char __sync_nand_and_fetch_1(volatile signed char *, signed char,...); 179 280 unsigned char __sync_nand_and_fetch(volatile unsigned char *, unsigned char,...); 281 unsigned char __sync_nand_and_fetch_1(volatile unsigned char *, unsigned char,...); 180 282 signed short __sync_nand_and_fetch(volatile signed short *, signed short,...); 283 signed short __sync_nand_and_fetch_2(volatile signed short *, signed short,...); 181 284 unsigned short __sync_nand_and_fetch(volatile unsigned short *, unsigned short,...); 285 unsigned short __sync_nand_and_fetch_2(volatile unsigned short *, unsigned short,...); 182 286 signed int __sync_nand_and_fetch(volatile signed int *, signed int,...); 287 signed int __sync_nand_and_fetch_4(volatile signed int *, signed int,...); 183 288 unsigned int __sync_nand_and_fetch(volatile unsigned int *, unsigned int,...); 184 signed long int __sync_nand_and_fetch(volatile signed long int *, signed long int,...); 185 unsigned long int __sync_nand_and_fetch(volatile unsigned long int *, unsigned long int,...); 289 unsigned int __sync_nand_and_fetch_4(volatile unsigned int *, unsigned int,...); 186 290 signed long long int __sync_nand_and_fetch(volatile signed long long int *, signed long long int,...); 291 signed long long int __sync_nand_and_fetch_8(volatile signed long long int *, signed long long int,...); 187 292 unsigned long long int __sync_nand_and_fetch(volatile unsigned long long int *, unsigned long long int,...); 293 unsigned long long int __sync_nand_and_fetch_8(volatile unsigned long long int *, unsigned long long int,...); 188 294 #if defined(__SIZEOF_INT128__) 189 295 signed __int128 __sync_nand_and_fetch(volatile signed __int128 *, signed __int128,...); 296 signed __int128 __sync_nand_and_fetch_16(volatile signed __int128 *, signed __int128,...); 190 297 unsigned __int128 __sync_nand_and_fetch(volatile unsigned __int128 *, unsigned __int128,...); 298 unsigned __int128 __sync_nand_and_fetch_16(volatile unsigned __int128 *, unsigned __int128,...); 191 299 #endif 192 300 193 301 _Bool __sync_bool_compare_and_swap(volatile char *, char, char,...); 302 _Bool __sync_bool_compare_and_swap_1(volatile char *, char, char,...); 194 303 _Bool __sync_bool_compare_and_swap(volatile signed char *, signed char, signed char,...); 304 _Bool __sync_bool_compare_and_swap_1(volatile signed char *, signed char, signed char,...); 195 305 _Bool __sync_bool_compare_and_swap(volatile unsigned char *, unsigned char, unsigned char,...); 306 _Bool __sync_bool_compare_and_swap_1(volatile unsigned char *, unsigned char, unsigned char,...); 196 307 _Bool __sync_bool_compare_and_swap(volatile short *, signed short, signed short,...); 308 _Bool __sync_bool_compare_and_swap_2(volatile short *, signed short, signed short,...); 197 309 _Bool __sync_bool_compare_and_swap(volatile short *, unsigned short, unsigned short,...); 310 _Bool __sync_bool_compare_and_swap_2(volatile short *, unsigned short, unsigned short,...); 198 311 _Bool __sync_bool_compare_and_swap(volatile signed int *, signed int, signed int,...); 312 _Bool __sync_bool_compare_and_swap_4(volatile signed int *, signed int, signed int,...); 199 313 _Bool __sync_bool_compare_and_swap(volatile unsigned int *, unsigned int, unsigned int,...); 200 _Bool __sync_bool_compare_and_swap(volatile signed long int *, signed long int, signed long int,...); 201 _Bool __sync_bool_compare_and_swap(volatile unsigned long int *, unsigned long int, unsigned long int,...); 314 _Bool __sync_bool_compare_and_swap_4(volatile unsigned int *, unsigned int, unsigned int,...); 202 315 _Bool __sync_bool_compare_and_swap(volatile signed long long int *, signed long long int, signed long long int,...); 316 _Bool __sync_bool_compare_and_swap_8(volatile signed long long int *, signed long long int, signed long long int,...); 203 317 _Bool __sync_bool_compare_and_swap(volatile unsigned long long int *, unsigned long long int, unsigned long long int,...); 318 _Bool __sync_bool_compare_and_swap_8(volatile unsigned long long int *, unsigned long long int, unsigned long long int,...); 204 319 #if defined(__SIZEOF_INT128__) 205 320 _Bool __sync_bool_compare_and_swap(volatile signed __int128 *, signed __int128, signed __int128,...); 321 _Bool __sync_bool_compare_and_swap_16(volatile signed __int128 *, signed __int128, signed __int128,...); 206 322 _Bool __sync_bool_compare_and_swap(volatile unsigned __int128 *, unsigned __int128, unsigned __int128,...); 323 _Bool __sync_bool_compare_and_swap_16(volatile unsigned __int128 *, unsigned __int128, unsigned __int128,...); 207 324 #endif 208 325 forall(dtype T) _Bool __sync_bool_compare_and_swap(T * volatile *, T *, T*, ...); 209 326 210 327 char __sync_val_compare_and_swap(volatile char *, char, char,...); 328 char __sync_val_compare_and_swap_1(volatile char *, char, char,...); 211 329 signed char __sync_val_compare_and_swap(volatile signed char *, signed char, signed char,...); 330 signed char __sync_val_compare_and_swap_1(volatile signed char *, signed char, signed char,...); 212 331 unsigned char __sync_val_compare_and_swap(volatile unsigned char *, unsigned char, unsigned char,...); 332 unsigned char __sync_val_compare_and_swap_1(volatile unsigned char *, unsigned char, unsigned char,...); 213 333 signed short __sync_val_compare_and_swap(volatile signed short *, signed short, signed short,...); 334 signed short __sync_val_compare_and_swap_2(volatile signed short *, signed short, signed short,...); 214 335 unsigned short __sync_val_compare_and_swap(volatile unsigned short *, unsigned short, unsigned short,...); 336 unsigned short __sync_val_compare_and_swap_2(volatile unsigned short *, unsigned short, unsigned short,...); 215 337 signed int __sync_val_compare_and_swap(volatile signed int *, signed int, signed int,...); 338 signed int __sync_val_compare_and_swap_4(volatile signed int *, signed int, signed int,...); 216 339 unsigned int __sync_val_compare_and_swap(volatile unsigned int *, unsigned int, unsigned int,...); 217 signed long int __sync_val_compare_and_swap(volatile signed long int *, signed long int, signed long int,...); 218 unsigned long int __sync_val_compare_and_swap(volatile unsigned long int *, unsigned long int, unsigned long int,...); 340 unsigned int __sync_val_compare_and_swap_4(volatile unsigned int *, unsigned int, unsigned int,...); 219 341 signed long long int __sync_val_compare_and_swap(volatile signed long long int *, signed long long int, signed long long int,...); 342 signed long long int __sync_val_compare_and_swap_8(volatile signed long long int *, signed long long int, signed long long int,...); 220 343 unsigned long long int __sync_val_compare_and_swap(volatile unsigned long long int *, unsigned long long int, unsigned long long int,...); 344 unsigned long long int __sync_val_compare_and_swap_8(volatile unsigned long long int *, unsigned long long int, unsigned long long int,...); 221 345 #if defined(__SIZEOF_INT128__) 222 346 signed __int128 __sync_val_compare_and_swap(volatile signed __int128 *, signed __int128, signed __int128,...); 347 signed __int128 __sync_val_compare_and_swap_16(volatile signed __int128 *, signed __int128, signed __int128,...); 223 348 unsigned __int128 __sync_val_compare_and_swap(volatile unsigned __int128 *, unsigned __int128, unsigned __int128,...); 349 unsigned __int128 __sync_val_compare_and_swap_16(volatile unsigned __int128 *, unsigned __int128, unsigned __int128,...); 224 350 #endif 225 351 forall(dtype T) T * __sync_val_compare_and_swap(T * volatile *, T *, T*,...); 226 352 227 353 char __sync_lock_test_and_set(volatile char *, char,...); 354 char __sync_lock_test_and_set_1(volatile char *, char,...); 228 355 signed char __sync_lock_test_and_set(volatile signed char *, signed char,...); 356 signed char __sync_lock_test_and_set_1(volatile signed char *, signed char,...); 229 357 unsigned char __sync_lock_test_and_set(volatile unsigned char *, unsigned char,...); 358 unsigned char __sync_lock_test_and_set_1(volatile unsigned char *, unsigned char,...); 230 359 signed short __sync_lock_test_and_set(volatile signed short *, signed short,...); 360 signed short __sync_lock_test_and_set_2(volatile signed short *, signed short,...); 231 361 unsigned short __sync_lock_test_and_set(volatile unsigned short *, unsigned short,...); 362 unsigned short __sync_lock_test_and_set_2(volatile unsigned short *, unsigned short,...); 232 363 signed int __sync_lock_test_and_set(volatile signed int *, signed int,...); 364 signed int __sync_lock_test_and_set_4(volatile signed int *, signed int,...); 233 365 unsigned int __sync_lock_test_and_set(volatile unsigned int *, unsigned int,...); 234 signed long int __sync_lock_test_and_set(volatile signed long int *, signed long int,...); 235 unsigned long int __sync_lock_test_and_set(volatile unsigned long int *, unsigned long int,...); 366 unsigned int __sync_lock_test_and_set_4(volatile unsigned int *, unsigned int,...); 236 367 signed long long int __sync_lock_test_and_set(volatile signed long long int *, signed long long int,...); 368 signed long long int __sync_lock_test_and_set_8(volatile signed long long int *, signed long long int,...); 237 369 unsigned long long int __sync_lock_test_and_set(volatile unsigned long long int *, unsigned long long int,...); 370 unsigned long long int __sync_lock_test_and_set_8(volatile unsigned long long int *, unsigned long long int,...); 238 371 #if defined(__SIZEOF_INT128__) 239 372 signed __int128 __sync_lock_test_and_set(volatile signed __int128 *, signed __int128,...); 373 signed __int128 __sync_lock_test_and_set_16(volatile signed __int128 *, signed __int128,...); 240 374 unsigned __int128 __sync_lock_test_and_set(volatile unsigned __int128 *, unsigned __int128,...); 375 unsigned __int128 __sync_lock_test_and_set_16(volatile unsigned __int128 *, unsigned __int128,...); 241 376 #endif 242 377 243 378 void __sync_lock_release(volatile char *,...); 379 void __sync_lock_release_1(volatile char *,...); 244 380 void __sync_lock_release(volatile signed char *,...); 381 void __sync_lock_release_1(volatile signed char *,...); 245 382 void __sync_lock_release(volatile unsigned char *,...); 383 void __sync_lock_release_1(volatile unsigned char *,...); 246 384 void __sync_lock_release(volatile signed short *,...); 385 void __sync_lock_release_2(volatile signed short *,...); 247 386 void __sync_lock_release(volatile unsigned short *,...); 387 void __sync_lock_release_2(volatile unsigned short *,...); 248 388 void __sync_lock_release(volatile signed int *,...); 389 void __sync_lock_release_4(volatile signed int *,...); 249 390 void __sync_lock_release(volatile unsigned int *,...); 250 void __sync_lock_release(volatile signed long int *,...); 251 void __sync_lock_release(volatile unsigned long int *,...); 391 void __sync_lock_release_4(volatile unsigned int *,...); 252 392 void __sync_lock_release(volatile signed long long int *,...); 393 void __sync_lock_release_8(volatile signed long long int *,...); 253 394 void __sync_lock_release(volatile unsigned long long int *,...); 395 void __sync_lock_release_8(volatile unsigned long long int *,...); 254 396 #if defined(__SIZEOF_INT128__) 255 397 void __sync_lock_release(volatile signed __int128 *,...); 398 void __sync_lock_release_16(volatile signed __int128 *,...); 256 399 void __sync_lock_release(volatile unsigned __int128 *,...); 400 void __sync_lock_release_16(volatile unsigned __int128 *,...); 257 401 #endif 258 402 … … 270 414 _Bool __atomic_test_and_set(volatile signed int *, int); 271 415 _Bool __atomic_test_and_set(volatile unsigned int *, int); 272 _Bool __atomic_test_and_set(volatile signed long int *, int);273 _Bool __atomic_test_and_set(volatile unsigned long int *, int);274 416 _Bool __atomic_test_and_set(volatile signed long long int *, int); 275 417 _Bool __atomic_test_and_set(volatile unsigned long long int *, int); … … 287 429 void __atomic_clear(volatile signed int *, int); 288 430 void __atomic_clear(volatile unsigned int *, int); 289 void __atomic_clear(volatile signed long int *, int);290 void __atomic_clear(volatile unsigned long int *, int);291 431 void __atomic_clear(volatile signed long long int *, int); 292 432 void __atomic_clear(volatile unsigned long long int *, int); … … 296 436 #endif 297 437 298 _Bool __atomic_exchange_n(volatile _Bool *, _Bool, int);299 void __atomic_exchange(volatile _Bool *, volatile _Bool *, volatile _Bool *, int);300 438 char __atomic_exchange_n(volatile char *, char, int); 439 char __atomic_exchange_1(volatile char *, char, int); 301 440 void __atomic_exchange(volatile char *, volatile char *, volatile char *, int); 302 441 signed char __atomic_exchange_n(volatile signed char *, signed char, int); 442 signed char __atomic_exchange_1(volatile signed char *, signed char, int); 303 443 void __atomic_exchange(volatile signed char *, volatile signed char *, volatile signed char *, int); 304 444 unsigned char __atomic_exchange_n(volatile unsigned char *, unsigned char, int); 445 unsigned char __atomic_exchange_1(volatile unsigned char *, unsigned char, int); 305 446 void __atomic_exchange(volatile unsigned char *, volatile unsigned char *, volatile unsigned char *, int); 306 447 signed short __atomic_exchange_n(volatile signed short *, signed short, int); 448 signed short __atomic_exchange_2(volatile signed short *, signed short, int); 307 449 void __atomic_exchange(volatile signed short *, volatile signed short *, volatile signed short *, int); 308 450 unsigned short __atomic_exchange_n(volatile unsigned short *, unsigned short, int); 451 unsigned short __atomic_exchange_2(volatile unsigned short *, unsigned short, int); 309 452 void __atomic_exchange(volatile unsigned short *, volatile unsigned short *, volatile unsigned short *, int); 310 453 signed int __atomic_exchange_n(volatile signed int *, signed int, int); 454 signed int __atomic_exchange_4(volatile signed int *, signed int, int); 311 455 void __atomic_exchange(volatile signed int *, volatile signed int *, volatile signed int *, int); 312 456 unsigned int __atomic_exchange_n(volatile unsigned int *, unsigned int, int); 457 unsigned int __atomic_exchange_4(volatile unsigned int *, unsigned int, int); 313 458 void __atomic_exchange(volatile unsigned int *, volatile unsigned int *, volatile unsigned int *, int); 314 signed long int __atomic_exchange_n(volatile signed long int *, signed long int, int);315 void __atomic_exchange(volatile signed long int *, volatile signed long int *, volatile signed long int *, int);316 unsigned long int __atomic_exchange_n(volatile unsigned long int *, unsigned long int, int);317 void __atomic_exchange(volatile unsigned long int *, volatile unsigned long int *, volatile unsigned long int *, int);318 459 signed long long int __atomic_exchange_n(volatile signed long long int *, signed long long int, int); 460 signed long long int __atomic_exchange_8(volatile signed long long int *, signed long long int, int); 319 461 void __atomic_exchange(volatile signed long long int *, volatile signed long long int *, volatile signed long long int *, int); 320 462 unsigned long long int __atomic_exchange_n(volatile unsigned long long int *, unsigned long long int, int); 463 unsigned long long int __atomic_exchange_8(volatile unsigned long long int *, unsigned long long int, int); 321 464 void __atomic_exchange(volatile unsigned long long int *, volatile unsigned long long int *, volatile unsigned long long int *, int); 322 465 #if defined(__SIZEOF_INT128__) 323 466 signed __int128 __atomic_exchange_n(volatile signed __int128 *, signed __int128, int); 467 signed __int128 __atomic_exchange_16(volatile signed __int128 *, signed __int128, int); 324 468 void __atomic_exchange(volatile signed __int128 *, volatile signed __int128 *, volatile signed __int128 *, int); 325 469 unsigned __int128 __atomic_exchange_n(volatile unsigned __int128 *, unsigned __int128, int); 470 unsigned __int128 __atomic_exchange_16(volatile unsigned __int128 *, unsigned __int128, int); 326 471 void __atomic_exchange(volatile unsigned __int128 *, volatile unsigned __int128 *, volatile unsigned __int128 *, int); 327 472 #endif … … 332 477 void __atomic_load(const volatile _Bool *, volatile _Bool *, int); 333 478 char __atomic_load_n(const volatile char *, int); 479 char __atomic_load_1(const volatile char *, int); 334 480 void __atomic_load(const volatile char *, volatile char *, int); 335 481 signed char __atomic_load_n(const volatile signed char *, int); 482 signed char __atomic_load_1(const volatile signed char *, int); 336 483 void __atomic_load(const volatile signed char *, volatile signed char *, int); 337 484 unsigned char __atomic_load_n(const volatile unsigned char *, int); 485 unsigned char __atomic_load_1(const volatile unsigned char *, int); 338 486 void __atomic_load(const volatile unsigned char *, volatile unsigned char *, int); 339 487 signed short __atomic_load_n(const volatile signed short *, int); 488 signed short __atomic_load_2(const volatile signed short *, int); 340 489 void __atomic_load(const volatile signed short *, volatile signed short *, int); 341 490 unsigned short __atomic_load_n(const volatile unsigned short *, int); 491 unsigned short __atomic_load_2(const volatile unsigned short *, int); 342 492 void __atomic_load(const volatile unsigned short *, volatile unsigned short *, int); 343 493 signed int __atomic_load_n(const volatile signed int *, int); 494 signed int __atomic_load_4(const volatile signed int *, int); 344 495 void __atomic_load(const volatile signed int *, volatile signed int *, int); 345 496 unsigned int __atomic_load_n(const volatile unsigned int *, int); 497 unsigned int __atomic_load_4(const volatile unsigned int *, int); 346 498 void __atomic_load(const volatile unsigned int *, volatile unsigned int *, int); 347 signed long int __atomic_load_n(const volatile signed long int *, int);348 void __atomic_load(const volatile signed long int *, volatile signed long int *, int);349 unsigned long int __atomic_load_n(const volatile unsigned long int *, int);350 void __atomic_load(const volatile unsigned long int *, volatile unsigned long int *, int);351 499 signed long long int __atomic_load_n(const volatile signed long long int *, int); 500 signed long long int __atomic_load_8(const volatile signed long long int *, int); 352 501 void __atomic_load(const volatile signed long long int *, volatile signed long long int *, int); 353 502 unsigned long long int __atomic_load_n(const volatile unsigned long long int *, int); 503 unsigned long long int __atomic_load_8(const volatile unsigned long long int *, int); 354 504 void __atomic_load(const volatile unsigned long long int *, volatile unsigned long long int *, int); 355 505 #if defined(__SIZEOF_INT128__) 356 506 signed __int128 __atomic_load_n(const volatile signed __int128 *, int); 507 signed __int128 __atomic_load_16(const volatile signed __int128 *, int); 357 508 void __atomic_load(const volatile signed __int128 *, volatile signed __int128 *, int); 358 509 unsigned __int128 __atomic_load_n(const volatile unsigned __int128 *, int); 510 unsigned __int128 __atomic_load_16(const volatile unsigned __int128 *, int); 359 511 void __atomic_load(const volatile unsigned __int128 *, volatile unsigned __int128 *, int); 360 512 #endif … … 363 515 364 516 _Bool __atomic_compare_exchange_n(volatile char *, char *, char, _Bool, int, int); 517 _Bool __atomic_compare_exchange_1(volatile char *, char *, char, _Bool, int, int); 365 518 _Bool __atomic_compare_exchange (volatile char *, char *, char *, _Bool, int, int); 366 519 _Bool __atomic_compare_exchange_n(volatile signed char *, signed char *, signed char, _Bool, int, int); 520 _Bool __atomic_compare_exchange_1(volatile signed char *, signed char *, signed char, _Bool, int, int); 367 521 _Bool __atomic_compare_exchange (volatile signed char *, signed char *, signed char *, _Bool, int, int); 368 522 _Bool __atomic_compare_exchange_n(volatile unsigned char *, unsigned char *, unsigned char, _Bool, int, int); 523 _Bool __atomic_compare_exchange_1(volatile unsigned char *, unsigned char *, unsigned char, _Bool, int, int); 369 524 _Bool __atomic_compare_exchange (volatile unsigned char *, unsigned char *, unsigned char *, _Bool, int, int); 370 525 _Bool __atomic_compare_exchange_n(volatile signed short *, signed short *, signed short, _Bool, int, int); 526 _Bool __atomic_compare_exchange_2(volatile signed short *, signed short *, signed short, _Bool, int, int); 371 527 _Bool __atomic_compare_exchange (volatile signed short *, signed short *, signed short *, _Bool, int, int); 372 528 _Bool __atomic_compare_exchange_n(volatile unsigned short *, unsigned short *, unsigned short, _Bool, int, int); 529 _Bool __atomic_compare_exchange_2(volatile unsigned short *, unsigned short *, unsigned short, _Bool, int, int); 373 530 _Bool __atomic_compare_exchange (volatile unsigned short *, unsigned short *, unsigned short *, _Bool, int, int); 374 531 _Bool __atomic_compare_exchange_n(volatile signed int *, signed int *, signed int, _Bool, int, int); 532 _Bool __atomic_compare_exchange_4(volatile signed int *, signed int *, signed int, _Bool, int, int); 375 533 _Bool __atomic_compare_exchange (volatile signed int *, signed int *, signed int *, _Bool, int, int); 376 534 _Bool __atomic_compare_exchange_n(volatile unsigned int *, unsigned int *, unsigned int, _Bool, int, int); 535 _Bool __atomic_compare_exchange_4(volatile unsigned int *, unsigned int *, unsigned int, _Bool, int, int); 377 536 _Bool __atomic_compare_exchange (volatile unsigned int *, unsigned int *, unsigned int *, _Bool, int, int); 378 _Bool __atomic_compare_exchange_n(volatile signed long int *, signed long int *, signed long int, _Bool, int, int);379 _Bool __atomic_compare_exchange (volatile signed long int *, signed long int *, signed long int *, _Bool, int, int);380 _Bool __atomic_compare_exchange_n(volatile unsigned long int *, unsigned long int *, unsigned long int, _Bool, int, int);381 _Bool __atomic_compare_exchange (volatile unsigned long int *, unsigned long int *, unsigned long int *, _Bool, int, int);382 537 _Bool __atomic_compare_exchange_n(volatile signed long long int *, signed long long int *, signed long long int, _Bool, int, int); 538 _Bool __atomic_compare_exchange_8(volatile signed long long int *, signed long long int *, signed long long int, _Bool, int, int); 383 539 _Bool __atomic_compare_exchange (volatile signed long long int *, signed long long int *, signed long long int *, _Bool, int, int); 384 540 _Bool __atomic_compare_exchange_n(volatile unsigned long long int *, unsigned long long int *, unsigned long long int, _Bool, int, int); 541 _Bool __atomic_compare_exchange_8(volatile unsigned long long int *, unsigned long long int *, unsigned long long int, _Bool, int, int); 385 542 _Bool __atomic_compare_exchange (volatile unsigned long long int *, unsigned long long int *, unsigned long long int *, _Bool, int, int); 386 543 #if defined(__SIZEOF_INT128__) 387 544 _Bool __atomic_compare_exchange_n (volatile signed __int128 *, signed __int128 *, signed __int128, _Bool, int, int); 545 _Bool __atomic_compare_exchange_16(volatile signed __int128 *, signed __int128 *, signed __int128, _Bool, int, int); 388 546 _Bool __atomic_compare_exchange (volatile signed __int128 *, signed __int128 *, signed __int128 *, _Bool, int, int); 389 547 _Bool __atomic_compare_exchange_n (volatile unsigned __int128 *, unsigned __int128 *, unsigned __int128, _Bool, int, int); 548 _Bool __atomic_compare_exchange_16(volatile unsigned __int128 *, unsigned __int128 *, unsigned __int128, _Bool, int, int); 390 549 _Bool __atomic_compare_exchange (volatile unsigned __int128 *, unsigned __int128 *, unsigned __int128 *, _Bool, int, int); 391 550 #endif … … 396 555 void __atomic_store(volatile _Bool *, _Bool *, int); 397 556 void __atomic_store_n(volatile char *, char, int); 557 void __atomic_store_1(volatile char *, char, int); 398 558 void __atomic_store(volatile char *, char *, int); 399 559 void __atomic_store_n(volatile signed char *, signed char, int); 560 void __atomic_store_1(volatile signed char *, signed char, int); 400 561 void __atomic_store(volatile signed char *, signed char *, int); 401 562 void __atomic_store_n(volatile unsigned char *, unsigned char, int); 563 void __atomic_store_1(volatile unsigned char *, unsigned char, int); 402 564 void __atomic_store(volatile unsigned char *, unsigned char *, int); 403 565 void __atomic_store_n(volatile signed short *, signed short, int); 566 void __atomic_store_2(volatile signed short *, signed short, int); 404 567 void __atomic_store(volatile signed short *, signed short *, int); 405 568 void __atomic_store_n(volatile unsigned short *, unsigned short, int); 569 void __atomic_store_2(volatile unsigned short *, unsigned short, int); 406 570 void __atomic_store(volatile unsigned short *, unsigned short *, int); 407 571 void __atomic_store_n(volatile signed int *, signed int, int); 572 void __atomic_store_4(volatile signed int *, signed int, int); 408 573 void __atomic_store(volatile signed int *, signed int *, int); 409 574 void __atomic_store_n(volatile unsigned int *, unsigned int, int); 575 void __atomic_store_4(volatile unsigned int *, unsigned int, int); 410 576 void __atomic_store(volatile unsigned int *, unsigned int *, int); 411 void __atomic_store_n(volatile signed long int *, signed long int, int);412 void __atomic_store(volatile signed long int *, signed long int *, int);413 void __atomic_store_n(volatile unsigned long int *, unsigned long int, int);414 void __atomic_store(volatile unsigned long int *, unsigned long int *, int);415 577 void __atomic_store_n(volatile signed long long int *, signed long long int, int); 578 void __atomic_store_8(volatile signed long long int *, signed long long int, int); 416 579 void __atomic_store(volatile signed long long int *, signed long long int *, int); 417 580 void __atomic_store_n(volatile unsigned long long int *, unsigned long long int, int); 581 void __atomic_store_8(volatile unsigned long long int *, unsigned long long int, int); 418 582 void __atomic_store(volatile unsigned long long int *, unsigned long long int *, int); 419 583 #if defined(__SIZEOF_INT128__) 420 584 void __atomic_store_n(volatile signed __int128 *, signed __int128, int); 585 void __atomic_store_16(volatile signed __int128 *, signed __int128, int); 421 586 void __atomic_store(volatile signed __int128 *, signed __int128 *, int); 422 587 void __atomic_store_n(volatile unsigned __int128 *, unsigned __int128, int); 588 void __atomic_store_16(volatile unsigned __int128 *, unsigned __int128, int); 423 589 void __atomic_store(volatile unsigned __int128 *, unsigned __int128 *, int); 424 590 #endif … … 427 593 428 594 char __atomic_add_fetch (volatile char *, char, int); 595 char __atomic_add_fetch_1(volatile char *, char, int); 429 596 signed char __atomic_add_fetch (volatile signed char *, signed char, int); 597 signed char __atomic_add_fetch_1(volatile signed char *, signed char, int); 430 598 unsigned char __atomic_add_fetch (volatile unsigned char *, unsigned char, int); 599 unsigned char __atomic_add_fetch_1(volatile unsigned char *, unsigned char, int); 431 600 signed short __atomic_add_fetch (volatile signed short *, signed short, int); 601 signed short __atomic_add_fetch_2(volatile signed short *, signed short, int); 432 602 unsigned short __atomic_add_fetch (volatile unsigned short *, unsigned short, int); 603 unsigned short __atomic_add_fetch_2(volatile unsigned short *, unsigned short, int); 433 604 signed int __atomic_add_fetch (volatile signed int *, signed int, int); 605 signed int __atomic_add_fetch_4(volatile signed int *, signed int, int); 434 606 unsigned int __atomic_add_fetch (volatile unsigned int *, unsigned int, int); 435 signed long int __atomic_add_fetch (volatile signed long int *, signed long int, int); 436 unsigned long int __atomic_add_fetch (volatile unsigned long int *, unsigned long int, int); 607 unsigned int __atomic_add_fetch_4(volatile unsigned int *, unsigned int, int); 437 608 signed long long int __atomic_add_fetch (volatile signed long long int *, signed long long int, int); 609 signed long long int __atomic_add_fetch_8(volatile signed long long int *, signed long long int, int); 438 610 unsigned long long int __atomic_add_fetch (volatile unsigned long long int *, unsigned long long int, int); 611 unsigned long long int __atomic_add_fetch_8(volatile unsigned long long int *, unsigned long long int, int); 439 612 #if defined(__SIZEOF_INT128__) 440 613 signed __int128 __atomic_add_fetch (volatile signed __int128 *, signed __int128, int); 614 signed __int128 __atomic_add_fetch_16(volatile signed __int128 *, signed __int128, int); 441 615 unsigned __int128 __atomic_add_fetch (volatile unsigned __int128 *, unsigned __int128, int); 616 unsigned __int128 __atomic_add_fetch_16(volatile unsigned __int128 *, unsigned __int128, int); 442 617 #endif 443 618 444 619 char __atomic_sub_fetch (volatile char *, char, int); 620 char __atomic_sub_fetch_1(volatile char *, char, int); 445 621 signed char __atomic_sub_fetch (volatile signed char *, signed char, int); 622 signed char __atomic_sub_fetch_1(volatile signed char *, signed char, int); 446 623 unsigned char __atomic_sub_fetch (volatile unsigned char *, unsigned char, int); 624 unsigned char __atomic_sub_fetch_1(volatile unsigned char *, unsigned char, int); 447 625 signed short __atomic_sub_fetch (volatile signed short *, signed short, int); 626 signed short __atomic_sub_fetch_2(volatile signed short *, signed short, int); 448 627 unsigned short __atomic_sub_fetch (volatile unsigned short *, unsigned short, int); 628 unsigned short __atomic_sub_fetch_2(volatile unsigned short *, unsigned short, int); 449 629 signed int __atomic_sub_fetch (volatile signed int *, signed int, int); 630 signed int __atomic_sub_fetch_4(volatile signed int *, signed int, int); 450 631 unsigned int __atomic_sub_fetch (volatile unsigned int *, unsigned int, int); 451 signed long long int __atomic_sub_fetch (volatile signed long int *, signed long int, int); 452 unsigned long long int __atomic_sub_fetch (volatile unsigned long int *, unsigned long int, int); 632 unsigned int __atomic_sub_fetch_4(volatile unsigned int *, unsigned int, int); 453 633 signed long long int __atomic_sub_fetch (volatile signed long long int *, signed long long int, int); 634 signed long long int __atomic_sub_fetch_8(volatile signed long long int *, signed long long int, int); 454 635 unsigned long long int __atomic_sub_fetch (volatile unsigned long long int *, unsigned long long int, int); 636 unsigned long long int __atomic_sub_fetch_8(volatile unsigned long long int *, unsigned long long int, int); 455 637 #if defined(__SIZEOF_INT128__) 456 638 signed __int128 __atomic_sub_fetch (volatile signed __int128 *, signed __int128, int); 639 signed __int128 __atomic_sub_fetch_16(volatile signed __int128 *, signed __int128, int); 457 640 unsigned __int128 __atomic_sub_fetch (volatile unsigned __int128 *, unsigned __int128, int); 641 unsigned __int128 __atomic_sub_fetch_16(volatile unsigned __int128 *, unsigned __int128, int); 458 642 #endif 459 643 460 644 char __atomic_and_fetch (volatile char *, char, int); 645 char __atomic_and_fetch_1(volatile char *, char, int); 461 646 signed char __atomic_and_fetch (volatile signed char *, signed char, int); 647 signed char __atomic_and_fetch_1(volatile signed char *, signed char, int); 462 648 unsigned char __atomic_and_fetch (volatile unsigned char *, unsigned char, int); 649 unsigned char __atomic_and_fetch_1(volatile unsigned char *, unsigned char, int); 463 650 signed short __atomic_and_fetch (volatile signed short *, signed short, int); 651 signed short __atomic_and_fetch_2(volatile signed short *, signed short, int); 464 652 unsigned short __atomic_and_fetch (volatile unsigned short *, unsigned short, int); 653 unsigned short __atomic_and_fetch_2(volatile unsigned short *, unsigned short, int); 465 654 signed int __atomic_and_fetch (volatile signed int *, signed int, int); 655 signed int __atomic_and_fetch_4(volatile signed int *, signed int, int); 466 656 unsigned int __atomic_and_fetch (volatile unsigned int *, unsigned int, int); 467 signed long int __atomic_and_fetch (volatile signed long int *, signed long int, int); 468 unsigned long int __atomic_and_fetch (volatile unsigned long int *, unsigned long int, int); 657 unsigned int __atomic_and_fetch_4(volatile unsigned int *, unsigned int, int); 469 658 signed long long int __atomic_and_fetch (volatile signed long long int *, signed long long int, int); 659 signed long long int __atomic_and_fetch_8(volatile signed long long int *, signed long long int, int); 470 660 unsigned long long int __atomic_and_fetch (volatile unsigned long long int *, unsigned long long int, int); 661 unsigned long long int __atomic_and_fetch_8(volatile unsigned long long int *, unsigned long long int, int); 471 662 #if defined(__SIZEOF_INT128__) 472 663 signed __int128 __atomic_and_fetch (volatile signed __int128 *, signed __int128, int); 664 signed __int128 __atomic_and_fetch_16(volatile signed __int128 *, signed __int128, int); 473 665 unsigned __int128 __atomic_and_fetch (volatile unsigned __int128 *, unsigned __int128, int); 666 unsigned __int128 __atomic_and_fetch_16(volatile unsigned __int128 *, unsigned __int128, int); 474 667 #endif 475 668 476 669 char __atomic_nand_fetch (volatile char *, char, int); 670 char __atomic_nand_fetch_1(volatile char *, char, int); 477 671 signed char __atomic_nand_fetch (volatile signed char *, signed char, int); 672 signed char __atomic_nand_fetch_1(volatile signed char *, signed char, int); 478 673 unsigned char __atomic_nand_fetch (volatile unsigned char *, unsigned char, int); 674 unsigned char __atomic_nand_fetch_1(volatile unsigned char *, unsigned char, int); 479 675 signed short __atomic_nand_fetch (volatile signed short *, signed short, int); 676 signed short __atomic_nand_fetch_2(volatile signed short *, signed short, int); 480 677 unsigned short __atomic_nand_fetch (volatile unsigned short *, unsigned short, int); 678 unsigned short __atomic_nand_fetch_2(volatile unsigned short *, unsigned short, int); 481 679 signed int __atomic_nand_fetch (volatile signed int *, signed int, int); 680 signed int __atomic_nand_fetch_4(volatile signed int *, signed int, int); 482 681 unsigned int __atomic_nand_fetch (volatile unsigned int *, unsigned int, int); 483 signed long int __atomic_nand_fetch (volatile signed long int *, signed long int, int); 484 unsigned long int __atomic_nand_fetch (volatile unsigned long int *, unsigned long int, int); 682 unsigned int __atomic_nand_fetch_4(volatile unsigned int *, unsigned int, int); 485 683 signed long long int __atomic_nand_fetch (volatile signed long long int *, signed long long int, int); 684 signed long long int __atomic_nand_fetch_8(volatile signed long long int *, signed long long int, int); 486 685 unsigned long long int __atomic_nand_fetch (volatile unsigned long long int *, unsigned long long int, int); 686 unsigned long long int __atomic_nand_fetch_8(volatile unsigned long long int *, unsigned long long int, int); 487 687 #if defined(__SIZEOF_INT128__) 488 688 signed __int128 __atomic_nand_fetch (volatile signed __int128 *, signed __int128, int); 689 signed __int128 __atomic_nand_fetch_16(volatile signed __int128 *, signed __int128, int); 489 690 unsigned __int128 __atomic_nand_fetch (volatile unsigned __int128 *, unsigned __int128, int); 691 unsigned __int128 __atomic_nand_fetch_16(volatile unsigned __int128 *, unsigned __int128, int); 490 692 #endif 491 693 492 694 char __atomic_xor_fetch (volatile char *, char, int); 695 char __atomic_xor_fetch_1(volatile char *, char, int); 493 696 signed char __atomic_xor_fetch (volatile signed char *, signed char, int); 697 signed char __atomic_xor_fetch_1(volatile signed char *, signed char, int); 494 698 unsigned char __atomic_xor_fetch (volatile unsigned char *, unsigned char, int); 699 unsigned char __atomic_xor_fetch_1(volatile unsigned char *, unsigned char, int); 495 700 signed short __atomic_xor_fetch (volatile signed short *, signed short, int); 701 signed short __atomic_xor_fetch_2(volatile signed short *, signed short, int); 496 702 unsigned short __atomic_xor_fetch (volatile unsigned short *, unsigned short, int); 703 unsigned short __atomic_xor_fetch_2(volatile unsigned short *, unsigned short, int); 497 704 signed int __atomic_xor_fetch (volatile signed int *, signed int, int); 705 signed int __atomic_xor_fetch_4(volatile signed int *, signed int, int); 498 706 unsigned int __atomic_xor_fetch (volatile unsigned int *, unsigned int, int); 499 signed long int __atomic_xor_fetch (volatile signed long int *, signed long int, int); 500 unsigned long int __atomic_xor_fetch (volatile unsigned long int *, unsigned long int, int); 707 unsigned int __atomic_xor_fetch_4(volatile unsigned int *, unsigned int, int); 501 708 signed long long int __atomic_xor_fetch (volatile signed long long int *, signed long long int, int); 709 signed long long int __atomic_xor_fetch_8(volatile signed long long int *, signed long long int, int); 502 710 unsigned long long int __atomic_xor_fetch (volatile unsigned long long int *, unsigned long long int, int); 711 unsigned long long int __atomic_xor_fetch_8(volatile unsigned long long int *, unsigned long long int, int); 503 712 #if defined(__SIZEOF_INT128__) 504 713 signed __int128 __atomic_xor_fetch (volatile signed __int128 *, signed __int128, int); 714 signed __int128 __atomic_xor_fetch_16(volatile signed __int128 *, signed __int128, int); 505 715 unsigned __int128 __atomic_xor_fetch (volatile unsigned __int128 *, unsigned __int128, int); 716 unsigned __int128 __atomic_xor_fetch_16(volatile unsigned __int128 *, unsigned __int128, int); 506 717 #endif 507 718 508 719 char __atomic_or_fetch (volatile char *, char, int); 720 char __atomic_or_fetch_1(volatile char *, char, int); 509 721 signed char __atomic_or_fetch (volatile signed char *, signed char, int); 722 signed char __atomic_or_fetch_1(volatile signed char *, signed char, int); 510 723 unsigned char __atomic_or_fetch (volatile unsigned char *, unsigned char, int); 724 unsigned char __atomic_or_fetch_1(volatile unsigned char *, unsigned char, int); 511 725 signed short __atomic_or_fetch (volatile signed short *, signed short, int); 726 signed short __atomic_or_fetch_2(volatile signed short *, signed short, int); 512 727 unsigned short __atomic_or_fetch (volatile unsigned short *, unsigned short, int); 728 unsigned short __atomic_or_fetch_2(volatile unsigned short *, unsigned short, int); 513 729 signed int __atomic_or_fetch (volatile signed int *, signed int, int); 730 signed int __atomic_or_fetch_4(volatile signed int *, signed int, int); 514 731 unsigned int __atomic_or_fetch (volatile unsigned int *, unsigned int, int); 515 signed long int __atomic_or_fetch (volatile signed long int *, signed long int, int); 516 unsigned long int __atomic_or_fetch (volatile unsigned long int *, unsigned long int, int); 732 unsigned int __atomic_or_fetch_4(volatile unsigned int *, unsigned int, int); 517 733 signed long long int __atomic_or_fetch (volatile signed long long int *, signed long long int, int); 734 signed long long int __atomic_or_fetch_8(volatile signed long long int *, signed long long int, int); 518 735 unsigned long long int __atomic_or_fetch (volatile unsigned long long int *, unsigned long long int, int); 736 unsigned long long int __atomic_or_fetch_8(volatile unsigned long long int *, unsigned long long int, int); 519 737 #if defined(__SIZEOF_INT128__) 520 738 signed __int128 __atomic_or_fetch (volatile signed __int128 *, signed __int128, int); 739 signed __int128 __atomic_or_fetch_16(volatile signed __int128 *, signed __int128, int); 521 740 unsigned __int128 __atomic_or_fetch (volatile unsigned __int128 *, unsigned __int128, int); 741 unsigned __int128 __atomic_or_fetch_16(volatile unsigned __int128 *, unsigned __int128, int); 522 742 #endif 523 743 524 744 char __atomic_fetch_add (volatile char *, char, int); 745 char __atomic_fetch_add_1(volatile char *, char, int); 525 746 signed char __atomic_fetch_add (volatile signed char *, signed char, int); 747 signed char __atomic_fetch_add_1(volatile signed char *, signed char, int); 526 748 unsigned char __atomic_fetch_add (volatile unsigned char *, unsigned char, int); 749 unsigned char __atomic_fetch_add_1(volatile unsigned char *, unsigned char, int); 527 750 signed short __atomic_fetch_add (volatile signed short *, signed short, int); 751 signed short __atomic_fetch_add_2(volatile signed short *, signed short, int); 528 752 unsigned short __atomic_fetch_add (volatile unsigned short *, unsigned short, int); 753 unsigned short __atomic_fetch_add_2(volatile unsigned short *, unsigned short, int); 529 754 signed int __atomic_fetch_add (volatile signed int *, signed int, int); 755 signed int __atomic_fetch_add_4(volatile signed int *, signed int, int); 530 756 unsigned int __atomic_fetch_add (volatile unsigned int *, unsigned int, int); 531 signed long int __atomic_fetch_add (volatile signed long int *, signed long int, int); 532 unsigned long int __atomic_fetch_add (volatile unsigned long int *, unsigned long int, int); 757 unsigned int __atomic_fetch_add_4(volatile unsigned int *, unsigned int, int); 533 758 signed long long int __atomic_fetch_add (volatile signed long long int *, signed long long int, int); 759 signed long long int __atomic_fetch_add_8(volatile signed long long int *, signed long long int, int); 534 760 unsigned long long int __atomic_fetch_add (volatile unsigned long long int *, unsigned long long int, int); 761 unsigned long long int __atomic_fetch_add_8(volatile unsigned long long int *, unsigned long long int, int); 535 762 #if defined(__SIZEOF_INT128__) 536 763 signed __int128 __atomic_fetch_add (volatile signed __int128 *, signed __int128, int); 764 signed __int128 __atomic_fetch_add_16(volatile signed __int128 *, signed __int128, int); 537 765 unsigned __int128 __atomic_fetch_add (volatile unsigned __int128 *, unsigned __int128, int); 766 unsigned __int128 __atomic_fetch_add_16(volatile unsigned __int128 *, unsigned __int128, int); 538 767 #endif 539 768 540 769 char __atomic_fetch_sub (volatile char *, char, int); 770 char __atomic_fetch_sub_1(volatile char *, char, int); 541 771 signed char __atomic_fetch_sub (volatile signed char *, signed char, int); 772 signed char __atomic_fetch_sub_1(volatile signed char *, signed char, int); 542 773 unsigned char __atomic_fetch_sub (volatile unsigned char *, unsigned char, int); 774 unsigned char __atomic_fetch_sub_1(volatile unsigned char *, unsigned char, int); 543 775 signed short __atomic_fetch_sub (volatile signed short *, signed short, int); 776 signed short __atomic_fetch_sub_2(volatile signed short *, signed short, int); 544 777 unsigned short __atomic_fetch_sub (volatile unsigned short *, unsigned short, int); 778 unsigned short __atomic_fetch_sub_2(volatile unsigned short *, unsigned short, int); 545 779 signed int __atomic_fetch_sub (volatile signed int *, signed int, int); 780 signed int __atomic_fetch_sub_4(volatile signed int *, signed int, int); 546 781 unsigned int __atomic_fetch_sub (volatile unsigned int *, unsigned int, int); 547 signed long int __atomic_fetch_sub (volatile signed long int *, signed long int, int); 548 unsigned long int __atomic_fetch_sub (volatile unsigned long int *, unsigned long int, int); 782 unsigned int __atomic_fetch_sub_4(volatile unsigned int *, unsigned int, int); 549 783 signed long long int __atomic_fetch_sub (volatile signed long long int *, signed long long int, int); 784 signed long long int __atomic_fetch_sub_8(volatile signed long long int *, signed long long int, int); 550 785 unsigned long long int __atomic_fetch_sub (volatile unsigned long long int *, unsigned long long int, int); 786 unsigned long long int __atomic_fetch_sub_8(volatile unsigned long long int *, unsigned long long int, int); 551 787 #if defined(__SIZEOF_INT128__) 552 788 signed __int128 __atomic_fetch_sub (volatile signed __int128 *, signed __int128, int); 789 signed __int128 __atomic_fetch_sub_16(volatile signed __int128 *, signed __int128, int); 553 790 unsigned __int128 __atomic_fetch_sub (volatile unsigned __int128 *, unsigned __int128, int); 791 unsigned __int128 __atomic_fetch_sub_16(volatile unsigned __int128 *, unsigned __int128, int); 554 792 #endif 555 793 556 794 char __atomic_fetch_and (volatile char *, char, int); 795 char __atomic_fetch_and_1(volatile char *, char, int); 557 796 signed char __atomic_fetch_and (volatile signed char *, signed char, int); 797 signed char __atomic_fetch_and_1(volatile signed char *, signed char, int); 558 798 unsigned char __atomic_fetch_and (volatile unsigned char *, unsigned char, int); 799 unsigned char __atomic_fetch_and_1(volatile unsigned char *, unsigned char, int); 559 800 signed short __atomic_fetch_and (volatile signed short *, signed short, int); 801 signed short __atomic_fetch_and_2(volatile signed short *, signed short, int); 560 802 unsigned short __atomic_fetch_and (volatile unsigned short *, unsigned short, int); 803 unsigned short __atomic_fetch_and_2(volatile unsigned short *, unsigned short, int); 561 804 signed int __atomic_fetch_and (volatile signed int *, signed int, int); 805 signed int __atomic_fetch_and_4(volatile signed int *, signed int, int); 562 806 unsigned int __atomic_fetch_and (volatile unsigned int *, unsigned int, int); 563 signed long int __atomic_fetch_and (volatile signed long int *, signed long int, int); 564 unsigned long int __atomic_fetch_and (volatile unsigned long int *, unsigned long int, int); 807 unsigned int __atomic_fetch_and_4(volatile unsigned int *, unsigned int, int); 565 808 signed long long int __atomic_fetch_and (volatile signed long long int *, signed long long int, int); 809 signed long long int __atomic_fetch_and_8(volatile signed long long int *, signed long long int, int); 566 810 unsigned long long int __atomic_fetch_and (volatile unsigned long long int *, unsigned long long int, int); 811 unsigned long long int __atomic_fetch_and_8(volatile unsigned long long int *, unsigned long long int, int); 567 812 #if defined(__SIZEOF_INT128__) 568 813 signed __int128 __atomic_fetch_and (volatile signed __int128 *, signed __int128, int); 814 signed __int128 __atomic_fetch_and_16(volatile signed __int128 *, signed __int128, int); 569 815 unsigned __int128 __atomic_fetch_and (volatile unsigned __int128 *, unsigned __int128, int); 816 unsigned __int128 __atomic_fetch_and_16(volatile unsigned __int128 *, unsigned __int128, int); 570 817 #endif 571 818 572 819 char __atomic_fetch_nand (volatile char *, char, int); 820 char __atomic_fetch_nand_1(volatile char *, char, int); 573 821 signed char __atomic_fetch_nand (volatile signed char *, signed char, int); 822 signed char __atomic_fetch_nand_1(volatile signed char *, signed char, int); 574 823 unsigned char __atomic_fetch_nand (volatile unsigned char *, unsigned char, int); 824 unsigned char __atomic_fetch_nand_1(volatile unsigned char *, unsigned char, int); 575 825 signed short __atomic_fetch_nand (volatile signed short *, signed short, int); 826 signed short __atomic_fetch_nand_2(volatile signed short *, signed short, int); 576 827 unsigned short __atomic_fetch_nand (volatile unsigned short *, unsigned short, int); 828 unsigned short __atomic_fetch_nand_2(volatile unsigned short *, unsigned short, int); 577 829 signed int __atomic_fetch_nand (volatile signed int *, signed int, int); 830 signed int __atomic_fetch_nand_4(volatile signed int *, signed int, int); 578 831 unsigned int __atomic_fetch_nand (volatile unsigned int *, unsigned int, int); 579 signed long int __atomic_fetch_nand (volatile signed long int *, signed long int, int); 580 unsigned long int __atomic_fetch_nand (volatile unsigned long int *, unsigned long int, int); 832 unsigned int __atomic_fetch_nand_4(volatile unsigned int *, unsigned int, int); 581 833 signed long long int __atomic_fetch_nand (volatile signed long long int *, signed long long int, int); 834 signed long long int __atomic_fetch_nand_8(volatile signed long long int *, signed long long int, int); 582 835 unsigned long long int __atomic_fetch_nand (volatile unsigned long long int *, unsigned long long int, int); 836 unsigned long long int __atomic_fetch_nand_8(volatile unsigned long long int *, unsigned long long int, int); 583 837 #if defined(__SIZEOF_INT128__) 584 838 signed __int128 __atomic_fetch_nand (volatile signed __int128 *, signed __int128, int); 839 signed __int128 __atomic_fetch_nand_16(volatile signed __int128 *, signed __int128, int); 585 840 unsigned __int128 __atomic_fetch_nand (volatile unsigned __int128 *, unsigned __int128, int); 841 unsigned __int128 __atomic_fetch_nand_16(volatile unsigned __int128 *, unsigned __int128, int); 586 842 #endif 587 843 588 844 char __atomic_fetch_xor (volatile char *, char, int); 845 char __atomic_fetch_xor_1(volatile char *, char, int); 589 846 signed char __atomic_fetch_xor (volatile signed char *, signed char, int); 847 signed char __atomic_fetch_xor_1(volatile signed char *, signed char, int); 590 848 unsigned char __atomic_fetch_xor (volatile unsigned char *, unsigned char, int); 849 unsigned char __atomic_fetch_xor_1(volatile unsigned char *, unsigned char, int); 591 850 signed short __atomic_fetch_xor (volatile signed short *, signed short, int); 851 signed short __atomic_fetch_xor_2(volatile signed short *, signed short, int); 592 852 unsigned short __atomic_fetch_xor (volatile unsigned short *, unsigned short, int); 853 unsigned short __atomic_fetch_xor_2(volatile unsigned short *, unsigned short, int); 593 854 signed int __atomic_fetch_xor (volatile signed int *, signed int, int); 855 signed int __atomic_fetch_xor_4(volatile signed int *, signed int, int); 594 856 unsigned int __atomic_fetch_xor (volatile unsigned int *, unsigned int, int); 595 signed long int __atomic_fetch_xor (volatile signed long int *, signed long int, int); 596 unsigned long int __atomic_fetch_xor (volatile unsigned long int *, unsigned long int, int); 857 unsigned int __atomic_fetch_xor_4(volatile unsigned int *, unsigned int, int); 597 858 signed long long int __atomic_fetch_xor (volatile signed long long int *, signed long long int, int); 859 signed long long int __atomic_fetch_xor_8(volatile signed long long int *, signed long long int, int); 598 860 unsigned long long int __atomic_fetch_xor (volatile unsigned long long int *, unsigned long long int, int); 861 unsigned long long int __atomic_fetch_xor_8(volatile unsigned long long int *, unsigned long long int, int); 599 862 #if defined(__SIZEOF_INT128__) 600 863 signed __int128 __atomic_fetch_xor (volatile signed __int128 *, signed __int128, int); 864 signed __int128 __atomic_fetch_xor_16(volatile signed __int128 *, signed __int128, int); 601 865 unsigned __int128 __atomic_fetch_xor (volatile unsigned __int128 *, unsigned __int128, int); 866 unsigned __int128 __atomic_fetch_xor_16(volatile unsigned __int128 *, unsigned __int128, int); 602 867 #endif 603 868 604 869 char __atomic_fetch_or (volatile char *, char, int); 870 char __atomic_fetch_or_1(volatile char *, char, int); 605 871 signed char __atomic_fetch_or (volatile signed char *, signed char, int); 872 signed char __atomic_fetch_or_1(volatile signed char *, signed char, int); 606 873 unsigned char __atomic_fetch_or (volatile unsigned char *, unsigned char, int); 874 unsigned char __atomic_fetch_or_1(volatile unsigned char *, unsigned char, int); 607 875 signed short __atomic_fetch_or (volatile signed short *, signed short, int); 876 signed short __atomic_fetch_or_2(volatile signed short *, signed short, int); 608 877 unsigned short __atomic_fetch_or (volatile unsigned short *, unsigned short, int); 878 unsigned short __atomic_fetch_or_2(volatile unsigned short *, unsigned short, int); 609 879 signed int __atomic_fetch_or (volatile signed int *, signed int, int); 880 signed int __atomic_fetch_or_4(volatile signed int *, signed int, int); 610 881 unsigned int __atomic_fetch_or (volatile unsigned int *, unsigned int, int); 611 signed long int __atomic_fetch_or (volatile signed long int *, signed long int, int); 612 unsigned long int __atomic_fetch_or (volatile unsigned long int *, unsigned long int, int); 882 unsigned int __atomic_fetch_or_4(volatile unsigned int *, unsigned int, int); 613 883 signed long long int __atomic_fetch_or (volatile signed long long int *, signed long long int, int); 884 signed long long int __atomic_fetch_or_8(volatile signed long long int *, signed long long int, int); 614 885 unsigned long long int __atomic_fetch_or (volatile unsigned long long int *, unsigned long long int, int); 886 unsigned long long int __atomic_fetch_or_8(volatile unsigned long long int *, unsigned long long int, int); 615 887 #if defined(__SIZEOF_INT128__) 616 888 signed __int128 __atomic_fetch_or (volatile signed __int128 *, signed __int128, int); 889 signed __int128 __atomic_fetch_or_16(volatile signed __int128 *, signed __int128, int); 617 890 unsigned __int128 __atomic_fetch_or (volatile unsigned __int128 *, unsigned __int128, int); 891 unsigned __int128 __atomic_fetch_or_16(volatile unsigned __int128 *, unsigned __int128, int); 618 892 #endif 619 893 -
libcfa/src/Makefile.am
r2fa5bd2 raca6a54c 33 33 # The built sources must not depend on the installed headers 34 34 AM_CFAFLAGS = -quiet -cfalib -I$(srcdir)/stdhdr $(if $(findstring ${gdbwaittarget}, ${@}), -XCFA --gdb) @CONFIG_CFAFLAGS@ 35 AM_CFLAGS = -g -Wall -Wno-unused-function -fPIC -pthread@ARCH_FLAGS@ @CONFIG_CFLAGS@35 AM_CFLAGS = -g -Wall -Wno-unused-function -fPIC @ARCH_FLAGS@ @CONFIG_CFLAGS@ 36 36 AM_CCASFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@ 37 37 CFACC = @CFACC@ -
libcfa/src/Makefile.in
r2fa5bd2 raca6a54c 416 416 LTCFACOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ 417 417 $(LIBTOOLFLAGS) --mode=compile $(CFACC) $(DEFS) \ 418 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(AM_CFLAGS) $(CFAFLAGS) $(CFLAGS) 418 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(CFAFLAGS) \ 419 $(AM_CFLAGS) $(CFLAGS) 419 420 420 421 AM_V_CFA = $(am__v_CFA_@AM_V@) … … 444 445 # The built sources must not depend on the installed headers 445 446 AM_CFAFLAGS = -quiet -cfalib -I$(srcdir)/stdhdr $(if $(findstring ${gdbwaittarget}, ${@}), -XCFA --gdb) @CONFIG_CFAFLAGS@ 446 AM_CFLAGS = -g -Wall -Wno-unused-function -fPIC -pthread@ARCH_FLAGS@ @CONFIG_CFLAGS@447 AM_CFLAGS = -g -Wall -Wno-unused-function -fPIC @ARCH_FLAGS@ @CONFIG_CFLAGS@ 447 448 AM_CCASFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@ 448 449 @BUILDLIB_FALSE@headers_nosrc = -
libcfa/src/assert.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Mon Nov 28 12:27:26 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Nov 21 17:09:26 201913 // Update Count : 512 // Last Modified On : Thu Jul 20 15:10:26 2017 13 // Update Count : 2 14 14 // 15 15 … … 17 17 #include <stdarg.h> // varargs 18 18 #include <stdio.h> // fprintf 19 #include <unistd.h> // STDERR_FILENO20 19 #include "bits/debug.hfa" 21 20 … … 27 26 // called by macro assert in assert.h 28 27 void __assert_fail( const char *assertion, const char *file, unsigned int line, const char *function ) { 29 __cfaabi_ bits_print_safe( STDERR_FILENO,CFA_ASSERT_FMT ".\n", assertion, __progname, function, line, file );28 __cfaabi_dbg_bits_print_safe( CFA_ASSERT_FMT ".\n", assertion, __progname, function, line, file ); 30 29 abort(); 31 30 } … … 33 32 // called by macro assertf 34 33 void __assert_fail_f( const char *assertion, const char *file, unsigned int line, const char *function, const char *fmt, ... ) { 35 __cfaabi_ bits_acquire();36 __cfaabi_ bits_print_nolock( STDERR_FILENO,CFA_ASSERT_FMT ": ", assertion, __progname, function, line, file );34 __cfaabi_dbg_bits_acquire(); 35 __cfaabi_dbg_bits_print_nolock( CFA_ASSERT_FMT ": ", assertion, __progname, function, line, file ); 37 36 38 37 va_list args; 39 38 va_start( args, fmt ); 40 __cfaabi_ bits_print_vararg( STDERR_FILENO,fmt, args );39 __cfaabi_dbg_bits_print_vararg( fmt, args ); 41 40 va_end( args ); 42 41 43 __cfaabi_ bits_print_nolock( STDERR_FILENO,"\n" );44 __cfaabi_ bits_release();42 __cfaabi_dbg_bits_print_nolock( "\n" ); 43 __cfaabi_dbg_bits_release(); 45 44 abort(); 46 45 } -
libcfa/src/bits/align.hfa
r2fa5bd2 raca6a54c 10 10 // Created On : Mon Nov 28 12:27:26 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Nov 16 18:58:22 201913 // Update Count : 312 // Last Modified On : Fri Jul 21 23:05:35 2017 13 // Update Count : 2 14 14 // 15 15 // This library is free software; you can redistribute it and/or modify it … … 33 33 34 34 // Minimum size used to align memory boundaries for memory allocations. 35 //#define libAlign() (sizeof(double)) 36 // gcc-7 uses xmms instructions, which require 16 byte alignment. 37 #define libAlign() (16) 35 #define libAlign() (sizeof(double)) 38 36 39 37 // Check for power of 2 -
libcfa/src/bits/debug.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Thu Mar 30 12:30:01 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Nov 21 17:16:30201913 // Update Count : 1012 // Last Modified On : Sun Jul 14 22:17:35 2019 13 // Update Count : 4 14 14 // 15 15 … … 28 28 extern "C" { 29 29 30 void __cfaabi_ bits_write( int fd,const char *in_buffer, int len ) {30 void __cfaabi_dbg_bits_write( const char *in_buffer, int len ) { 31 31 // ensure all data is written 32 32 for ( int count = 0, retcode; count < len; count += retcode ) { … … 34 34 35 35 for ( ;; ) { 36 retcode = write( fd, in_buffer, len - count );36 retcode = write( STDERR_FILENO, in_buffer, len - count ); 37 37 38 38 // not a timer interrupt ? … … 44 44 } 45 45 46 void __cfaabi_ bits_acquire() __attribute__((__weak__)) {}47 void __cfaabi_ bits_release() __attribute__((__weak__)) {}46 void __cfaabi_dbg_bits_acquire() __attribute__((__weak__)) {} 47 void __cfaabi_dbg_bits_release() __attribute__((__weak__)) {} 48 48 49 void __cfaabi_ bits_print_safe ( int fd, const char fmt[], ... ) __attribute__(( format(printf, 2, 3) )) {49 void __cfaabi_dbg_bits_print_safe ( const char fmt[], ... ) __attribute__(( format(printf, 1, 2) )) { 50 50 va_list args; 51 51 52 52 va_start( args, fmt ); 53 __cfaabi_ bits_acquire();53 __cfaabi_dbg_bits_acquire(); 54 54 55 55 int len = vsnprintf( buffer, buffer_size, fmt, args ); 56 __cfaabi_ bits_write( fd,buffer, len );56 __cfaabi_dbg_bits_write( buffer, len ); 57 57 58 __cfaabi_ bits_release();58 __cfaabi_dbg_bits_release(); 59 59 va_end( args ); 60 60 } 61 61 62 void __cfaabi_ bits_print_nolock( int fd, const char fmt[], ... ) __attribute__(( format(printf, 2, 3) )) {62 void __cfaabi_dbg_bits_print_nolock( const char fmt[], ... ) __attribute__(( format(printf, 1, 2) )) { 63 63 va_list args; 64 64 … … 66 66 67 67 int len = vsnprintf( buffer, buffer_size, fmt, args ); 68 __cfaabi_ bits_write( fd,buffer, len );68 __cfaabi_dbg_bits_write( buffer, len ); 69 69 70 70 va_end( args ); 71 71 } 72 72 73 void __cfaabi_ bits_print_vararg( int fd,const char fmt[], va_list args ) {73 void __cfaabi_dbg_bits_print_vararg( const char fmt[], va_list args ) { 74 74 int len = vsnprintf( buffer, buffer_size, fmt, args ); 75 __cfaabi_ bits_write( fd,buffer, len );75 __cfaabi_dbg_bits_write( buffer, len ); 76 76 } 77 77 78 void __cfaabi_ bits_print_buffer( int fd, char in_buffer[], int in_buffer_size, const char fmt[], ... ) __attribute__(( format(printf, 4, 5) )) {78 void __cfaabi_dbg_bits_print_buffer( char in_buffer[], int in_buffer_size, const char fmt[], ... ) __attribute__(( format(printf, 3, 4) )) { 79 79 va_list args; 80 80 … … 82 82 83 83 int len = vsnprintf( in_buffer, in_buffer_size, fmt, args ); 84 __cfaabi_ bits_write( fd,in_buffer, len );84 __cfaabi_dbg_bits_write( in_buffer, len ); 85 85 86 86 va_end( args ); -
libcfa/src/bits/debug.hfa
r2fa5bd2 raca6a54c 10 10 // Created On : Mon Nov 28 12:27:26 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Nov 21 17:06:58 201913 // Update Count : 812 // Last Modified On : Thu Feb 8 12:35:19 2018 13 // Update Count : 2 14 14 // 15 15 … … 38 38 #include <stdio.h> 39 39 40 extern void __cfaabi_bits_write( int fd,const char *buffer, int len );41 extern void __cfaabi_bits_acquire();42 extern void __cfaabi_bits_release();43 extern void __cfaabi_bits_print_safe ( int fd, const char fmt[], ... ) __attribute__(( format(printf, 2, 3) ));44 extern void __cfaabi_bits_print_nolock( int fd, const char fmt[], ... ) __attribute__(( format(printf, 2, 3) ));45 extern void __cfaabi_bits_print_vararg( int fd,const char fmt[], va_list arg );46 extern void __cfaabi_bits_print_buffer( int fd, char buffer[], int buffer_size, const char fmt[], ... ) __attribute__(( format(printf, 4, 5) ));40 extern void __cfaabi_dbg_bits_write( const char *buffer, int len ); 41 extern void __cfaabi_dbg_bits_acquire(); 42 extern void __cfaabi_dbg_bits_release(); 43 extern void __cfaabi_dbg_bits_print_safe ( const char fmt[], ... ) __attribute__(( format(printf, 1, 2) )); 44 extern void __cfaabi_dbg_bits_print_nolock( const char fmt[], ... ) __attribute__(( format(printf, 1, 2) )); 45 extern void __cfaabi_dbg_bits_print_vararg( const char fmt[], va_list arg ); 46 extern void __cfaabi_dbg_bits_print_buffer( char buffer[], int buffer_size, const char fmt[], ... ) __attribute__(( format(printf, 3, 4) )); 47 47 #ifdef __cforall 48 48 } … … 50 50 51 51 #ifdef __CFA_DEBUG_PRINT__ 52 #define __cfaabi_dbg_write( buffer, len ) __cfaabi_ bits_write( STDERR_FILENO,buffer, len )53 #define __cfaabi_dbg_acquire() __cfaabi_ bits_acquire()54 #define __cfaabi_dbg_release() __cfaabi_ bits_release()55 #define __cfaabi_dbg_print_safe(...) __cfaabi_ bits_print_safe (__VA_ARGS__)56 #define __cfaabi_dbg_print_nolock(...) __cfaabi_ bits_print_nolock (__VA_ARGS__)57 #define __cfaabi_dbg_print_buffer(...) __cfaabi_ bits_print_buffer (__VA_ARGS__)58 #define __cfaabi_dbg_print_buffer_decl(...) char __dbg_text[256]; int __dbg_len = snprintf( __dbg_text, 256, __VA_ARGS__ ); __cfaabi_ bits_write( __dbg_text, __dbg_len );59 #define __cfaabi_dbg_print_buffer_local(...) __dbg_len = snprintf( __dbg_text, 256, __VA_ARGS__ ); __cfaabi_dbg_ write( __dbg_text, __dbg_len );52 #define __cfaabi_dbg_write( buffer, len ) __cfaabi_dbg_bits_write( buffer, len ) 53 #define __cfaabi_dbg_acquire() __cfaabi_dbg_bits_acquire() 54 #define __cfaabi_dbg_release() __cfaabi_dbg_bits_release() 55 #define __cfaabi_dbg_print_safe(...) __cfaabi_dbg_bits_print_safe (__VA_ARGS__) 56 #define __cfaabi_dbg_print_nolock(...) __cfaabi_dbg_bits_print_nolock (__VA_ARGS__) 57 #define __cfaabi_dbg_print_buffer(...) __cfaabi_dbg_bits_print_buffer (__VA_ARGS__) 58 #define __cfaabi_dbg_print_buffer_decl(...) char __dbg_text[256]; int __dbg_len = snprintf( __dbg_text, 256, __VA_ARGS__ ); __cfaabi_dbg_bits_write( __dbg_text, __dbg_len ); 59 #define __cfaabi_dbg_print_buffer_local(...) __dbg_len = snprintf( __dbg_text, 256, __VA_ARGS__ ); __cfaabi_dbg_bits_write( __dbg_text, __dbg_len ); 60 60 #else 61 61 #define __cfaabi_dbg_write(...) ((void)0) -
libcfa/src/bits/defs.hfa
r2fa5bd2 raca6a54c 47 47 #define OPTIONAL_THREAD __attribute__((weak)) 48 48 #endif 49 50 static inline long long rdtscl(void) {51 unsigned int lo, hi;52 __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));53 return ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 );54 } -
libcfa/src/concurrency/alarm.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Fri Jun 2 11:31:25 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Dec 3 22:47:24 201913 // Update Count : 6 812 // Last Modified On : Fri May 25 06:25:47 2018 13 // Update Count : 67 14 14 // 15 15 … … 40 40 void __kernel_set_timer( Duration alarm ) { 41 41 verifyf(alarm >= 1`us || alarm == 0, "Setting timer to < 1us (%jins)", alarm.tv); 42 setitimer( ITIMER_REAL, &(itimerval){ alarm }, 0p);42 setitimer( ITIMER_REAL, &(itimerval){ alarm }, NULL ); 43 43 } 44 44 … … 113 113 this->tail = &this->head; 114 114 } 115 head->next = 0p;115 head->next = NULL; 116 116 } 117 117 verify( validate( this ) ); … … 127 127 this->tail = it; 128 128 } 129 n->next = 0p;129 n->next = NULL; 130 130 131 131 verify( validate( this ) ); -
libcfa/src/concurrency/coroutine.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Mon Nov 28 12:27:26 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Dec 5 14:37:29 201913 // Update Count : 1512 // Last Modified On : Fri Mar 30 17:20:57 2018 13 // Update Count : 9 14 14 // 15 15 … … 90 90 91 91 void ?{}( coroutine_desc & this, const char * name, void * storage, size_t storageSize ) with( this ) { 92 (this.context){ 0p, 0p};92 (this.context){NULL, NULL}; 93 93 (this.stack){storage, storageSize}; 94 94 this.name = name; 95 95 state = Start; 96 starter = 0p;97 last = 0p;98 cancellation = 0p;96 starter = NULL; 97 last = NULL; 98 cancellation = NULL; 99 99 } 100 100 … … 131 131 132 132 [void *, size_t] __stack_alloc( size_t storageSize ) { 133 const size_t stack_data_size = libCeiling( sizeof(__stack_t), 16 ); // minimum alignment133 static const size_t stack_data_size = libCeiling( sizeof(__stack_t), 16 ); // minimum alignment 134 134 assert(__page_size != 0l); 135 135 size_t size = libCeiling( storageSize, 16 ) + stack_data_size; … … 157 157 158 158 void __stack_prepare( __stack_info_t * this, size_t create_size ) { 159 const size_t stack_data_size = libCeiling( sizeof(__stack_t), 16 ); // minimum alignment159 static const size_t stack_data_size = libCeiling( sizeof(__stack_t), 16 ); // minimum alignment 160 160 bool userStack; 161 161 void * storage; -
libcfa/src/concurrency/coroutine.hfa
r2fa5bd2 raca6a54c 10 10 // Created On : Mon Nov 28 12:27:26 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Dec 3 22:47:58201913 // Update Count : 1012 // Last Modified On : Fri Jun 21 17:49:39 2019 13 // Update Count : 9 14 14 // 15 15 … … 38 38 void ^?{}( coroutine_desc & this ); 39 39 40 static inline void ?{}( coroutine_desc & this) { this{ "Anonymous Coroutine", 0p, 0 }; }41 static inline void ?{}( coroutine_desc & this, size_t stackSize) { this{ "Anonymous Coroutine", 0p, stackSize }; }40 static inline void ?{}( coroutine_desc & this) { this{ "Anonymous Coroutine", NULL, 0 }; } 41 static inline void ?{}( coroutine_desc & this, size_t stackSize) { this{ "Anonymous Coroutine", NULL, stackSize }; } 42 42 static inline void ?{}( coroutine_desc & this, void * storage, size_t storageSize ) { this{ "Anonymous Coroutine", storage, storageSize }; } 43 static inline void ?{}( coroutine_desc & this, const char * name) { this{ name, 0p, 0 }; }44 static inline void ?{}( coroutine_desc & this, const char * name, size_t stackSize ) { this{ name, 0p, stackSize }; }43 static inline void ?{}( coroutine_desc & this, const char * name) { this{ name, NULL, 0 }; } 44 static inline void ?{}( coroutine_desc & this, const char * name, size_t stackSize ) { this{ name, NULL, stackSize }; } 45 45 46 46 //----------------------------------------------------------------------------- … … 89 89 src->state = Active; 90 90 91 if( unlikely(src->cancellation != 0p) ) {91 if( unlikely(src->cancellation != NULL) ) { 92 92 _CtxCoroutine_Unwind(src->cancellation, src); 93 93 } … … 128 128 coroutine_desc * dst = get_coroutine(cor); 129 129 130 if( unlikely(dst->context.SP == 0p) ) {130 if( unlikely(dst->context.SP == NULL) ) { 131 131 __stack_prepare(&dst->stack, 65000); 132 132 CtxStart(&cor, CtxInvokeCoroutine); -
libcfa/src/concurrency/invoke.h
r2fa5bd2 raca6a54c 10 10 // Created On : Tue Jan 17 12:27:26 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Dec 5 16:26:03 201913 // Update Count : 4 412 // Last Modified On : Sat Jun 22 18:19:13 2019 13 // Update Count : 40 14 14 // 15 15 … … 46 46 #ifdef __cforall 47 47 extern "Cforall" { 48 extern __attribute__((aligned(128)))thread_local struct KernelThreadData {48 extern thread_local struct KernelThreadData { 49 49 struct thread_desc * volatile this_thread; 50 50 struct processor * volatile this_processor; … … 55 55 volatile bool in_progress; 56 56 } preemption_state; 57 58 uint32_t rand_seed;59 57 } kernelTLS __attribute__ ((tls_model ( "initial-exec" ))); 60 58 } … … 207 205 208 206 static inline void ?{}(__monitor_group_t & this) { 209 (this.data){ 0p};207 (this.data){NULL}; 210 208 (this.size){0}; 211 209 (this.func){NULL}; -
libcfa/src/concurrency/kernel.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Tue Jan 17 12:27:26 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Dec 5 16:25:52201913 // Update Count : 5212 // Last Modified On : Thu Jun 20 17:21:23 2019 13 // Update Count : 25 14 14 // 15 15 … … 26 26 #include <signal.h> 27 27 #include <unistd.h> 28 #include <limits.h> // PTHREAD_STACK_MIN29 #include <sys/mman.h> // mprotect30 28 } 31 29 … … 42 40 //----------------------------------------------------------------------------- 43 41 // Some assembly required 44 #if defined( __i386 )42 #if defined( __i386 ) 45 43 #define CtxGet( ctx ) \ 46 44 __asm__ volatile ( \ … … 125 123 126 124 extern "C" { 127 struct { __dllist_t(cluster) list; __spinlock_t lock; } __cfa_dbg_global_clusters;125 struct { __dllist_t(cluster) list; __spinlock_t lock; } __cfa_dbg_global_clusters; 128 126 } 129 127 … … 133 131 // Global state 134 132 thread_local struct KernelThreadData kernelTLS __attribute__ ((tls_model ( "initial-exec" ))) = { 135 NULL, // cannot use 0p136 133 NULL, 137 { 1, false, false },138 6u //this should be seeded better but due to a bug calling rdtsc doesn't work134 NULL, 135 { 1, false, false } 139 136 }; 140 137 … … 142 139 // Struct to steal stack 143 140 struct current_stack_info_t { 144 __stack_t * storage; // pointer to stack object145 void * base;// base of stack146 void * limit;// stack grows towards stack limit147 void * context;// address of cfa_context_t141 __stack_t * storage; // pointer to stack object 142 void *base; // base of stack 143 void *limit; // stack grows towards stack limit 144 void *context; // address of cfa_context_t 148 145 }; 149 146 … … 174 171 name = "Main Thread"; 175 172 state = Start; 176 starter = 0p;177 last = 0p;178 cancellation = 0p;173 starter = NULL; 174 last = NULL; 175 cancellation = NULL; 179 176 } 180 177 … … 187 184 self_mon.recursion = 1; 188 185 self_mon_p = &self_mon; 189 next = 0p;190 191 node.next = 0p;192 node.prev = 0p;186 next = NULL; 187 188 node.next = NULL; 189 node.prev = NULL; 193 190 doregister(curr_cluster, this); 194 191 … … 214 211 terminated{ 0 }; 215 212 do_terminate = false; 216 preemption_alarm = 0p;213 preemption_alarm = NULL; 217 214 pending_preemption = false; 218 215 runner.proc = &this; … … 234 231 } 235 232 236 pthread_join( kernel_thread, 0p ); 237 free( this.stack ); 233 pthread_join( kernel_thread, NULL ); 238 234 } 239 235 … … 264 260 //Main of the processor contexts 265 261 void main(processorCtx_t & runner) { 266 // Because of a bug, we couldn't initialized the seed on construction267 // Do it here268 kernelTLS.rand_seed ^= rdtscl();269 270 262 processor * this = runner.proc; 271 263 verify(this); … … 281 273 __cfaabi_dbg_print_safe("Kernel : core %p started\n", this); 282 274 283 thread_desc * readyThread = 0p; 284 for( unsigned int spin_count = 0; ! __atomic_load_n(&this->do_terminate, __ATOMIC_SEQ_CST); spin_count++ ) { 275 thread_desc * readyThread = NULL; 276 for( unsigned int spin_count = 0; ! __atomic_load_n(&this->do_terminate, __ATOMIC_SEQ_CST); spin_count++ ) 277 { 285 278 readyThread = nextThread( this->cltr ); 286 279 287 if(readyThread) { 280 if(readyThread) 281 { 288 282 verify( ! kernelTLS.preemption_state.enabled ); 289 283 … … 296 290 297 291 spin_count = 0; 298 } else { 292 } 293 else 294 { 299 295 // spin(this, &spin_count); 300 296 halt(this); … … 409 405 processor * proc = (processor *) arg; 410 406 kernelTLS.this_processor = proc; 411 kernelTLS.this_thread = 0p;407 kernelTLS.this_thread = NULL; 412 408 kernelTLS.preemption_state.[enabled, disable_count] = [false, 1]; 413 409 // SKULLDUGGERY: We want to create a context for the processor coroutine … … 422 418 423 419 //Set global state 424 kernelTLS.this_thread = 0p;420 kernelTLS.this_thread = NULL; 425 421 426 422 //We now have a proper context from which to schedule threads … … 438 434 __cfaabi_dbg_print_safe("Kernel : core %p main ended (%p)\n", proc, &proc->runner); 439 435 440 return 0p; 441 } 442 443 static void Abort( int ret, const char * func ) { 444 if ( ret ) { // pthread routines return errno values 445 abort( "%s : internal error, error(%d) %s.", func, ret, strerror( ret ) ); 446 } // if 447 } // Abort 448 449 void * create_pthread( pthread_t * pthread, void * (*start)(void *), void * arg ) { 450 pthread_attr_t attr; 451 452 Abort( pthread_attr_init( &attr ), "pthread_attr_init" ); // initialize attribute 453 454 size_t stacksize; 455 // default stack size, normally defined by shell limit 456 Abort( pthread_attr_getstacksize( &attr, &stacksize ), "pthread_attr_getstacksize" ); 457 assert( stacksize >= PTHREAD_STACK_MIN ); 458 459 void * stack; 460 __cfaabi_dbg_debug_do( 461 stack = memalign( __page_size, stacksize + __page_size ); 462 // pthread has no mechanism to create the guard page in user supplied stack. 463 if ( mprotect( stack, __page_size, PROT_NONE ) == -1 ) { 464 abort( "mprotect : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) ); 465 } // if 466 ); 467 __cfaabi_dbg_no_debug_do( 468 stack = malloc( stacksize ); 469 ); 470 471 Abort( pthread_attr_setstack( &attr, stack, stacksize ), "pthread_attr_setstack" ); 472 473 Abort( pthread_create( pthread, &attr, start, arg ), "pthread_create" ); 474 return stack; 436 return NULL; 475 437 } 476 438 … … 478 440 __cfaabi_dbg_print_safe("Kernel : Starting core %p\n", this); 479 441 480 this->stack = create_pthread( &this->kernel_thread, CtxInvokeProcessor, (void*)this );442 pthread_create( &this->kernel_thread, NULL, CtxInvokeProcessor, (void*)this ); 481 443 482 444 __cfaabi_dbg_print_safe("Kernel : core %p started\n", this); … … 535 497 verify( ! kernelTLS.preemption_state.enabled ); 536 498 537 verifyf( thrd->next == 0p, "Expected null got %p", thrd->next );499 verifyf( thrd->next == NULL, "Expected null got %p", thrd->next ); 538 500 539 501 with( *thrd->curr_cluster ) { … … 714 676 void ?{}(processorCtx_t & this, processor * proc) { 715 677 (this.__cor){ "Processor" }; 716 this.__cor.starter = 0p;678 this.__cor.starter = NULL; 717 679 this.proc = proc; 718 680 } … … 723 685 terminated{ 0 }; 724 686 do_terminate = false; 725 preemption_alarm = 0p;687 preemption_alarm = NULL; 726 688 pending_preemption = false; 727 689 kernel_thread = pthread_self(); … … 857 819 if(thrd) { 858 820 int len = snprintf( abort_text, abort_text_size, "Error occurred while executing thread %.256s (%p)", thrd->self_cor.name, thrd ); 859 __cfaabi_ bits_write( STDERR_FILENO,abort_text, len );821 __cfaabi_dbg_bits_write( abort_text, len ); 860 822 861 823 if ( &thrd->self_cor != thrd->curr_cor ) { 862 824 len = snprintf( abort_text, abort_text_size, " in coroutine %.256s (%p).\n", thrd->curr_cor->name, thrd->curr_cor ); 863 __cfaabi_ bits_write( STDERR_FILENO,abort_text, len );825 __cfaabi_dbg_bits_write( abort_text, len ); 864 826 } 865 827 else { 866 __cfaabi_ bits_write( STDERR_FILENO,".\n", 2 );828 __cfaabi_dbg_bits_write( ".\n", 2 ); 867 829 } 868 830 } 869 831 else { 870 832 int len = snprintf( abort_text, abort_text_size, "Error occurred outside of any thread.\n" ); 871 __cfaabi_ bits_write( STDERR_FILENO,abort_text, len );833 __cfaabi_dbg_bits_write( abort_text, len ); 872 834 } 873 835 } … … 880 842 881 843 extern "C" { 882 void __cfaabi_ bits_acquire() {844 void __cfaabi_dbg_bits_acquire() { 883 845 lock( kernel_debug_lock __cfaabi_dbg_ctx2 ); 884 846 } 885 847 886 void __cfaabi_ bits_release() {848 void __cfaabi_dbg_bits_release() { 887 849 unlock( kernel_debug_lock ); 888 850 } … … 917 879 918 880 void V(semaphore & this) with( this ) { 919 thread_desc * thrd = 0p;881 thread_desc * thrd = NULL; 920 882 lock( lock __cfaabi_dbg_ctx2 ); 921 883 count += 1; -
libcfa/src/concurrency/kernel.hfa
r2fa5bd2 raca6a54c 10 10 // Created On : Tue Jan 17 12:27:26 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Dec 4 07:54:51201913 // Update Count : 1 812 // Last Modified On : Sat Jun 22 11:39:17 2019 13 // Update Count : 16 14 14 // 15 15 … … 20 20 #include "invoke.h" 21 21 #include "time_t.hfa" 22 #include "coroutine.hfa"23 22 24 23 extern "C" { … … 89 88 static inline void ?{}(FinishAction & this) { 90 89 this.action_code = No_Action; 91 this.thrd = 0p;92 this.lock = 0p;90 this.thrd = NULL; 91 this.lock = NULL; 93 92 } 94 93 static inline void ^?{}(FinishAction &) {} … … 135 134 semaphore terminated; 136 135 137 // pthread Stack138 void * stack;139 140 136 // Link lists fields 141 137 struct __dbg_node_proc { -
libcfa/src/concurrency/kernel_private.hfa
r2fa5bd2 raca6a54c 10 10 // Created On : Mon Feb 13 12:27:26 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Nov 30 19:25:02 201913 // Update Count : 812 // Last Modified On : Thu Mar 29 14:06:40 2018 13 // Update Count : 3 14 14 // 15 15 … … 57 57 void main(processorCtx_t *); 58 58 59 void * create_pthread( pthread_t *, void * (*)(void *), void * );60 61 59 static inline void wake_fast(processor * this) { 62 60 __cfaabi_dbg_print_safe("Kernel : Waking up processor %p\n", this); … … 103 101 #define KERNEL_STORAGE(T,X) static char storage_##X[sizeof(T)] 104 102 105 static inline uint32_t tls_rand() {106 kernelTLS.rand_seed ^= kernelTLS.rand_seed << 6;107 kernelTLS.rand_seed ^= kernelTLS.rand_seed >> 21;108 kernelTLS.rand_seed ^= kernelTLS.rand_seed << 7;109 return kernelTLS.rand_seed;110 }111 112 103 113 104 void doregister( struct cluster & cltr ); -
libcfa/src/concurrency/monitor.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Thd Feb 23 12:27:26 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Dec 4 07:55:14 201913 // Update Count : 1012 // Last Modified On : Fri Mar 30 14:30:26 2018 13 // Update Count : 9 14 14 // 15 15 … … 363 363 this.waiting_thread = waiting_thread; 364 364 this.count = count; 365 this.next = 0p;365 this.next = NULL; 366 366 this.user_info = user_info; 367 367 } … … 369 369 void ?{}(__condition_criterion_t & this ) with( this ) { 370 370 ready = false; 371 target = 0p;372 owner = 0p;373 next = 0p;371 target = NULL; 372 owner = NULL; 373 next = NULL; 374 374 } 375 375 … … 378 378 this.target = target; 379 379 this.owner = &owner; 380 this.next = 0p;380 this.next = NULL; 381 381 } 382 382 … … 387 387 388 388 // Check that everything is as expected 389 assertf( this.monitors != 0p, "Waiting with no monitors (%p)", this.monitors );389 assertf( this.monitors != NULL, "Waiting with no monitors (%p)", this.monitors ); 390 390 verifyf( this.monitor_count != 0, "Waiting with 0 monitors (%"PRIiFAST16")", this.monitor_count ); 391 391 verifyf( this.monitor_count < 32u, "Excessive monitor count (%"PRIiFAST16")", this.monitor_count ); … … 449 449 450 450 // Lock all monitors 451 lock_all( this.monitors, 0p, count );451 lock_all( this.monitors, NULL, count ); 452 452 453 453 //Pop the head of the waiting queue … … 471 471 472 472 //Check that everything is as expected 473 verifyf( this.monitors != 0p, "Waiting with no monitors (%p)", this.monitors );473 verifyf( this.monitors != NULL, "Waiting with no monitors (%p)", this.monitors ); 474 474 verifyf( this.monitor_count != 0, "Waiting with 0 monitors (%"PRIiFAST16")", this.monitor_count ); 475 475 … … 674 674 675 675 static inline void reset_mask( monitor_desc * this ) { 676 this->mask.accepted = 0p;677 this->mask.data = 0p;676 this->mask.accepted = NULL; 677 this->mask.data = NULL; 678 678 this->mask.size = 0; 679 679 } … … 816 816 } 817 817 818 __cfaabi_dbg_print_safe( "Kernel : Runing %i (%p)\n", ready2run, ready2run ? node->waiting_thread : 0p);819 return ready2run ? node->waiting_thread : 0p;818 __cfaabi_dbg_print_safe( "Kernel : Runing %i (%p)\n", ready2run, ready2run ? node->waiting_thread : NULL ); 819 return ready2run ? node->waiting_thread : NULL; 820 820 } 821 821 … … 824 824 if( !this.monitors ) { 825 825 // __cfaabi_dbg_print_safe( "Branding\n" ); 826 assertf( thrd->monitors.data != 0p, "No current monitor to brand condition %p", thrd->monitors.data );826 assertf( thrd->monitors.data != NULL, "No current monitor to brand condition %p", thrd->monitors.data ); 827 827 this.monitor_count = thrd->monitors.size; 828 828 -
libcfa/src/concurrency/monitor.hfa
r2fa5bd2 raca6a54c 10 10 // Created On : Thd Feb 23 12:27:26 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Dec 4 07:55:32 201913 // Update Count : 1 112 // Last Modified On : Sat Oct 7 18:06:45 2017 13 // Update Count : 10 14 14 // 15 15 … … 31 31 entry_queue{}; 32 32 signal_stack{}; 33 owner = 0p;33 owner = NULL; 34 34 recursion = 0; 35 mask.accepted = 0p;36 mask.data = 0p;35 mask.accepted = NULL; 36 mask.data = NULL; 37 37 mask.size = 0; 38 dtor_node = 0p;38 dtor_node = NULL; 39 39 } 40 41 static inline void ^?{}(monitor_desc & ) {}42 40 43 41 struct monitor_guard_t { … … 122 120 123 121 static inline void ?{}( condition & this ) { 124 this.monitors = 0p;122 this.monitors = NULL; 125 123 this.monitor_count = 0; 126 124 } -
libcfa/src/concurrency/mutex.cfa
r2fa5bd2 raca6a54c 11 11 // Author : Thierry Delisle 12 12 // Created On : Fri May 25 01:37:11 2018 13 // Last Modified By : Peter A. Buhr14 // Last Modified On : Wed Dec 4 09:16:39 201915 // Update Count : 113 // Last Modified By : Thierry Delisle 14 // Last Modified On : Fri May 25 01:37:51 2018 15 // Update Count : 0 16 16 // 17 17 … … 73 73 this.lock{}; 74 74 this.blocked_threads{}; 75 this.owner = 0p;75 this.owner = NULL; 76 76 this.recursion_count = 0; 77 77 } … … 83 83 void lock(recursive_mutex_lock & this) with(this) { 84 84 lock( lock __cfaabi_dbg_ctx2 ); 85 if( owner == 0p) {85 if( owner == NULL ) { 86 86 owner = kernelTLS.this_thread; 87 87 recursion_count = 1; … … 101 101 bool ret = false; 102 102 lock( lock __cfaabi_dbg_ctx2 ); 103 if( owner == 0p) {103 if( owner == NULL ) { 104 104 owner = kernelTLS.this_thread; 105 105 recursion_count = 1; -
libcfa/src/concurrency/mutex.hfa
r2fa5bd2 raca6a54c 11 11 // Author : Thierry Delisle 12 12 // Created On : Fri May 25 01:24:09 2018 13 // Last Modified By : Peter A. Buhr14 // Last Modified On : Wed Dec 4 09:16:53 201915 // Update Count : 113 // Last Modified By : Thierry Delisle 14 // Last Modified On : Fri May 25 01:24:12 2018 15 // Update Count : 0 16 16 // 17 17 … … 110 110 111 111 static inline void ?{}(lock_scope(L) & this) { 112 this.locks = 0p;112 this.locks = NULL; 113 113 this.count = 0; 114 114 } -
libcfa/src/concurrency/preemption.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Mon Jun 5 14:20:42 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T hu Dec 5 16:34:05 201913 // Update Count : 4312 // Last Modified On : Tue Jun 5 17:35:49 2018 13 // Update Count : 37 14 14 // 15 15 … … 24 24 #include <string.h> 25 25 #include <unistd.h> 26 #include <limits.h> // PTHREAD_STACK_MIN27 26 } 28 27 … … 65 64 event_kernel_t * event_kernel; // kernel public handle to even kernel 66 65 static pthread_t alarm_thread; // pthread handle to alarm thread 67 static void * alarm_stack; // pthread stack for alarm thread68 66 69 67 static void ?{}(event_kernel_t & this) with( this ) { … … 83 81 // Get next expired node 84 82 static inline alarm_node_t * get_expired( alarm_list_t * alarms, Time currtime ) { 85 if( !alarms->head ) return 0p;// If no alarms return null86 if( alarms->head->alarm >= currtime ) return 0p;// If alarms head not expired return null87 return pop(alarms); // Otherwise just pop head83 if( !alarms->head ) return NULL; // If no alarms return null 84 if( alarms->head->alarm >= currtime ) return NULL; // If alarms head not expired return null 85 return pop(alarms); // Otherwise just pop head 88 86 } 89 87 90 88 // Tick one frame of the Discrete Event Simulation for alarms 91 89 static void tick_preemption() { 92 alarm_node_t * node = 0p;// Used in the while loop but cannot be declared in the while condition93 alarm_list_t * alarms = &event_kernel->alarms; // Local copy for ease of reading94 Time currtime = __kernel_get_time(); // Check current time once soeverything "happens at once"90 alarm_node_t * node = NULL; // Used in the while loop but cannot be declared in the while condition 91 alarm_list_t * alarms = &event_kernel->alarms; // Local copy for ease of reading 92 Time currtime = __kernel_get_time(); // Check current time once so we everything "happens at once" 95 93 96 94 //Loop throught every thing expired … … 245 243 sigaddset( &mask, sig ); 246 244 247 if ( pthread_sigmask( SIG_UNBLOCK, &mask, 0p) == -1 ) {245 if ( pthread_sigmask( SIG_UNBLOCK, &mask, NULL ) == -1 ) { 248 246 abort( "internal error, pthread_sigmask" ); 249 247 } … … 256 254 sigaddset( &mask, sig ); 257 255 258 if ( pthread_sigmask( SIG_BLOCK, &mask, 0p) == -1 ) {256 if ( pthread_sigmask( SIG_BLOCK, &mask, NULL ) == -1 ) { 259 257 abort( "internal error, pthread_sigmask" ); 260 258 } … … 303 301 304 302 // Setup proper signal handlers 305 __cfaabi_sigaction( SIGUSR1, sigHandler_ctxSwitch, SA_SIGINFO | SA_RESTART ); // CtxSwitch handler303 __cfaabi_sigaction( SIGUSR1, sigHandler_ctxSwitch, SA_SIGINFO | SA_RESTART ); // CtxSwitch handler 306 304 307 305 signal_block( SIGALRM ); 308 306 309 alarm_stack = create_pthread( &alarm_thread, alarm_loop, 0p);307 pthread_create( &alarm_thread, NULL, alarm_loop, NULL ); 310 308 } 311 309 … … 318 316 sigset_t mask; 319 317 sigfillset( &mask ); 320 sigprocmask( SIG_BLOCK, &mask, 0p);318 sigprocmask( SIG_BLOCK, &mask, NULL ); 321 319 322 320 // Notify the alarm thread of the shutdown … … 325 323 326 324 // Wait for the preemption thread to finish 327 328 pthread_join( alarm_thread, 0p ); 329 free( alarm_stack ); 325 pthread_join( alarm_thread, NULL ); 330 326 331 327 // Preemption is now fully stopped … … 384 380 static_assert( sizeof( sigset_t ) == sizeof( cxt->uc_sigmask ), "Expected cxt->uc_sigmask to be of sigset_t" ); 385 381 #endif 386 if ( pthread_sigmask( SIG_SETMASK, (sigset_t *)&(cxt->uc_sigmask), 0p) == -1 ) {382 if ( pthread_sigmask( SIG_SETMASK, (sigset_t *)&(cxt->uc_sigmask), NULL ) == -1 ) { 387 383 abort( "internal error, sigprocmask" ); 388 384 } … … 403 399 sigset_t mask; 404 400 sigfillset(&mask); 405 if ( pthread_sigmask( SIG_BLOCK, &mask, 0p) == -1 ) {401 if ( pthread_sigmask( SIG_BLOCK, &mask, NULL ) == -1 ) { 406 402 abort( "internal error, pthread_sigmask" ); 407 403 } … … 424 420 {__cfaabi_dbg_print_buffer_decl( " KERNEL: Spurious wakeup %d.\n", err );} 425 421 continue; 426 case EINVAL :422 case EINVAL : 427 423 abort( "Timeout was invalid." ); 428 424 default: … … 457 453 EXIT: 458 454 __cfaabi_dbg_print_safe( "Kernel : Preemption thread stopping\n" ); 459 return 0p;455 return NULL; 460 456 } 461 457 … … 470 466 sigset_t oldset; 471 467 int ret; 472 ret = pthread_sigmask(0, 0p, &oldset);468 ret = pthread_sigmask(0, NULL, &oldset); 473 469 if(ret != 0) { abort("ERROR sigprocmask returned %d", ret); } 474 470 -
libcfa/src/concurrency/thread.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Tue Jan 17 12:27:26 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Dec 4 09:17:49 201913 // Update Count : 912 // Last Modified On : Fri Mar 30 17:19:52 2018 13 // Update Count : 8 14 14 // 15 15 … … 33 33 // Thread ctors and dtors 34 34 void ?{}(thread_desc & this, const char * const name, cluster & cl, void * storage, size_t storageSize ) with( this ) { 35 context{ 0p, 0p};35 context{ NULL, NULL }; 36 36 self_cor{ name, storage, storageSize }; 37 37 state = Start; … … 41 41 self_mon_p = &self_mon; 42 42 curr_cluster = &cl; 43 next = 0p;43 next = NULL; 44 44 45 node.next = 0p;46 node.prev = 0p;45 node.next = NULL; 46 node.prev = NULL; 47 47 doregister(curr_cluster, this); 48 48 -
libcfa/src/concurrency/thread.hfa
r2fa5bd2 raca6a54c 10 10 // Created On : Tue Jan 17 12:27:26 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Dec 4 09:18:14201913 // Update Count : 612 // Last Modified On : Fri Jun 21 17:51:33 2019 13 // Update Count : 5 14 14 // 15 15 … … 61 61 void ^?{}(thread_desc & this); 62 62 63 static inline void ?{}(thread_desc & this) { this{ "Anonymous Thread", *mainCluster, 0p, 65000 }; }64 static inline void ?{}(thread_desc & this, size_t stackSize ) { this{ "Anonymous Thread", *mainCluster, 0p, stackSize }; }63 static inline void ?{}(thread_desc & this) { this{ "Anonymous Thread", *mainCluster, NULL, 65000 }; } 64 static inline void ?{}(thread_desc & this, size_t stackSize ) { this{ "Anonymous Thread", *mainCluster, NULL, stackSize }; } 65 65 static inline void ?{}(thread_desc & this, void * storage, size_t storageSize ) { this{ "Anonymous Thread", *mainCluster, storage, storageSize }; } 66 static inline void ?{}(thread_desc & this, struct cluster & cl ) { this{ "Anonymous Thread", cl, 0p, 65000 }; }67 static inline void ?{}(thread_desc & this, struct cluster & cl, size_t stackSize ) { this{ "Anonymous Thread", cl, 0p, stackSize }; }66 static inline void ?{}(thread_desc & this, struct cluster & cl ) { this{ "Anonymous Thread", cl, NULL, 65000 }; } 67 static inline void ?{}(thread_desc & this, struct cluster & cl, size_t stackSize ) { this{ "Anonymous Thread", cl, NULL, stackSize }; } 68 68 static inline void ?{}(thread_desc & this, struct cluster & cl, void * storage, size_t storageSize ) { this{ "Anonymous Thread", cl, storage, storageSize }; } 69 static inline void ?{}(thread_desc & this, const char * const name) { this{ name, *mainCluster, 0p, 65000 }; }70 static inline void ?{}(thread_desc & this, const char * const name, struct cluster & cl ) { this{ name, cl, 0p, 65000 }; }71 static inline void ?{}(thread_desc & this, const char * const name, struct cluster & cl, size_t stackSize ) { this{ name, cl, 0p, stackSize }; }69 static inline void ?{}(thread_desc & this, const char * const name) { this{ name, *mainCluster, NULL, 65000 }; } 70 static inline void ?{}(thread_desc & this, const char * const name, struct cluster & cl ) { this{ name, cl, NULL, 65000 }; } 71 static inline void ?{}(thread_desc & this, const char * const name, struct cluster & cl, size_t stackSize ) { this{ name, cl, NULL, stackSize }; } 72 72 73 73 //----------------------------------------------------------------------------- -
libcfa/src/fstream.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Nov 29 06:56:46 201913 // Update Count : 35 512 // Last Modified On : Tue Sep 10 22:19:56 2019 13 // Update Count : 354 14 14 // 15 15 … … 66 66 } // ?{} 67 67 68 void ^?{}( ofstream & os ) {69 close( os );70 } // ^?{}71 72 68 void sepOn( ofstream & os ) { os.sepOnOff = ! getNL( os ); } 73 69 void sepOff( ofstream & os ) { os.sepOnOff = false; } … … 199 195 } // ?{} 200 196 201 void ^?{}( ifstream & is ) {202 close( is );203 } // ^?{}204 205 197 void nlOn( ifstream & os ) { os.nlOnOff = true; } 206 198 void nlOff( ifstream & os ) { os.nlOnOff = false; } -
libcfa/src/fstream.hfa
r2fa5bd2 raca6a54c 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Nov 29 06:56:02201913 // Update Count : 16 812 // Last Modified On : Mon Jul 15 18:10:23 2019 13 // Update Count : 167 14 14 // 15 15 … … 72 72 void ?{}( ofstream & os, const char * name, const char * mode ); 73 73 void ?{}( ofstream & os, const char * name ); 74 void ^?{}( ofstream & os );75 74 76 75 extern ofstream & sout, & stdout, & serr, & stderr; // aliases … … 102 101 void ?{}( ifstream & is, const char * name, const char * mode ); 103 102 void ?{}( ifstream & is, const char * name ); 104 void ^?{}( ifstream & is );105 103 106 104 extern ifstream & sin, & stdin; // aliases -
libcfa/src/heap.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Tue Dec 19 21:58:35 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Dec 4 21:42:46201913 // Update Count : 64612 // Last Modified On : Fri Oct 18 07:42:09 2019 13 // Update Count : 556 14 14 // 15 15 … … 18 18 #include <stdio.h> // snprintf, fileno 19 19 #include <errno.h> // errno 20 #include <string.h> // memset, memcpy21 20 extern "C" { 22 21 #include <sys/mman.h> // mmap, munmap … … 28 27 #include "bits/locks.hfa" // __spinlock_t 29 28 #include "startup.hfa" // STARTUP_PRIORITY_MEMORY 30 //#include "stdlib.hfa" // bsearchl29 #include "stdlib.hfa" // bsearchl 31 30 #include "malloc.h" 32 31 33 #define MIN(x, y) (y > x ? x : y)34 32 35 33 static bool traceHeap = false; 36 34 37 inline bool traceHeap() { return traceHeap; } 35 inline bool traceHeap() { 36 return traceHeap; 37 } // traceHeap 38 38 39 39 bool traceHeapOn() { … … 49 49 } // traceHeapOff 50 50 51 bool traceHeapTerm() { return false; } 52 53 54 static bool prtFree = false; 55 56 inline bool prtFree() { 57 return prtFree; 58 } // prtFree 59 60 bool prtFreeOn() { 61 bool temp = prtFree; 62 prtFree = true; 51 52 static bool checkFree = false; 53 54 inline bool checkFree() { 55 return checkFree; 56 } // checkFree 57 58 bool checkFreeOn() { 59 bool temp = checkFree; 60 checkFree = true; 63 61 return temp; 64 } // prtFreeOn65 66 bool prtFreeOff() {67 bool temp = prtFree;68 prtFree = false;62 } // checkFreeOn 63 64 bool checkFreeOff() { 65 bool temp = checkFree; 66 checkFree = false; 69 67 return temp; 70 } // prtFreeOff 68 } // checkFreeOff 69 70 71 // static bool traceHeapTerm = false; 72 73 // inline bool traceHeapTerm() { 74 // return traceHeapTerm; 75 // } // traceHeapTerm 76 77 // bool traceHeapTermOn() { 78 // bool temp = traceHeapTerm; 79 // traceHeapTerm = true; 80 // return temp; 81 // } // traceHeapTermOn 82 83 // bool traceHeapTermOff() { 84 // bool temp = traceHeapTerm; 85 // traceHeapTerm = false; 86 // return temp; 87 // } // traceHeapTermOff 71 88 72 89 73 90 enum { 74 // Define the default extension heap amount in units of bytes. When the uC++ supplied heap reaches the brk address, 75 // the brk address is extended by the extension amount. 91 __CFA_DEFAULT_MMAP_START__ = (512 * 1024 + 1), 76 92 __CFA_DEFAULT_HEAP_EXPANSION__ = (1 * 1024 * 1024), 77 78 // Define the mmap crossover point during allocation. Allocations less than this amount are allocated from buckets;79 // values greater than or equal to this value are mmap from the operating system.80 __CFA_DEFAULT_MMAP_START__ = (512 * 1024 + 1),81 93 }; 82 94 … … 93 105 static unsigned int allocFree; // running total of allocations minus frees 94 106 95 static void prtUnfreed() {107 static void checkUnfreed() { 96 108 if ( allocFree != 0 ) { 97 109 // DO NOT USE STREAMS AS THEY MAY BE UNAVAILABLE AT THIS POINT. 98 char helpText[512];99 int len = snprintf( helpText, sizeof(helpText), "CFA warning (UNIX pid:%ld) : program terminating with %u(0x%x) bytes of storage allocated but not freed.\n"100 "Possible cause is unfreed storage allocated by the program or system/library routines called from the program.\n",101 (long int)getpid(), allocFree, allocFree ); // always print the UNIX pid102 __cfaabi_bits_write( STDERR_FILENO, helpText, len ); // print debug/nodebug103 } // if 104 } // prtUnfreed110 // char helpText[512]; 111 // int len = snprintf( helpText, sizeof(helpText), "CFA warning (UNIX pid:%ld) : program terminating with %u(0x%x) bytes of storage allocated but not freed.\n" 112 // "Possible cause is unfreed storage allocated by the program or system/library routines called from the program.\n", 113 // (long int)getpid(), allocFree, allocFree ); // always print the UNIX pid 114 // __cfaabi_dbg_bits_write( helpText, len ); 115 } // if 116 } // checkUnfreed 105 117 106 118 extern "C" { … … 111 123 void heapAppStop() { // called by __cfaabi_appready_startdown 112 124 fclose( stdin ); fclose( stdout ); 113 prtUnfreed();125 checkUnfreed(); 114 126 } // heapAppStop 115 127 } // extern "C" 116 128 #endif // __CFA_DEBUG__ 117 118 129 119 130 // statically allocated variables => zero filled. … … 123 134 static unsigned int maxBucketsUsed; // maximum number of buckets in use 124 135 136 137 // #comment TD : This defined is significantly different from the __ALIGN__ define from locks.hfa 138 #define ALIGN 16 125 139 126 140 #define SPINLOCK 0 … … 133 147 // Recursive definitions: HeapManager needs size of bucket array and bucket area needs sizeof HeapManager storage. 134 148 // Break recusion by hardcoding number of buckets and statically checking number is correct after bucket array defined. 135 enum { NoBucketSizes = 9 1}; // number of buckets sizes149 enum { NoBucketSizes = 93 }; // number of buckets sizes 136 150 137 151 struct HeapManager { … … 180 194 } kind; // Kind 181 195 } header; // Header 182 char pad[ libAlign()- sizeof( Header )];196 char pad[ALIGN - sizeof( Header )]; 183 197 char data[0]; // storage 184 198 }; // Storage 185 199 186 static_assert( libAlign() >= sizeof( Storage ), "libAlign()< sizeof( Storage )" );200 static_assert( ALIGN >= sizeof( Storage ), "ALIGN < sizeof( Storage )" ); 187 201 188 202 struct FreeHeader { … … 214 228 #define __STATISTICS__ 215 229 216 // Bucket size must be multiple of 16.217 230 // Powers of 2 are common allocation sizes, so make powers of 2 generate the minimum required size. 218 231 static const unsigned int bucketSizes[] @= { // different bucket sizes 219 16, 32, 48, 64 + sizeof(HeapManager.Storage), // 4 220 96, 112, 128 + sizeof(HeapManager.Storage), // 3 221 160, 192, 224, 256 + sizeof(HeapManager.Storage), // 4 222 320, 384, 448, 512 + sizeof(HeapManager.Storage), // 4 223 640, 768, 896, 1_024 + sizeof(HeapManager.Storage), // 4 224 1_536, 2_048 + sizeof(HeapManager.Storage), // 2 225 2_560, 3_072, 3_584, 4_096 + sizeof(HeapManager.Storage), // 4 226 6_144, 8_192 + sizeof(HeapManager.Storage), // 2 227 9_216, 10_240, 11_264, 12_288, 13_312, 14_336, 15_360, 16_384 + sizeof(HeapManager.Storage), // 8 228 18_432, 20_480, 22_528, 24_576, 26_624, 28_672, 30_720, 32_768 + sizeof(HeapManager.Storage), // 8 229 36_864, 40_960, 45_056, 49_152, 53_248, 57_344, 61_440, 65_536 + sizeof(HeapManager.Storage), // 8 230 73_728, 81_920, 90_112, 98_304, 106_496, 114_688, 122_880, 131_072 + sizeof(HeapManager.Storage), // 8 231 147_456, 163_840, 180_224, 196_608, 212_992, 229_376, 245_760, 262_144 + sizeof(HeapManager.Storage), // 8 232 294_912, 327_680, 360_448, 393_216, 425_984, 458_752, 491_520, 524_288 + sizeof(HeapManager.Storage), // 8 233 655_360, 786_432, 917_504, 1_048_576 + sizeof(HeapManager.Storage), // 4 234 1_179_648, 1_310_720, 1_441_792, 1_572_864, 1_703_936, 1_835_008, 1_966_080, 2_097_152 + sizeof(HeapManager.Storage), // 8 235 2_621_440, 3_145_728, 3_670_016, 4_194_304 + sizeof(HeapManager.Storage), // 4 232 16, 32, 48, 64, 233 64 + sizeof(HeapManager.Storage), 96, 112, 128, 128 + sizeof(HeapManager.Storage), 160, 192, 224, 234 256 + sizeof(HeapManager.Storage), 320, 384, 448, 512 + sizeof(HeapManager.Storage), 640, 768, 896, 235 1_024 + sizeof(HeapManager.Storage), 1_536, 2_048 + sizeof(HeapManager.Storage), 2_560, 3_072, 3_584, 4_096 + sizeof(HeapManager.Storage), 6_144, 236 8_192 + sizeof(HeapManager.Storage), 9_216, 10_240, 11_264, 12_288, 13_312, 14_336, 15_360, 237 16_384 + sizeof(HeapManager.Storage), 18_432, 20_480, 22_528, 24_576, 26_624, 28_672, 30_720, 238 32_768 + sizeof(HeapManager.Storage), 36_864, 40_960, 45_056, 49_152, 53_248, 57_344, 61_440, 239 65_536 + sizeof(HeapManager.Storage), 73_728, 81_920, 90_112, 98_304, 106_496, 114_688, 122_880, 240 131_072 + sizeof(HeapManager.Storage), 147_456, 163_840, 180_224, 196_608, 212_992, 229_376, 245_760, 241 262_144 + sizeof(HeapManager.Storage), 294_912, 327_680, 360_448, 393_216, 425_984, 458_752, 491_520, 242 524_288 + sizeof(HeapManager.Storage), 655_360, 786_432, 917_504, 1_048_576 + sizeof(HeapManager.Storage), 1_179_648, 1_310_720, 1_441_792, 243 1_572_864, 1_703_936, 1_835_008, 1_966_080, 2_097_152 + sizeof(HeapManager.Storage), 2_621_440, 3_145_728, 3_670_016, 244 4_194_304 + sizeof(HeapManager.Storage) 236 245 }; 237 246 … … 242 251 static unsigned char lookup[LookupSizes]; // O(1) lookup for small sizes 243 252 #endif // FASTLOOKUP 244 245 253 static int mmapFd = -1; // fake or actual fd for anonymous file 254 255 246 256 #ifdef __CFA_DEBUG__ 247 257 static bool heapBoot = 0; // detect recursion during boot … … 249 259 static HeapManager heapManager __attribute__(( aligned (128) )) @= {}; // size of cache line to prevent false sharing 250 260 261 // #comment TD : The return type of this function should be commented 262 static inline bool setMmapStart( size_t value ) { 263 if ( value < pageSize || bucketSizes[NoBucketSizes - 1] < value ) return true; 264 mmapStart = value; // set global 265 266 // find the closest bucket size less than or equal to the mmapStart size 267 maxBucketsUsed = bsearchl( (unsigned int)mmapStart, bucketSizes, NoBucketSizes ); // binary search 268 assert( maxBucketsUsed < NoBucketSizes ); // subscript failure ? 269 assert( mmapStart <= bucketSizes[maxBucketsUsed] ); // search failure ? 270 return false; 271 } // setMmapStart 272 273 274 static void ?{}( HeapManager & manager ) with ( manager ) { 275 pageSize = sysconf( _SC_PAGESIZE ); 276 277 for ( unsigned int i = 0; i < NoBucketSizes; i += 1 ) { // initialize the free lists 278 freeLists[i].blockSize = bucketSizes[i]; 279 } // for 280 281 #ifdef FASTLOOKUP 282 unsigned int idx = 0; 283 for ( unsigned int i = 0; i < LookupSizes; i += 1 ) { 284 if ( i > bucketSizes[idx] ) idx += 1; 285 lookup[i] = idx; 286 } // for 287 #endif // FASTLOOKUP 288 289 if ( setMmapStart( default_mmap_start() ) ) { 290 abort( "HeapManager : internal error, mmap start initialization failure." ); 291 } // if 292 heapExpand = default_heap_expansion(); 293 294 char * End = (char *)sbrk( 0 ); 295 sbrk( (char *)libCeiling( (long unsigned int)End, libAlign() ) - End ); // move start of heap to multiple of alignment 296 heapBegin = heapEnd = sbrk( 0 ); // get new start point 297 } // HeapManager 298 299 300 static void ^?{}( HeapManager & ) { 301 #ifdef __STATISTICS__ 302 // if ( traceHeapTerm() ) { 303 // printStats(); 304 // if ( checkfree() ) checkFree( heapManager, true ); 305 // } // if 306 #endif // __STATISTICS__ 307 } // ~HeapManager 308 309 310 static void memory_startup( void ) __attribute__(( constructor( STARTUP_PRIORITY_MEMORY ) )); 311 void memory_startup( void ) { 312 #ifdef __CFA_DEBUG__ 313 if ( unlikely( heapBoot ) ) { // check for recursion during system boot 314 // DO NOT USE STREAMS AS THEY MAY BE UNAVAILABLE AT THIS POINT. 315 abort( "boot() : internal error, recursively invoked during system boot." ); 316 } // if 317 heapBoot = true; 318 #endif // __CFA_DEBUG__ 319 320 //assert( heapManager.heapBegin != 0 ); 321 //heapManager{}; 322 if ( heapManager.heapBegin == 0 ) heapManager{}; 323 } // memory_startup 324 325 static void memory_shutdown( void ) __attribute__(( destructor( STARTUP_PRIORITY_MEMORY ) )); 326 void memory_shutdown( void ) { 327 ^heapManager{}; 328 } // memory_shutdown 329 251 330 252 331 #ifdef __STATISTICS__ 253 // Heap statistics counters. 254 static unsigned long long int mmap_storage; 332 static unsigned long long int mmap_storage; // heap statistics counters 255 333 static unsigned int mmap_calls; 256 334 static unsigned long long int munmap_storage; … … 270 348 static unsigned long long int realloc_storage; 271 349 static unsigned int realloc_calls; 272 // Statistics file descriptor (changed by malloc_stats_fd). 273 static int statfd = STDERR_FILENO; // default stderr 350 351 static int statfd; // statistics file descriptor (changed by malloc_stats_fd) 352 274 353 275 354 // Use "write" because streams may be shutdown when calls are made. 276 355 static void printStats() { 277 356 char helpText[512]; 278 __cfaabi_ bits_print_buffer( STDERR_FILENO,helpText, sizeof(helpText),357 __cfaabi_dbg_bits_print_buffer( helpText, sizeof(helpText), 279 358 "\nHeap statistics:\n" 280 359 " malloc: calls %u / storage %llu\n" … … 326 405 sbrk_calls, sbrk_storage 327 406 ); 328 __cfaabi_bits_write( fileno( stream ), helpText, len ); // ensures all bytes written or exit 329 return len; 407 return write( fileno( stream ), helpText, len ); // -1 => error 330 408 } // printStatsXML 331 409 #endif // __STATISTICS__ 332 333 410 334 411 // #comment TD : Is this the samething as Out-of-Memory? … … 341 418 342 419 static inline void checkAlign( size_t alignment ) { 343 if ( alignment < libAlign() || ! libPow2( alignment ) ) {344 abort( "Alignment %zu for memory allocation is less than %d and/or not a power of 2.", alignment, libAlign());420 if ( alignment < sizeof(void *) || ! libPow2( alignment ) ) { 421 abort( "Alignment %zu for memory allocation is less than sizeof(void *) and/or not a power of 2.", alignment ); 345 422 } // if 346 423 } // checkAlign … … 354 431 355 432 356 // thunk problem 433 static inline void checkHeader( bool check, const char * name, void * addr ) { 434 if ( unlikely( check ) ) { // bad address ? 435 abort( "Attempt to %s storage %p with address outside the heap.\n" 436 "Possible cause is duplicate free on same block or overwriting of memory.", 437 name, addr ); 438 } // if 439 } // checkHeader 440 441 // #comment TD : function should be commented and/or have a more evocative name 442 // this isn't either a check or a constructor which is what I would expect this function to be 443 static inline void fakeHeader( HeapManager.Storage.Header *& header, size_t & size, size_t & alignment ) { 444 if ( unlikely( (header->kind.fake.alignment & 1) == 1 ) ) { // fake header ? 445 size_t offset = header->kind.fake.offset; 446 alignment = header->kind.fake.alignment & -2; // remove flag from value 447 #ifdef __CFA_DEBUG__ 448 checkAlign( alignment ); // check alignment 449 #endif // __CFA_DEBUG__ 450 header = (HeapManager.Storage.Header *)((char *)header - offset); 451 } // if 452 } // fakeHeader 453 454 // #comment TD : Why is this a define 455 #define headerAddr( addr ) ((HeapManager.Storage.Header *)( (char *)addr - sizeof(HeapManager.Storage) )) 456 457 static inline bool headers( const char * name, void * addr, HeapManager.Storage.Header *& header, HeapManager.FreeHeader *& freeElem, size_t & size, size_t & alignment ) with ( heapManager ) { 458 header = headerAddr( addr ); 459 460 if ( unlikely( heapEnd < addr ) ) { // mmapped ? 461 fakeHeader( header, size, alignment ); 462 size = header->kind.real.blockSize & -3; // mmap size 463 return true; 464 } // if 465 466 #ifdef __CFA_DEBUG__ 467 checkHeader( addr < heapBegin || header < (HeapManager.Storage.Header *)heapBegin, name, addr ); // bad low address ? 468 #endif // __CFA_DEBUG__ 469 470 // #comment TD : This code looks weird... 471 // It's called as the first statement of both branches of the last if, with the same parameters in all cases 472 473 // header may be safe to dereference 474 fakeHeader( header, size, alignment ); 475 #ifdef __CFA_DEBUG__ 476 checkHeader( header < (HeapManager.Storage.Header *)heapBegin || (HeapManager.Storage.Header *)heapEnd < header, name, addr ); // bad address ? (offset could be + or -) 477 #endif // __CFA_DEBUG__ 478 479 freeElem = (HeapManager.FreeHeader *)((size_t)header->kind.real.home & -3); 480 #ifdef __CFA_DEBUG__ 481 if ( freeElem < &freeLists[0] || &freeLists[NoBucketSizes] <= freeElem ) { 482 abort( "Attempt to %s storage %p with corrupted header.\n" 483 "Possible cause is duplicate free on same block or overwriting of header information.", 484 name, addr ); 485 } // if 486 #endif // __CFA_DEBUG__ 487 size = freeElem->blockSize; 488 return false; 489 } // headers 490 491 492 static inline void * extend( size_t size ) with ( heapManager ) { 493 lock( extlock __cfaabi_dbg_ctx2 ); 494 ptrdiff_t rem = heapRemaining - size; 495 if ( rem < 0 ) { 496 // If the size requested is bigger than the current remaining storage, increase the size of the heap. 497 498 size_t increase = libCeiling( size > heapExpand ? size : heapExpand, libAlign() ); 499 if ( sbrk( increase ) == (void *)-1 ) { 500 unlock( extlock ); 501 errno = ENOMEM; 502 return 0; 503 } // if 504 #ifdef __STATISTICS__ 505 sbrk_calls += 1; 506 sbrk_storage += increase; 507 #endif // __STATISTICS__ 508 #ifdef __CFA_DEBUG__ 509 // Set new memory to garbage so subsequent uninitialized usages might fail. 510 memset( (char *)heapEnd + heapRemaining, '\377', increase ); 511 #endif // __CFA_DEBUG__ 512 rem = heapRemaining + increase - size; 513 } // if 514 515 HeapManager.Storage * block = (HeapManager.Storage *)heapEnd; 516 heapRemaining = rem; 517 heapEnd = (char *)heapEnd + size; 518 unlock( extlock ); 519 return block; 520 } // extend 521 522 357 523 size_t Bsearchl( unsigned int key, const unsigned int * vals, size_t dim ) { 358 524 size_t l = 0, m, h = dim; … … 369 535 370 536 371 static inline bool setMmapStart( size_t value ) { // true => mmapped, false => sbrk372 if ( value < pageSize || bucketSizes[NoBucketSizes - 1] < value ) return true;373 mmapStart = value; // set global374 375 // find the closest bucket size less than or equal to the mmapStart size376 maxBucketsUsed = Bsearchl( (unsigned int)mmapStart, bucketSizes, NoBucketSizes ); // binary search377 assert( maxBucketsUsed < NoBucketSizes ); // subscript failure ?378 assert( mmapStart <= bucketSizes[maxBucketsUsed] ); // search failure ?379 return false;380 } // setMmapStart381 382 383 static inline void checkHeader( bool check, const char * name, void * addr ) {384 if ( unlikely( check ) ) { // bad address ?385 abort( "Attempt to %s storage %p with address outside the heap.\n"386 "Possible cause is duplicate free on same block or overwriting of memory.",387 name, addr );388 } // if389 } // checkHeader390 391 392 static inline void fakeHeader( HeapManager.Storage.Header *& header, size_t & alignment ) {393 if ( unlikely( (header->kind.fake.alignment & 1) == 1 ) ) { // fake header ?394 size_t offset = header->kind.fake.offset;395 alignment = header->kind.fake.alignment & -2; // remove flag from value396 #ifdef __CFA_DEBUG__397 checkAlign( alignment ); // check alignment398 #endif // __CFA_DEBUG__399 header = (HeapManager.Storage.Header *)((char *)header - offset);400 } // if401 } // fakeHeader402 403 404 // <-------+----------------------------------------------------> bsize (bucket size)405 // |header |addr406 //==================================================================================407 // | alignment408 // <-----------------<------------+-----------------------------> bsize (bucket size)409 // |fake-header | addr410 #define headerAddr( addr ) ((HeapManager.Storage.Header *)( (char *)addr - sizeof(HeapManager.Storage) ))411 412 // <-------<<--------------------- dsize ---------------------->> bsize (bucket size)413 // |header |addr414 //==================================================================================415 // | alignment416 // <------------------------------<<---------- dsize --------->>> bsize (bucket size)417 // |fake-header |addr418 #define dataStorage( bsize, addr, header ) (bsize - ( (char *)addr - (char *)header ))419 420 421 static inline bool headers( const char * name __attribute__(( unused )), void * addr, HeapManager.Storage.Header *& header, HeapManager.FreeHeader *& freeElem, size_t & size, size_t & alignment ) with ( heapManager ) {422 header = headerAddr( addr );423 424 if ( unlikely( heapEnd < addr ) ) { // mmapped ?425 fakeHeader( header, alignment );426 size = header->kind.real.blockSize & -3; // mmap size427 return true;428 } // if429 430 #ifdef __CFA_DEBUG__431 checkHeader( addr < heapBegin || header < (HeapManager.Storage.Header *)heapBegin, name, addr ); // bad low address ?432 #endif // __CFA_DEBUG__433 434 // header may be safe to dereference435 fakeHeader( header, alignment );436 #ifdef __CFA_DEBUG__437 checkHeader( header < (HeapManager.Storage.Header *)heapBegin || (HeapManager.Storage.Header *)heapEnd < header, name, addr ); // bad address ? (offset could be + or -)438 #endif // __CFA_DEBUG__439 440 freeElem = (HeapManager.FreeHeader *)((size_t)header->kind.real.home & -3);441 #ifdef __CFA_DEBUG__442 if ( freeElem < &freeLists[0] || &freeLists[NoBucketSizes] <= freeElem ) {443 abort( "Attempt to %s storage %p with corrupted header.\n"444 "Possible cause is duplicate free on same block or overwriting of header information.",445 name, addr );446 } // if447 #endif // __CFA_DEBUG__448 size = freeElem->blockSize;449 return false;450 } // headers451 452 453 static inline void * extend( size_t size ) with ( heapManager ) {454 lock( extlock __cfaabi_dbg_ctx2 );455 ptrdiff_t rem = heapRemaining - size;456 if ( rem < 0 ) {457 // If the size requested is bigger than the current remaining storage, increase the size of the heap.458 459 size_t increase = libCeiling( size > heapExpand ? size : heapExpand, libAlign() );460 if ( sbrk( increase ) == (void *)-1 ) {461 unlock( extlock );462 errno = ENOMEM;463 return 0p;464 } // if465 #ifdef __STATISTICS__466 sbrk_calls += 1;467 sbrk_storage += increase;468 #endif // __STATISTICS__469 #ifdef __CFA_DEBUG__470 // Set new memory to garbage so subsequent uninitialized usages might fail.471 memset( (char *)heapEnd + heapRemaining, '\377', increase );472 #endif // __CFA_DEBUG__473 rem = heapRemaining + increase - size;474 } // if475 476 HeapManager.Storage * block = (HeapManager.Storage *)heapEnd;477 heapRemaining = rem;478 heapEnd = (char *)heapEnd + size;479 unlock( extlock );480 return block;481 } // extend482 483 484 537 static inline void * doMalloc( size_t size ) with ( heapManager ) { 485 538 HeapManager.Storage * block; // pointer to new block of storage … … 488 541 // along with the block and is a multiple of the alignment size. 489 542 490 if ( unlikely( size > ~0ul - sizeof(HeapManager.Storage) ) ) return 0 p;543 if ( unlikely( size > ~0ul - sizeof(HeapManager.Storage) ) ) return 0; 491 544 size_t tsize = size + sizeof(HeapManager.Storage); 492 545 if ( likely( tsize < mmapStart ) ) { // small size => sbrk … … 521 574 block = freeElem->freeList.pop(); 522 575 #endif // SPINLOCK 523 if ( unlikely( block == 0 p ) ) {// no free block ?576 if ( unlikely( block == 0 ) ) { // no free block ? 524 577 #if defined( SPINLOCK ) 525 578 unlock( freeElem->lock ); … … 530 583 531 584 block = (HeapManager.Storage *)extend( tsize ); // mutual exclusion on call 532 if ( unlikely( block == 0 p ) ) return 0p;533 #if defined( SPINLOCK )585 if ( unlikely( block == 0 ) ) return 0; 586 #if defined( SPINLOCK ) 534 587 } else { 535 588 freeElem->freeList = block->header.kind.real.next; 536 589 unlock( freeElem->lock ); 537 #endif // SPINLOCK590 #endif // SPINLOCK 538 591 } // if 539 592 540 593 block->header.kind.real.home = freeElem; // pointer back to free list of apropriate size 541 594 } else { // large size => mmap 542 if ( unlikely( size > ~0ul - pageSize ) ) return 0 p;595 if ( unlikely( size > ~0ul - pageSize ) ) return 0; 543 596 tsize = libCeiling( tsize, pageSize ); // must be multiple of page size 544 597 #ifdef __STATISTICS__ … … 558 611 } // if 559 612 560 void * a ddr= &(block->data); // adjust off header to user bytes613 void * area = &(block->data); // adjust off header to user bytes 561 614 562 615 #ifdef __CFA_DEBUG__ 563 assert( ((uintptr_t)a ddr& (libAlign() - 1)) == 0 ); // minimum alignment ?616 assert( ((uintptr_t)area & (libAlign() - 1)) == 0 ); // minimum alignment ? 564 617 __atomic_add_fetch( &allocFree, tsize, __ATOMIC_SEQ_CST ); 565 618 if ( traceHeap() ) { 566 619 enum { BufferSize = 64 }; 567 620 char helpText[BufferSize]; 568 int len = snprintf( helpText, BufferSize, "%p = Malloc( %zu ) (allocated %zu)\n", a ddr, size, tsize );569 // int len = snprintf( helpText, BufferSize, "Malloc %p %zu\n", a ddr, size );570 __cfaabi_ bits_write( STDERR_FILENO, helpText, len ); // print debug/nodebug621 int len = snprintf( helpText, BufferSize, "%p = Malloc( %zu ) (allocated %zu)\n", area, size, tsize ); 622 // int len = snprintf( helpText, BufferSize, "Malloc %p %zu\n", area, size ); 623 __cfaabi_dbg_bits_write( helpText, len ); 571 624 } // if 572 625 #endif // __CFA_DEBUG__ 573 626 574 return a ddr;627 return area; 575 628 } // doMalloc 576 629 … … 578 631 static inline void doFree( void * addr ) with ( heapManager ) { 579 632 #ifdef __CFA_DEBUG__ 580 if ( unlikely( heapManager.heapBegin == 0 p) ) {633 if ( unlikely( heapManager.heapBegin == 0 ) ) { 581 634 abort( "doFree( %p ) : internal error, called before heap is initialized.", addr ); 582 635 } // if … … 624 677 char helpText[BufferSize]; 625 678 int len = snprintf( helpText, sizeof(helpText), "Free( %p ) size:%zu\n", addr, size ); 626 __cfaabi_ bits_write( STDERR_FILENO, helpText, len ); // print debug/nodebug679 __cfaabi_dbg_bits_write( helpText, len ); 627 680 } // if 628 681 #endif // __CFA_DEBUG__ … … 630 683 631 684 632 size_t prtFree( HeapManager & manager ) with ( manager ) {685 size_t checkFree( HeapManager & manager ) with ( manager ) { 633 686 size_t total = 0; 634 687 #ifdef __STATISTICS__ 635 __cfaabi_ bits_acquire();636 __cfaabi_ bits_print_nolock( STDERR_FILENO,"\nBin lists (bin size : free blocks on list)\n" );688 __cfaabi_dbg_bits_acquire(); 689 __cfaabi_dbg_bits_print_nolock( "\nBin lists (bin size : free blocks on list)\n" ); 637 690 #endif // __STATISTICS__ 638 691 for ( unsigned int i = 0; i < maxBucketsUsed; i += 1 ) { … … 643 696 644 697 #if defined( SPINLOCK ) 645 for ( HeapManager.Storage * p = freeLists[i].freeList; p != 0 p; p = p->header.kind.real.next ) {698 for ( HeapManager.Storage * p = freeLists[i].freeList; p != 0; p = p->header.kind.real.next ) { 646 699 #else 647 for ( HeapManager.Storage * p = freeLists[i].freeList.top(); p != 0 p; p = p->header.kind.real.next.top ) {700 for ( HeapManager.Storage * p = freeLists[i].freeList.top(); p != 0; p = p->header.kind.real.next.top ) { 648 701 #endif // SPINLOCK 649 702 total += size; … … 654 707 655 708 #ifdef __STATISTICS__ 656 __cfaabi_ bits_print_nolock( STDERR_FILENO,"%7zu, %-7u ", size, N );657 if ( (i + 1) % 8 == 0 ) __cfaabi_ bits_print_nolock( STDERR_FILENO,"\n" );709 __cfaabi_dbg_bits_print_nolock( "%7zu, %-7u ", size, N ); 710 if ( (i + 1) % 8 == 0 ) __cfaabi_dbg_bits_print_nolock( "\n" ); 658 711 #endif // __STATISTICS__ 659 712 } // for 660 713 #ifdef __STATISTICS__ 661 __cfaabi_ bits_print_nolock( STDERR_FILENO,"\ntotal free blocks:%zu\n", total );662 __cfaabi_ bits_release();714 __cfaabi_dbg_bits_print_nolock( "\ntotal free blocks:%zu\n", total ); 715 __cfaabi_dbg_bits_release(); 663 716 #endif // __STATISTICS__ 664 717 return (char *)heapEnd - (char *)heapBegin - total; 665 } // prtFree 666 667 668 static void ?{}( HeapManager & manager ) with ( manager ) { 669 pageSize = sysconf( _SC_PAGESIZE ); 670 671 for ( unsigned int i = 0; i < NoBucketSizes; i += 1 ) { // initialize the free lists 672 freeLists[i].blockSize = bucketSizes[i]; 673 } // for 674 675 #ifdef FASTLOOKUP 676 unsigned int idx = 0; 677 for ( unsigned int i = 0; i < LookupSizes; i += 1 ) { 678 if ( i > bucketSizes[idx] ) idx += 1; 679 lookup[i] = idx; 680 } // for 681 #endif // FASTLOOKUP 682 683 if ( setMmapStart( default_mmap_start() ) ) { 684 abort( "HeapManager : internal error, mmap start initialization failure." ); 685 } // if 686 heapExpand = default_heap_expansion(); 687 688 char * end = (char *)sbrk( 0 ); 689 sbrk( (char *)libCeiling( (long unsigned int)end, libAlign() ) - end ); // move start of heap to multiple of alignment 690 heapBegin = heapEnd = sbrk( 0 ); // get new start point 691 } // HeapManager 692 693 694 static void ^?{}( HeapManager & ) { 695 #ifdef __STATISTICS__ 696 if ( traceHeapTerm() ) { 697 printStats(); 698 // if ( prtfree() ) prtFree( heapManager, true ); 699 } // if 700 #endif // __STATISTICS__ 701 } // ~HeapManager 702 703 704 static void memory_startup( void ) __attribute__(( constructor( STARTUP_PRIORITY_MEMORY ) )); 705 void memory_startup( void ) { 706 #ifdef __CFA_DEBUG__ 707 if ( unlikely( heapBoot ) ) { // check for recursion during system boot 708 // DO NOT USE STREAMS AS THEY MAY BE UNAVAILABLE AT THIS POINT. 709 abort( "boot() : internal error, recursively invoked during system boot." ); 710 } // if 711 heapBoot = true; 712 #endif // __CFA_DEBUG__ 713 714 //assert( heapManager.heapBegin != 0 ); 715 //heapManager{}; 716 if ( heapManager.heapBegin == 0p ) heapManager{}; 717 } // memory_startup 718 719 static void memory_shutdown( void ) __attribute__(( destructor( STARTUP_PRIORITY_MEMORY ) )); 720 void memory_shutdown( void ) { 721 ^heapManager{}; 722 } // memory_shutdown 718 } // checkFree 723 719 724 720 725 721 static inline void * mallocNoStats( size_t size ) { // necessary for malloc statistics 726 722 //assert( heapManager.heapBegin != 0 ); 727 if ( unlikely( heapManager.heapBegin == 0 p) ) heapManager{}; // called before memory_startup ?728 void * a ddr= doMalloc( size );729 if ( unlikely( a ddr == 0p) ) errno = ENOMEM; // POSIX730 return a ddr;723 if ( unlikely( heapManager.heapBegin == 0 ) ) heapManager{}; // called before memory_startup ? 724 void * area = doMalloc( size ); 725 if ( unlikely( area == 0 ) ) errno = ENOMEM; // POSIX 726 return area; 731 727 } // mallocNoStats 732 733 734 static inline void * callocNoStats( size_t noOfElems, size_t elemSize ) {735 size_t size = noOfElems * elemSize;736 char * addr = (char *)mallocNoStats( size );737 if ( unlikely( addr == 0p ) ) return 0p;738 739 HeapManager.Storage.Header * header;740 HeapManager.FreeHeader * freeElem;741 size_t bsize, alignment;742 bool mapped __attribute__(( unused )) = headers( "calloc", addr, header, freeElem, bsize, alignment );743 #ifndef __CFA_DEBUG__744 // Mapped storage is zero filled, but in debug mode mapped memory is scrubbed in doMalloc, so it has to be reset to zero.745 if ( ! mapped )746 #endif // __CFA_DEBUG__747 // Zero entire data space even when > than size => realloc without a new allocation and zero fill works.748 // <-------00000000000000000000000000000000000000000000000000000> bsize (bucket size)749 // `-header`-addr `-size750 memset( addr, '\0', bsize - sizeof(HeapManager.Storage) ); // set to zeros751 752 header->kind.real.blockSize |= 2; // mark as zero filled753 return addr;754 } // callocNoStats755 728 756 729 … … 772 745 // subtract libAlign() because it is already the minimum alignment 773 746 // add sizeof(Storage) for fake header 774 char * addr = (char *)mallocNoStats( size + alignment - libAlign() + sizeof(HeapManager.Storage) ); 775 if ( unlikely( addr == 0p ) ) return addr; 747 // #comment TD : this is the only place that calls doMalloc without calling mallocNoStats, why ? 748 char * area = (char *)doMalloc( size + alignment - libAlign() + sizeof(HeapManager.Storage) ); 749 if ( unlikely( area == 0 ) ) return area; 776 750 777 751 // address in the block of the "next" alignment address 778 char * user = (char *)libCeiling( (uintptr_t)(a ddr+ sizeof(HeapManager.Storage)), alignment );752 char * user = (char *)libCeiling( (uintptr_t)(area + sizeof(HeapManager.Storage)), alignment ); 779 753 780 754 // address of header from malloc 781 HeapManager.Storage.Header * realHeader = headerAddr( a ddr);755 HeapManager.Storage.Header * realHeader = headerAddr( area ); 782 756 // address of fake header * before* the alignment location 783 757 HeapManager.Storage.Header * fakeHeader = headerAddr( user ); … … 789 763 return user; 790 764 } // memalignNoStats 791 792 793 static inline void * cmemalignNoStats( size_t alignment, size_t noOfElems, size_t elemSize ) {794 size_t size = noOfElems * elemSize;795 char * addr = (char *)memalignNoStats( alignment, size );796 if ( unlikely( addr == 0p ) ) return 0p;797 HeapManager.Storage.Header * header;798 HeapManager.FreeHeader * freeElem;799 size_t bsize;800 bool mapped __attribute__(( unused )) = headers( "cmemalign", addr, header, freeElem, bsize, alignment );801 #ifndef __CFA_DEBUG__802 // Mapped storage is zero filled, but in debug mode mapped memory is scrubbed in doMalloc, so it has to be reset to zero.803 if ( ! mapped )804 #endif // __CFA_DEBUG__805 memset( addr, '\0', dataStorage( bsize, addr, header ) ); // set to zeros806 header->kind.real.blockSize |= 2; // mark as zero filled807 808 return addr;809 } // cmemalignNoStats810 765 811 766 … … 821 776 extern "C" { 822 777 // The malloc() function allocates size bytes and returns a pointer to the allocated memory. The memory is not 823 // initialized. If size is 0, then malloc() returns either 0p, or a unique pointer value that can later be778 // initialized. If size is 0, then malloc() returns either NULL, or a unique pointer value that can later be 824 779 // successfully passed to free(). 825 780 void * malloc( size_t size ) { … … 833 788 834 789 // The calloc() function allocates memory for an array of nmemb elements of size bytes each and returns a pointer to 835 // the allocated memory. The memory is set to zero. If nmemb or size is 0, then calloc() returns either 0p, or a790 // the allocated memory. The memory is set to zero. If nmemb or size is 0, then calloc() returns either NULL, or a 836 791 // unique pointer value that can later be successfully passed to free(). 837 792 void * calloc( size_t noOfElems, size_t elemSize ) { 793 size_t size = noOfElems * elemSize; 838 794 #ifdef __STATISTICS__ 839 795 __atomic_add_fetch( &calloc_calls, 1, __ATOMIC_SEQ_CST ); 840 __atomic_add_fetch( &calloc_storage, noOfElems * elemSize, __ATOMIC_SEQ_CST ); 841 #endif // __STATISTICS__ 842 843 return callocNoStats( noOfElems, elemSize ); 796 __atomic_add_fetch( &calloc_storage, size, __ATOMIC_SEQ_CST ); 797 #endif // __STATISTICS__ 798 799 char * area = (char *)mallocNoStats( size ); 800 if ( unlikely( area == 0 ) ) return 0; 801 802 HeapManager.Storage.Header * header; 803 HeapManager.FreeHeader * freeElem; 804 size_t asize, alignment; 805 bool mapped __attribute__(( unused )) = headers( "calloc", area, header, freeElem, asize, alignment ); 806 #ifndef __CFA_DEBUG__ 807 // Mapped storage is zero filled, but in debug mode mapped memory is scrubbed in doMalloc, so it has to be reset to zero. 808 if ( ! mapped ) 809 #endif // __CFA_DEBUG__ 810 memset( area, '\0', asize - sizeof(HeapManager.Storage) ); // set to zeros 811 812 header->kind.real.blockSize |= 2; // mark as zero filled 813 return area; 844 814 } // calloc 815 816 // #comment TD : Document this function 817 void * cmemalign( size_t alignment, size_t noOfElems, size_t elemSize ) { 818 size_t size = noOfElems * elemSize; 819 #ifdef __STATISTICS__ 820 __atomic_add_fetch( &cmemalign_calls, 1, __ATOMIC_SEQ_CST ); 821 __atomic_add_fetch( &cmemalign_storage, size, __ATOMIC_SEQ_CST ); 822 #endif // __STATISTICS__ 823 824 char * area = (char *)memalignNoStats( alignment, size ); 825 if ( unlikely( area == 0 ) ) return 0; 826 HeapManager.Storage.Header * header; 827 HeapManager.FreeHeader * freeElem; 828 size_t asize; 829 bool mapped __attribute__(( unused )) = headers( "cmemalign", area, header, freeElem, asize, alignment ); 830 #ifndef __CFA_DEBUG__ 831 // Mapped storage is zero filled, but in debug mode mapped memory is scrubbed in doMalloc, so it has to be reset to zero. 832 if ( ! mapped ) 833 #endif // __CFA_DEBUG__ 834 memset( area, '\0', asize - ( (char *)area - (char *)header ) ); // set to zeros 835 header->kind.real.blockSize |= 2; // mark as zero filled 836 837 return area; 838 } // cmemalign 845 839 846 840 // The realloc() function changes the size of the memory block pointed to by ptr to size bytes. The contents will be 847 841 // unchanged in the range from the start of the region up to the minimum of the old and new sizes. If the new size 848 // is larger than the old size, the added memory will not be initialized. If ptr is 0p, then the call is849 // equivalent to malloc(size), for all values of size; if size is equal to zero, and ptr is not 0p, then the call850 // is equivalent to free(ptr). Unless ptr is 0p, it must have been returned by an earlier call to malloc(),842 // is larger than the old size, the added memory will not be initialized. If ptr is NULL, then the call is 843 // equivalent to malloc(size), for all values of size; if size is equal to zero, and ptr is not NULL, then the call 844 // is equivalent to free(ptr). Unless ptr is NULL, it must have been returned by an earlier call to malloc(), 851 845 // calloc() or realloc(). If the area pointed to was moved, a free(ptr) is done. 852 void * realloc( void * oaddr, size_t size ) {846 void * realloc( void * addr, size_t size ) { 853 847 #ifdef __STATISTICS__ 854 848 __atomic_add_fetch( &realloc_calls, 1, __ATOMIC_SEQ_CST ); 855 849 #endif // __STATISTICS__ 856 850 857 // If size is equal to 0, either NULL or a pointer suitable to be passed to free() is returned. 858 if ( unlikely( size == 0 ) ) { free( oaddr ); return mallocNoStats( size ); } // special cases 859 if ( unlikely( oaddr == 0p ) ) return mallocNoStats( size ); 851 if ( unlikely( addr == 0 ) ) return mallocNoStats( size ); // special cases 852 if ( unlikely( size == 0 ) ) { free( addr ); return 0; } 860 853 861 854 HeapManager.Storage.Header * header; 862 855 HeapManager.FreeHeader * freeElem; 863 size_t bsize, oalign = 0; 864 headers( "realloc", oaddr, header, freeElem, bsize, oalign ); 865 866 size_t odsize = dataStorage( bsize, oaddr, header ); // data storage available in bucket 867 if ( size <= odsize && odsize <= size * 2 ) { // allow up to 50% wasted storage in smaller size 868 // Do not know size of original allocation => cannot do 0 fill for any additional space because do not know 869 // where to start filling, i.e., do not overwrite existing values in space. 870 // 856 size_t asize, alignment = 0; 857 headers( "realloc", addr, header, freeElem, asize, alignment ); 858 859 size_t usize = asize - ( (char *)addr - (char *)header ); // compute the amount of user storage in the block 860 if ( usize >= size ) { // already sufficient storage 871 861 // This case does not result in a new profiler entry because the previous one still exists and it must match with 872 862 // the free for this memory. Hence, this realloc does not appear in the profiler output. 873 return oaddr;863 return addr; 874 864 } // if 875 865 … … 878 868 #endif // __STATISTICS__ 879 869 880 // change size and copy old content to new storage 881 882 void * naddr; 883 if ( unlikely( oalign != 0 ) ) { // previous request memalign? 884 if ( unlikely( header->kind.real.blockSize & 2 ) ) { // previous request zero fill 885 naddr = cmemalignNoStats( oalign, 1, size ); // create new aligned area 886 } else { 887 naddr = memalignNoStats( oalign, size ); // create new aligned area 888 } // if 870 void * area; 871 if ( unlikely( alignment != 0 ) ) { // previous request memalign? 872 area = memalign( alignment, size ); // create new aligned area 889 873 } else { 890 if ( unlikely( header->kind.real.blockSize & 2 ) ) { // previous request zero fill 891 naddr = callocNoStats( 1, size ); // create new area 892 } else { 893 naddr = mallocNoStats( size ); // create new area 894 } // if 874 area = mallocNoStats( size ); // create new area 895 875 } // if 896 if ( unlikely( naddr == 0p ) ) return 0p; 897 898 headers( "realloc", naddr, header, freeElem, bsize, oalign ); 899 size_t ndsize = dataStorage( bsize, naddr, header ); // data storage avilable in bucket 900 // To preserve prior fill, the entire bucket must be copied versus the size. 901 memcpy( naddr, oaddr, MIN( odsize, ndsize ) ); // copy bytes 902 free( oaddr ); 903 return naddr; 876 if ( unlikely( area == 0 ) ) return 0; 877 if ( unlikely( header->kind.real.blockSize & 2 ) ) { // previous request zero fill (calloc/cmemalign) ? 878 assert( (header->kind.real.blockSize & 1) == 0 ); 879 bool mapped __attribute__(( unused )) = headers( "realloc", area, header, freeElem, asize, alignment ); 880 #ifndef __CFA_DEBUG__ 881 // Mapped storage is zero filled, but in debug mode mapped memory is scrubbed in doMalloc, so it has to be reset to zero. 882 if ( ! mapped ) 883 #endif // __CFA_DEBUG__ 884 memset( (char *)area + usize, '\0', asize - ( (char *)area - (char *)header ) - usize ); // zero-fill back part 885 header->kind.real.blockSize |= 2; // mark new request as zero fill 886 } // if 887 memcpy( area, addr, usize ); // copy bytes 888 free( addr ); 889 return area; 904 890 } // realloc 905 891 … … 912 898 #endif // __STATISTICS__ 913 899 914 return memalignNoStats( alignment, size ); 900 void * area = memalignNoStats( alignment, size ); 901 902 return area; 915 903 } // memalign 916 917 918 // The cmemalign() function is the same as calloc() with memory alignment.919 void * cmemalign( size_t alignment, size_t noOfElems, size_t elemSize ) {920 #ifdef __STATISTICS__921 __atomic_add_fetch( &cmemalign_calls, 1, __ATOMIC_SEQ_CST );922 __atomic_add_fetch( &cmemalign_storage, noOfElems * elemSize, __ATOMIC_SEQ_CST );923 #endif // __STATISTICS__924 925 return cmemalignNoStats( alignment, noOfElems, elemSize );926 } // cmemalign927 904 928 905 // The function aligned_alloc() is the same as memalign(), except for the added restriction that size should be a … … 935 912 // The function posix_memalign() allocates size bytes and places the address of the allocated memory in *memptr. The 936 913 // address of the allocated memory will be a multiple of alignment, which must be a power of two and a multiple of 937 // sizeof(void *). If size is 0, then posix_memalign() returns either 0p, or a unique pointer value that can later914 // sizeof(void *). If size is 0, then posix_memalign() returns either NULL, or a unique pointer value that can later 938 915 // be successfully passed to free(3). 939 916 int posix_memalign( void ** memptr, size_t alignment, size_t size ) { 940 917 if ( alignment < sizeof(void *) || ! libPow2( alignment ) ) return EINVAL; // check alignment 941 918 * memptr = memalign( alignment, size ); 942 if ( unlikely( * memptr == 0 p) ) return ENOMEM;919 if ( unlikely( * memptr == 0 ) ) return ENOMEM; 943 920 return 0; 944 921 } // posix_memalign … … 953 930 // The free() function frees the memory space pointed to by ptr, which must have been returned by a previous call to 954 931 // malloc(), calloc() or realloc(). Otherwise, or if free(ptr) has already been called before, undefined behavior 955 // occurs. If ptr is 0p, no operation is performed.932 // occurs. If ptr is NULL, no operation is performed. 956 933 void free( void * addr ) { 957 934 #ifdef __STATISTICS__ … … 959 936 #endif // __STATISTICS__ 960 937 961 if ( unlikely( addr == 0p ) ) { // special case 962 // #ifdef __CFA_DEBUG__ 963 // if ( traceHeap() ) { 964 // #define nullmsg "Free( 0x0 ) size:0\n" 965 // // Do not debug print free( 0p ), as it can cause recursive entry from sprintf. 966 // __cfaabi_dbg_write( nullmsg, sizeof(nullmsg) - 1 ); 967 // } // if 968 // #endif // __CFA_DEBUG__ 938 // #comment TD : To decrease nesting I would but the special case in the 939 // else instead, plus it reads more naturally to have the 940 // short / normal case instead 941 if ( unlikely( addr == 0 ) ) { // special case 942 #ifdef __CFA_DEBUG__ 943 if ( traceHeap() ) { 944 #define nullmsg "Free( 0x0 ) size:0\n" 945 // Do not debug print free( 0 ), as it can cause recursive entry from sprintf. 946 __cfaabi_dbg_bits_write( nullmsg, sizeof(nullmsg) - 1 ); 947 } // if 948 #endif // __CFA_DEBUG__ 969 949 return; 970 950 } // exit … … 973 953 } // free 974 954 975 976 // The malloc_alignment() function returns the alignment of the allocation. 955 // The mallopt() function adjusts parameters that control the behavior of the memory-allocation functions (see 956 // malloc(3)). The param argument specifies the parameter to be modified, and value specifies the new value for that 957 // parameter. 958 int mallopt( int option, int value ) { 959 choose( option ) { 960 case M_TOP_PAD: 961 if ( setHeapExpand( value ) ) fallthru default; 962 case M_MMAP_THRESHOLD: 963 if ( setMmapStart( value ) ) fallthru default; 964 default: 965 // #comment TD : 1 for unsopported feels wrong 966 return 1; // success, or unsupported 967 } // switch 968 return 0; // error 969 } // mallopt 970 971 // The malloc_trim() function attempts to release free memory at the top of the heap (by calling sbrk(2) with a 972 // suitable argument). 973 int malloc_trim( size_t ) { 974 return 0; // => impossible to release memory 975 } // malloc_trim 976 977 // The malloc_usable_size() function returns the number of usable bytes in the block pointed to by ptr, a pointer to 978 // a block of memory allocated by malloc(3) or a related function. 979 size_t malloc_usable_size( void * addr ) { 980 if ( unlikely( addr == 0 ) ) return 0; // null allocation has 0 size 981 982 HeapManager.Storage.Header * header; 983 HeapManager.FreeHeader * freeElem; 984 size_t size, alignment; 985 986 headers( "malloc_usable_size", addr, header, freeElem, size, alignment ); 987 size_t usize = size - ( (char *)addr - (char *)header ); // compute the amount of user storage in the block 988 return usize; 989 } // malloc_usable_size 990 991 992 // The malloc_alignment() function returns the alignment of the allocation. 977 993 size_t malloc_alignment( void * addr ) { 978 if ( unlikely( addr == 0 p) ) return libAlign(); // minimum alignment994 if ( unlikely( addr == 0 ) ) return libAlign(); // minimum alignment 979 995 HeapManager.Storage.Header * header = headerAddr( addr ); 980 996 if ( (header->kind.fake.alignment & 1) == 1 ) { // fake header ? … … 986 1002 987 1003 988 // The malloc_zero_fill() function returns true if the allocation is zero filled, i.e., initially allocated by calloc().1004 // The malloc_zero_fill() function returns true if the allocation is zero filled, i.e., initially allocated by calloc(). 989 1005 bool malloc_zero_fill( void * addr ) { 990 if ( unlikely( addr == 0 p) ) return false; // null allocation is not zero fill1006 if ( unlikely( addr == 0 ) ) return false; // null allocation is not zero fill 991 1007 HeapManager.Storage.Header * header = headerAddr( addr ); 992 1008 if ( (header->kind.fake.alignment & 1) == 1 ) { // fake header ? … … 997 1013 998 1014 999 // The malloc_usable_size() function returns the number of usable bytes in the block pointed to by ptr, a pointer to 1000 // a block of memory allocated by malloc(3) or a related function. 1001 size_t malloc_usable_size( void * addr ) { 1002 if ( unlikely( addr == 0p ) ) return 0; // null allocation has 0 size 1003 HeapManager.Storage.Header * header; 1004 HeapManager.FreeHeader * freeElem; 1005 size_t bsize, alignment; 1006 1007 headers( "malloc_usable_size", addr, header, freeElem, bsize, alignment ); 1008 return dataStorage( bsize, addr, header ); // data storage in bucket 1009 } // malloc_usable_size 1010 1011 1012 // The malloc_stats() function prints (on default standard error) statistics about memory allocated by malloc(3) and 1013 // related functions. 1015 // The malloc_stats() function prints (on default standard error) statistics about memory allocated by malloc(3) and 1016 // related functions. 1014 1017 void malloc_stats( void ) { 1015 1018 #ifdef __STATISTICS__ 1016 1019 printStats(); 1017 if ( prtFree() ) prtFree( heapManager );1020 if ( checkFree() ) checkFree( heapManager ); 1018 1021 #endif // __STATISTICS__ 1019 1022 } // malloc_stats 1020 1023 1021 1024 // The malloc_stats_fd() function changes the file descripter where malloc_stats() writes the statistics. 1022 int malloc_stats_fd( int fd __attribute__(( unused ))) {1025 int malloc_stats_fd( int fd ) { 1023 1026 #ifdef __STATISTICS__ 1024 1027 int temp = statfd; … … 1030 1033 } // malloc_stats_fd 1031 1034 1032 1033 // The mallopt() function adjusts parameters that control the behavior of the memory-allocation functions (see1034 // malloc(3)). The param argument specifies the parameter to be modified, and value specifies the new value for that1035 // parameter.1036 int mallopt( int option, int value ) {1037 choose( option ) {1038 case M_TOP_PAD:1039 if ( setHeapExpand( value ) ) return 1;1040 case M_MMAP_THRESHOLD:1041 if ( setMmapStart( value ) ) return 1;1042 } // switch1043 return 0; // error, unsupported1044 } // mallopt1045 1046 // The malloc_trim() function attempts to release free memory at the top of the heap (by calling sbrk(2) with a1047 // suitable argument).1048 int malloc_trim( size_t ) {1049 return 0; // => impossible to release memory1050 } // malloc_trim1051 1052 1053 1035 // The malloc_info() function exports an XML string that describes the current state of the memory-allocation 1054 1036 // implementation in the caller. The string is printed on the file stream stream. The exported string includes 1055 1037 // information about all arenas (see malloc(3)). 1056 1038 int malloc_info( int options, FILE * stream ) { 1057 if ( options != 0 ) { errno = EINVAL; return -1; }1058 1039 return printStatsXML( stream ); 1059 1040 } // malloc_info … … 1065 1046 // structure is returned as the function result. (It is the caller's responsibility to free(3) this memory.) 1066 1047 void * malloc_get_state( void ) { 1067 return 0 p; // unsupported1048 return 0; // unsupported 1068 1049 } // malloc_get_state 1069 1050 … … 1077 1058 1078 1059 1079 // Must have CFA linkage to overload with C linkage realloc.1080 void * realloc( void * oaddr, size_t nalign, size_t size ) {1081 #ifdef __STATISTICS__1082 __atomic_add_fetch( &realloc_calls, 1, __ATOMIC_SEQ_CST );1083 #endif // __STATISTICS__1084 1085 // If size is equal to 0, either NULL or a pointer suitable to be passed to free() is returned.1086 if ( unlikely( size == 0 ) ) { free( oaddr ); return mallocNoStats( size ); } // special cases1087 if ( unlikely( oaddr == 0p ) ) return mallocNoStats( size );1088 1089 if ( unlikely( nalign == 0 ) ) nalign = libAlign(); // reset alignment to minimum1090 #ifdef __CFA_DEBUG__1091 else1092 checkAlign( nalign ); // check alignment1093 #endif // __CFA_DEBUG__1094 1095 HeapManager.Storage.Header * header;1096 HeapManager.FreeHeader * freeElem;1097 size_t bsize, oalign = 0;1098 headers( "realloc", oaddr, header, freeElem, bsize, oalign );1099 size_t odsize = dataStorage( bsize, oaddr, header ); // data storage available in bucket1100 1101 if ( oalign != 0 && (uintptr_t)oaddr % nalign == 0 ) { // has alignment and just happens to work out1102 headerAddr( oaddr )->kind.fake.alignment = nalign | 1; // update alignment (could be the same)1103 return realloc( oaddr, size );1104 } // if1105 1106 #ifdef __STATISTICS__1107 __atomic_add_fetch( &realloc_storage, size, __ATOMIC_SEQ_CST );1108 #endif // __STATISTICS__1109 1110 // change size and copy old content to new storage1111 1112 void * naddr;1113 if ( unlikely( header->kind.real.blockSize & 2 ) ) { // previous request zero fill1114 naddr = cmemalignNoStats( nalign, 1, size ); // create new aligned area1115 } else {1116 naddr = memalignNoStats( nalign, size ); // create new aligned area1117 } // if1118 1119 headers( "realloc", naddr, header, freeElem, bsize, oalign );1120 size_t ndsize = dataStorage( bsize, naddr, header ); // data storage avilable in bucket1121 // To preserve prior fill, the entire bucket must be copied versus the size.1122 memcpy( naddr, oaddr, MIN( odsize, ndsize ) ); // copy bytes1123 free( oaddr );1124 return naddr;1125 } // realloc1126 1127 1128 1060 // Local Variables: // 1129 1061 // tab-width: 4 // -
libcfa/src/interpose.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Wed Mar 29 16:10:31 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : S at Nov 30 07:09:42201913 // Update Count : 11 912 // Last Modified On : Sun Jul 14 22:57:16 2019 13 // Update Count : 116 14 14 // 15 15 … … 163 163 abort_lastframe = kernel_abort_lastframe(); 164 164 len = snprintf( abort_text, abort_text_size, "Cforall Runtime error (UNIX pid:%ld) ", (long int)getpid() ); // use UNIX pid (versus getPid) 165 __cfaabi_dbg_ write( abort_text, len );165 __cfaabi_dbg_bits_write( abort_text, len ); 166 166 167 167 if ( fmt ) { … … 171 171 len = vsnprintf( abort_text, abort_text_size, fmt, args ); 172 172 va_end( args ); 173 __cfaabi_dbg_ write( abort_text, len );173 __cfaabi_dbg_bits_write( abort_text, len ); 174 174 175 175 if ( fmt[strlen( fmt ) - 1] != '\n' ) { // add optional newline if missing at the end of the format text 176 __cfaabi_dbg_ write( "\n", 1 );176 __cfaabi_dbg_bits_write( "\n", 1 ); 177 177 } 178 178 } … … 194 194 // find executable name 195 195 *index( messages[0], '(' ) = '\0'; 196 __cfaabi_ bits_print_nolock( STDERR_FILENO,"Stack back trace for: %s\n", messages[0]);197 198 for ( int i = Start; i < size - abort_lastframe && messages != 0p; i += 1 ) {199 char * name = 0p, * offset_begin = 0p, * offset_end = 0p;196 __cfaabi_dbg_bits_print_nolock( "Stack back trace for: %s\n", messages[0]); 197 198 for ( int i = Start; i < size - abort_lastframe && messages != NULL; i += 1 ) { 199 char * name = NULL, * offset_begin = NULL, * offset_end = NULL; 200 200 201 201 for ( char * p = messages[i]; *p; ++p ) { 202 //__cfaabi_ bits_print_nolock( "X %s\n", p);202 //__cfaabi_dbg_bits_print_nolock( "X %s\n", p); 203 203 // find parantheses and +offset 204 204 if ( *p == '(' ) { … … 220 220 *offset_end++ = '\0'; 221 221 222 __cfaabi_ bits_print_nolock( STDERR_FILENO,"(%i) %s : %s + %s %s\n", frameNo, messages[i], name, offset_begin, offset_end);222 __cfaabi_dbg_bits_print_nolock( "(%i) %s : %s + %s %s\n", frameNo, messages[i], name, offset_begin, offset_end); 223 223 } else { // otherwise, print the whole line 224 __cfaabi_ bits_print_nolock( STDERR_FILENO,"(%i) %s\n", frameNo, messages[i] );224 __cfaabi_dbg_bits_print_nolock( "(%i) %s\n", frameNo, messages[i] ); 225 225 } 226 226 } -
libcfa/src/startup.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Tue Jul 24 16:21:57 2018 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Nov 30 07:07:56 201913 // Update Count : 1 312 // Last Modified On : Wed Jul 25 16:42:01 2018 13 // Update Count : 11 14 14 // 15 15 16 16 #include "startup.hfa" 17 #include <time.h> // tzset 17 #include <unistd.h> 18 18 19 19 20 extern "C" { 20 21 static void __cfaabi_appready_startup( void ) __attribute__(( constructor( STARTUP_PRIORITY_APPREADY ) )); 21 22 void __cfaabi_appready_startup( void ) { 22 tzset(); // initialize time global variables23 23 #ifdef __CFA_DEBUG__ 24 24 extern void heapAppStart(); -
libcfa/src/stdlib.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Thu Jan 28 17:10:29 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Nov 20 17:22:47201913 // Update Count : 4 8512 // Last Modified On : Tue Oct 22 08:57:52 2019 13 // Update Count : 478 14 14 // 15 15 … … 30 30 T * alloc_set( T ptr[], size_t dim, char fill ) { // realloc array with fill 31 31 size_t olen = malloc_usable_size( ptr ); // current allocation 32 void * nptr = (void*)realloc( (void *)ptr, dim * sizeof(T) ); // C realloc32 char * nptr = (char *)realloc( (void *)ptr, dim * sizeof(T) ); // C realloc 33 33 size_t nlen = malloc_usable_size( nptr ); // new allocation 34 34 if ( nlen > olen ) { // larger ? 35 memset( (char *)nptr + olen, (int)fill, nlen - olen ); // initialize added storage35 memset( nptr + olen, (int)fill, nlen - olen ); // initialize added storage 36 36 } // if 37 37 return (T *)nptr; 38 38 } // alloc_set 39 39 40 T * alloc_align( T ptr[], size_t align ) { // aligned realloc array 41 char * nptr; 42 size_t alignment = malloc_alignment( ptr ); 43 if ( align != alignment && (uintptr_t)ptr % align != 0 ) { 44 size_t olen = malloc_usable_size( ptr ); // current allocation 45 nptr = (char *)memalign( align, olen ); 46 size_t nlen = malloc_usable_size( nptr ); // new allocation 47 size_t lnth = olen < nlen ? olen : nlen; // min 48 memcpy( nptr, ptr, lnth ); // initialize storage 49 free( ptr ); 50 } else { 51 nptr = (char *)ptr; 52 } // if 53 return (T *)nptr; 54 } // alloc_align 55 56 T * alloc_align( T ptr[], size_t align, size_t dim ) { // aligned realloc array 57 char * nptr; 58 size_t alignment = malloc_alignment( ptr ); 59 if ( align != alignment ) { 60 size_t olen = malloc_usable_size( ptr ); // current allocation 61 nptr = (char *)memalign( align, dim * sizeof(T) ); 62 size_t nlen = malloc_usable_size( nptr ); // new allocation 63 size_t lnth = olen < nlen ? olen : nlen; // min 64 memcpy( nptr, ptr, lnth ); // initialize storage 65 free( ptr ); 66 } else { 67 nptr = (char *)realloc( (void *)ptr, dim * sizeof(T) ); // C realloc 68 } // if 69 return (T *)nptr; 70 } // alloc_align 71 40 72 T * alloc_align_set( T ptr[], size_t align, char fill ) { // aligned realloc with fill 41 73 size_t olen = malloc_usable_size( ptr ); // current allocation 42 void * nptr = (void *)realloc( (void *)ptr, align, sizeof(T) ); // CFA realloc 43 // char * nptr = alloc_align( ptr, align ); 74 char * nptr = alloc_align( ptr, align ); 44 75 size_t nlen = malloc_usable_size( nptr ); // new allocation 45 76 if ( nlen > olen ) { // larger ? 46 memset( (char *)nptr + olen, (int)fill, nlen - olen ); // initialize added storage77 memset( nptr + olen, (int)fill, nlen - olen ); // initialize added storage 47 78 } // if 48 79 return (T *)nptr; -
libcfa/src/stdlib.hfa
r2fa5bd2 raca6a54c 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Nov 29 23:08:02201913 // Update Count : 40012 // Last Modified On : Sun Oct 20 22:57:33 2019 13 // Update Count : 390 14 14 // 15 15 … … 28 28 } // extern "C" 29 29 30 void * realloc( void * oaddr, size_t nalign, size_t size ); // CFA heap31 32 30 //--------------------------------------- 33 31 … … 52 50 } // calloc 53 51 54 T * realloc( T * ptr, size_t size ) { // CFA realloc, eliminate return-type cast 52 T * realloc( T * ptr, size_t size ) { 53 if ( unlikely( ptr == 0 ) ) return malloc(); 55 54 return (T *)(void *)realloc( (void *)ptr, size ); // C realloc 56 55 } // realloc … … 60 59 } // memalign 61 60 62 T * cmemalign( size_t align, size_t dim ) {63 return (T *)cmemalign( align, dim, sizeof(T) ); // CFA cmemalign64 } // cmemalign65 66 61 T * aligned_alloc( size_t align ) { 67 62 return (T *)aligned_alloc( align, sizeof(T) ); // C aligned_alloc … … 84 79 85 80 T * alloc( T ptr[], size_t dim ) { // realloc 86 return (T *)(void *)realloc( (void *)ptr, dim * sizeof(T) ); // C realloc81 return realloc( ptr, dim * sizeof(T) ); 87 82 } // alloc 88 83 … … 123 118 } // alloc_align 124 119 125 T * alloc_align( T ptr[], size_t align ) { // aligned realloc array126 return (T *)(void *)realloc( (void *)ptr, align, sizeof(T) ); // CFA realloc127 } // alloc_align128 129 T * alloc_align( T ptr[], size_t align, size_t dim ) { // aligned realloc array130 return (T *)(void *)realloc( (void *)ptr, align, dim * sizeof(T) ); // CFA realloc131 } // alloc_align132 133 120 T * alloc_align_set( size_t align, char fill ) { 134 121 return (T *)memset( (T *)alloc_align( align ), (int)fill, sizeof(T) ); // initialize with fill value … … 155 142 156 143 forall( dtype T | sized(T) ) { 144 T * alloc_align( T ptr[], size_t align ); // realign 145 T * alloc_align( T ptr[], size_t align, size_t dim ); // aligned realloc array 157 146 T * alloc_align_set( T ptr[], size_t align, size_t dim, char fill ); // aligned realloc array with fill 158 147 } // distribution … … 210 199 211 200 static inline { 212 int ato( const char * sptr ) { return (int)strtol( sptr, 0 p, 10 ); }213 unsigned int ato( const char * sptr ) { return (unsigned int)strtoul( sptr, 0 p, 10 ); }214 long int ato( const char * sptr ) { return strtol( sptr, 0 p, 10 ); }215 unsigned long int ato( const char * sptr ) { return strtoul( sptr, 0 p, 10 ); }216 long long int ato( const char * sptr ) { return strtoll( sptr, 0 p, 10 ); }217 unsigned long long int ato( const char * sptr ) { return strtoull( sptr, 0 p, 10 ); }218 219 float ato( const char * sptr ) { return strtof( sptr, 0 p); }220 double ato( const char * sptr ) { return strtod( sptr, 0 p); }221 long double ato( const char * sptr ) { return strtold( sptr, 0 p); }222 223 float _Complex ato( const char * sptr ) { return strto( sptr, 0p); }224 double _Complex ato( const char * sptr ) { return strto( sptr, 0p); }225 long double _Complex ato( const char * sptr ) { return strto( sptr, 0p); }201 int ato( const char * sptr ) { return (int)strtol( sptr, 0, 10 ); } 202 unsigned int ato( const char * sptr ) { return (unsigned int)strtoul( sptr, 0, 10 ); } 203 long int ato( const char * sptr ) { return strtol( sptr, 0, 10 ); } 204 unsigned long int ato( const char * sptr ) { return strtoul( sptr, 0, 10 ); } 205 long long int ato( const char * sptr ) { return strtoll( sptr, 0, 10 ); } 206 unsigned long long int ato( const char * sptr ) { return strtoull( sptr, 0, 10 ); } 207 208 float ato( const char * sptr ) { return strtof( sptr, 0 ); } 209 double ato( const char * sptr ) { return strtod( sptr, 0 ); } 210 long double ato( const char * sptr ) { return strtold( sptr, 0 ); } 211 212 float _Complex ato( const char * sptr ) { return strto( sptr, NULL ); } 213 double _Complex ato( const char * sptr ) { return strto( sptr, NULL ); } 214 long double _Complex ato( const char * sptr ) { return strto( sptr, NULL ); } 226 215 } // distribution 227 216 -
longrun_tests/Makefile.in
r2fa5bd2 raca6a54c 486 486 LTCFACOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ 487 487 $(LIBTOOLFLAGS) --mode=compile $(CFACC) $(DEFS) \ 488 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(AM_CFLAGS) $(CFAFLAGS) $(CFLAGS) 488 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(CFAFLAGS) \ 489 $(AM_CFLAGS) $(CFLAGS) 489 490 490 491 AM_V_CFA = $(am__v_CFA_@AM_V@) -
src/AST/Convert.cpp
r2fa5bd2 raca6a54c 887 887 auto expr = visitBaseExpr( node, 888 888 new AsmExpr( 889 new std::string(node->inout),889 get<Expression>().accept1(node->inout), 890 890 get<Expression>().accept1(node->constraint), 891 891 get<Expression>().accept1(node->operand) … … 2258 2258 new ast::AsmExpr( 2259 2259 old->location, 2260 old->inout,2260 GET_ACCEPT_1(inout, Expr), 2261 2261 GET_ACCEPT_1(constraint, Expr), 2262 2262 GET_ACCEPT_1(operand, Expr) -
src/AST/Expr.hpp
r2fa5bd2 raca6a54c 556 556 class AsmExpr final : public Expr { 557 557 public: 558 std::stringinout;558 ptr<Expr> inout; 559 559 ptr<Expr> constraint; 560 560 ptr<Expr> operand; 561 561 562 AsmExpr( const CodeLocation & loc, const std::string &io, const Expr * con, const Expr * op )562 AsmExpr( const CodeLocation & loc, const Expr * io, const Expr * con, const Expr * op ) 563 563 : Expr( loc ), inout( io ), constraint( con ), operand( op ) {} 564 564 -
src/AST/Pass.impl.hpp
r2fa5bd2 raca6a54c 1300 1300 maybe_accept( node, &AsmExpr::result ); 1301 1301 } 1302 maybe_accept( node, &AsmExpr::inout ); 1302 1303 maybe_accept( node, &AsmExpr::constraint ); 1303 1304 maybe_accept( node, &AsmExpr::operand ); -
src/AST/Print.cpp
r2fa5bd2 raca6a54c 1011 1011 os << "Asm Expression:" << endl; 1012 1012 ++indent; 1013 if ( !node->inout.empty() ) os << "[" << node->inout << "] ";1013 if ( node->inout ) node->inout->accept( *this ); 1014 1014 if ( node->constraint ) node->constraint->accept( *this ); 1015 1015 if ( node->operand ) node->operand->accept( *this ); -
src/CodeGen/CodeGenerator.cc
r2fa5bd2 raca6a54c 786 786 787 787 void CodeGenerator::postvisit( AsmExpr * asmExpr ) { 788 if ( !asmExpr->inout.empty() ) {788 if ( asmExpr->get_inout() ) { 789 789 output << "[ "; 790 output << asmExpr->inout;790 asmExpr->get_inout()->accept( *visitor ); 791 791 output << " ] "; 792 792 } // if 793 asmExpr-> constraint->accept( *visitor );793 asmExpr->get_constraint()->accept( *visitor ); 794 794 output << " ( "; 795 asmExpr-> operand->accept( *visitor );795 asmExpr->get_operand()->accept( *visitor ); 796 796 output << " )"; 797 797 } -
src/Common/PassVisitor.impl.h
r2fa5bd2 raca6a54c 2452 2452 2453 2453 indexerScopedAccept( node->result , *this ); 2454 maybeAccept_impl ( node->inout , *this ); 2454 2455 maybeAccept_impl ( node->constraint, *this ); 2455 2456 maybeAccept_impl ( node->operand , *this ); … … 2463 2464 2464 2465 indexerScopedAccept( node->result , *this ); 2466 maybeAccept_impl ( node->inout , *this ); 2465 2467 maybeAccept_impl ( node->constraint, *this ); 2466 2468 maybeAccept_impl ( node->operand , *this ); … … 2475 2477 indexerScopedMutate( node->env , *this ); 2476 2478 indexerScopedMutate( node->result , *this ); 2479 maybeMutate_impl ( node->inout , *this ); 2477 2480 maybeMutate_impl ( node->constraint, *this ); 2478 2481 maybeMutate_impl ( node->operand , *this ); -
src/Common/SemanticError.cc
r2fa5bd2 raca6a54c 149 149 // Helpers 150 150 namespace ErrorHelpers { 151 Colors colors = Colors::Auto;152 153 static inline bool with_colors() {154 return colors == Colors::Auto ? isatty( STDERR_FILENO ) : bool(colors);155 }156 157 151 const std::string & error_str() { 158 static std::string str = with_colors() ? "\e[31merror:\e[39m " : "error: ";152 static std::string str = isatty( STDERR_FILENO ) ? "\e[31merror:\e[39m " : "error: "; 159 153 return str; 160 154 } 161 155 162 156 const std::string & warning_str() { 163 static std::string str = with_colors() ? "\e[95mwarning:\e[39m " : "warning: ";157 static std::string str = isatty( STDERR_FILENO ) ? "\e[95mwarning:\e[39m " : "warning: "; 164 158 return str; 165 159 } 166 160 167 161 const std::string & bold_ttycode() { 168 static std::string str = with_colors() ? "\e[1m" : "";162 static std::string str = isatty( STDERR_FILENO ) ? "\e[1m" : ""; 169 163 return str; 170 164 } 171 165 172 166 const std::string & reset_font_ttycode() { 173 static std::string str = with_colors() ? "\e[0m" : "";167 static std::string str = isatty( STDERR_FILENO ) ? "\e[0m" : ""; 174 168 return str; 175 169 } -
src/Common/SemanticError.h
r2fa5bd2 raca6a54c 97 97 // Helpers 98 98 namespace ErrorHelpers { 99 enum class Colors {100 Never = false,101 Always = true,102 Auto,103 };104 105 extern Colors colors;106 107 99 const std::string & error_str(); 108 100 const std::string & warning_str(); -
src/Concurrency/Keywords.cc
r2fa5bd2 raca6a54c 59 59 60 60 Declaration * postmutate( StructDecl * decl ); 61 DeclarationWithType * postmutate( FunctionDecl * decl );62 61 63 62 void handle( StructDecl * ); … … 78 77 KeywordCastExpr::Target cast_target; 79 78 80 StructDecl * type_decl = nullptr; 81 FunctionDecl * dtor_decl = nullptr; 79 StructDecl* type_decl = nullptr; 82 80 }; 83 81 … … 99 97 "__thrd", 100 98 "get_thread", 101 "thread keyword requires threads to be in scope, add #include <thread.hfa> \n",99 "thread keyword requires threads to be in scope, add #include <thread.hfa>", 102 100 true, 103 101 KeywordCastExpr::Thread … … 131 129 "__cor", 132 130 "get_coroutine", 133 "coroutine keyword requires coroutines to be in scope, add #include <coroutine.hfa> \n",131 "coroutine keyword requires coroutines to be in scope, add #include <coroutine.hfa>", 134 132 true, 135 133 KeywordCastExpr::Coroutine … … 163 161 "__mon", 164 162 "get_monitor", 165 "monitor keyword requires monitors to be in scope, add #include <monitor.hfa> \n",163 "monitor keyword requires monitors to be in scope, add #include <monitor.hfa>", 166 164 false, 167 165 KeywordCastExpr::Monitor … … 286 284 } 287 285 288 DeclarationWithType * ConcurrentSueKeyword::postmutate( FunctionDecl * decl ) {289 if( !type_decl ) return decl;290 if( !CodeGen::isDestructor( decl->name ) ) return decl;291 292 auto params = decl->type->parameters;293 if( params.size() != 1 ) return decl;294 295 auto type = dynamic_cast<ReferenceType*>( params.front()->get_type() );296 if( !type ) return decl;297 298 auto stype = dynamic_cast<StructInstType*>( type->base );299 if( !stype ) return decl;300 if( stype->baseStruct != type_decl ) return decl;301 302 if( !dtor_decl ) dtor_decl = decl;303 return decl;304 }305 306 286 Expression * ConcurrentSueKeyword::postmutate( KeywordCastExpr * cast ) { 307 287 if ( cast_target == cast->target ) { 308 288 // convert (thread &)t to (thread_desc &)*get_thread(t), etc. 309 289 if( !type_decl ) SemanticError( cast, context_error ); 310 if( !dtor_decl ) SemanticError( cast, context_error ); 311 assert( cast->result == nullptr ); 312 cast->set_result( new ReferenceType( noQualifiers, new StructInstType( noQualifiers, type_decl ) ) ); 313 cast->concrete_target.field = field_name; 314 cast->concrete_target.getter = getter_name; 290 Expression * arg = cast->arg; 291 cast->arg = nullptr; 292 delete cast; 293 return new CastExpr( 294 UntypedExpr::createDeref( 295 new UntypedExpr( new NameExpr( getter_name ), { arg } ) 296 ), 297 new ReferenceType( 298 noQualifiers, 299 new StructInstType( noQualifiers, type_decl ) ) 300 ); 315 301 } 316 302 return cast; … … 322 308 323 309 if( !type_decl ) SemanticError( decl, context_error ); 324 if( !dtor_decl ) SemanticError( decl, context_error );325 310 326 311 FunctionDecl * func = forwardDeclare( decl ); -
src/ControlStruct/MLEMutator.cc
r2fa5bd2 raca6a54c 231 231 232 232 Statement *MLEMutator::mutateLoop( Statement *bodyLoop, Entry &e ) { 233 // ensure loop body is a block 234 CompoundStmt *newBody; 235 if ( ! (newBody = dynamic_cast<CompoundStmt *>( bodyLoop )) ) { 236 newBody = new CompoundStmt(); 237 newBody->get_kids().push_back( bodyLoop ); 238 } // if 239 233 240 // only generate these when needed 234 if( !e.isContUsed() && !e.isBreakUsed() ) return bodyLoop;235 236 // ensure loop body is a block237 CompoundStmt * newBody = new CompoundStmt();238 newBody->get_kids().push_back( bodyLoop );239 241 240 242 if ( e.isContUsed() ) { -
src/GenPoly/Lvalue.cc
r2fa5bd2 raca6a54c 60 60 } 61 61 62 struct ReferenceConversions final : public WithStmtsToAdd , public WithGuards{62 struct ReferenceConversions final : public WithStmtsToAdd { 63 63 Expression * postmutate( CastExpr * castExpr ); 64 64 Expression * postmutate( AddressExpr * addrExpr ); … … 71 71 72 72 struct FixIntrinsicResult final : public WithGuards { 73 enum {74 NoSkip,75 Skip,76 SkipInProgress77 } skip = NoSkip;78 79 void premutate( AsmExpr * ) { GuardValue( skip ); skip = Skip; }80 void premutate( ApplicationExpr * ) { GuardValue( skip ); skip = (skip == Skip) ? SkipInProgress : NoSkip; }81 82 83 73 Expression * postmutate( ApplicationExpr * appExpr ); 84 74 void premutate( FunctionDecl * funcDecl ); … … 172 162 173 163 Expression * FixIntrinsicResult::postmutate( ApplicationExpr * appExpr ) { 174 if ( skip != SkipInProgress &&isIntrinsicReference( appExpr ) ) {164 if ( isIntrinsicReference( appExpr ) ) { 175 165 // eliminate reference types from intrinsic applications - now they return lvalues 176 166 ReferenceType * result = strict_dynamic_cast< ReferenceType * >( appExpr->result ); -
src/Parser/parser.yy
r2fa5bd2 raca6a54c 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : S at Dec 7 10:43:44201913 // Update Count : 43 9412 // Last Modified On : Sun Aug 4 21:48:23 2019 13 // Update Count : 4364 14 14 // 15 15 … … 211 211 } // forCtrl 212 212 213 KeywordCastExpr::Target Aggregate2Target( DeclarationNode::Aggregate aggr ) {214 KeywordCastExpr::Target target;215 switch ( aggr ) {216 case DeclarationNode::Coroutine: target = KeywordCastExpr::Coroutine; break;217 case DeclarationNode::Monitor: target = KeywordCastExpr::Monitor; break;218 case DeclarationNode::Thread: target = KeywordCastExpr::Thread; break;219 default: abort();220 } // switch221 return target;222 } // Aggregate2Target223 224 213 225 214 bool forall = false, yyy = false; // aggregate have one or more forall qualifiers ? … … 376 365 %type<decl> abstract_parameter_declaration 377 366 378 %type<aggKey> aggregate_key aggregate_data aggregate_control367 %type<aggKey> aggregate_key 379 368 %type<decl> aggregate_type aggregate_type_nobody 380 369 … … 661 650 | postfix_expression '.' '[' field_name_list ']' // CFA, tuple field selector 662 651 { $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $4 ) ) ); } 663 | postfix_expression '.' aggregate_control664 { $$ = new ExpressionNode( build_keyword_cast( Aggregate2Target( $3 ), $1 ) ); }665 652 | postfix_expression ARROW identifier 666 653 { $$ = new ExpressionNode( build_pfieldSel( $1, build_varref( $3 ) ) ); } … … 806 793 | '(' type_no_function ')' cast_expression 807 794 { $$ = new ExpressionNode( build_cast( $2, $4 ) ); } 808 | '(' aggregate_control '&' ')' cast_expression // CFA 809 { $$ = new ExpressionNode( build_keyword_cast( Aggregate2Target( $2 ), $5 ) ); } 795 // keyword cast cannot be grouped because of reduction in aggregate_key 796 | '(' GENERATOR '&' ')' cast_expression // CFA 797 { $$ = new ExpressionNode( build_keyword_cast( KeywordCastExpr::Coroutine, $5 ) ); } 798 | '(' COROUTINE '&' ')' cast_expression // CFA 799 { $$ = new ExpressionNode( build_keyword_cast( KeywordCastExpr::Coroutine, $5 ) ); } 800 | '(' THREAD '&' ')' cast_expression // CFA 801 { $$ = new ExpressionNode( build_keyword_cast( KeywordCastExpr::Thread, $5 ) ); } 802 | '(' MONITOR '&' ')' cast_expression // CFA 803 { $$ = new ExpressionNode( build_keyword_cast( KeywordCastExpr::Monitor, $5 ) ); } 810 804 // VIRTUAL cannot be opt because of look ahead issues 811 805 | '(' VIRTUAL ')' cast_expression // CFA … … 1429 1423 asm_operand: // GCC 1430 1424 string_literal '(' constant_expression ')' 1431 { $$ = new ExpressionNode( new AsmExpr( nullptr, $1, maybeMoveBuild< Expression >( $3 ) ) ); }1432 | '[' IDENTIFIER']' string_literal '(' constant_expression ')'1433 { $$ = new ExpressionNode( new AsmExpr( $2, $4, maybeMoveBuild< Expression >( $6 ) ) ); }1425 { $$ = new ExpressionNode( new AsmExpr( maybeMoveBuild< Expression >( (ExpressionNode *)nullptr ), $1, maybeMoveBuild< Expression >( $3 ) ) ); } 1426 | '[' constant_expression ']' string_literal '(' constant_expression ')' 1427 { $$ = new ExpressionNode( new AsmExpr( maybeMoveBuild< Expression >( $2 ), $4, maybeMoveBuild< Expression >( $6 ) ) ); } 1434 1428 ; 1435 1429 … … 2065 2059 2066 2060 aggregate_key: 2067 aggregate_data2068 | aggregate_control2069 ;2070 2071 aggregate_data:2072 2061 STRUCT 2073 2062 { yyy = true; $$ = DeclarationNode::Struct; } 2074 2063 | UNION 2075 2064 { yyy = true; $$ = DeclarationNode::Union; } 2076 | EXCEPTION // CFA2065 | EXCEPTION 2077 2066 { yyy = true; $$ = DeclarationNode::Exception; } 2078 ; 2079 2080 aggregate_control: // CFA 2081 GENERATOR 2067 | GENERATOR 2082 2068 { yyy = true; $$ = DeclarationNode::Coroutine; } 2083 2069 | COROUTINE … … 2110 2096 distInl( $3 ); 2111 2097 } 2112 | INLINE aggregate_control ';' // CFA2113 { SemanticError( yylloc, "INLINE aggregate control currently unimplemented." ); $$ = nullptr; }2114 2098 | typedef_declaration ';' // CFA 2115 2099 | cfa_field_declaring_list ';' // CFA, new style field declaration -
src/ResolvExpr/AlternativeFinder.cc
r2fa5bd2 raca6a54c 69 69 void postvisit( CastExpr * castExpr ); 70 70 void postvisit( VirtualCastExpr * castExpr ); 71 void postvisit( KeywordCastExpr * castExpr );72 71 void postvisit( UntypedMemberExpr * memberExpr ); 73 72 void postvisit( MemberExpr * memberExpr ); … … 1256 1255 } 1257 1256 1258 void AlternativeFinder::Finder::postvisit( KeywordCastExpr * castExpr ) {1259 assertf( castExpr->get_result(), "Cast target should have been set in Validate." );1260 auto ref = dynamic_cast<ReferenceType*>(castExpr->get_result());1261 assert(ref);1262 auto inst = dynamic_cast<StructInstType*>(ref->base);1263 assert(inst);1264 auto target = inst->baseStruct;1265 1266 AlternativeFinder finder( indexer, env );1267 1268 auto pick_alternatives = [target, this](AltList & found, bool expect_ref) {1269 for(auto & alt : found) {1270 Type * expr = alt.expr->get_result();1271 if(expect_ref) {1272 auto res = dynamic_cast<ReferenceType*>(expr);1273 if(!res) { continue; }1274 expr = res->base;1275 }1276 1277 if(auto insttype = dynamic_cast<TypeInstType*>(expr)) {1278 auto td = alt.env.lookup(insttype->name);1279 if(!td) { continue; }1280 expr = td->type;1281 }1282 1283 if(auto base = dynamic_cast<StructInstType*>(expr)) {1284 if(base->baseStruct == target) {1285 alternatives.push_back(1286 std::move(alt)1287 );1288 }1289 }1290 }1291 };1292 1293 try {1294 // Attempt 1 : turn (thread&)X into (thread_desc&)X.__thrd1295 // Clone is purely for memory management1296 std::unique_ptr<Expression> tech1 { new UntypedMemberExpr(new NameExpr(castExpr->concrete_target.field), castExpr->arg->clone()) };1297 1298 // don't prune here, since it's guaranteed all alternatives will have the same type1299 finder.findWithoutPrune( tech1.get() );1300 pick_alternatives(finder.alternatives, false);1301 1302 return;1303 } catch(SemanticErrorException & ) {}1304 1305 // Fallback : turn (thread&)X into (thread_desc&)get_thread(X)1306 std::unique_ptr<Expression> fallback { UntypedExpr::createDeref( new UntypedExpr(new NameExpr(castExpr->concrete_target.getter), { castExpr->arg->clone() })) };1307 // don't prune here, since it's guaranteed all alternatives will have the same type1308 finder.findWithoutPrune( fallback.get() );1309 1310 pick_alternatives(finder.alternatives, true);1311 1312 // Whatever happens here, we have no more fallbacks1313 }1314 1315 1257 namespace { 1316 1258 /// Gets name from untyped member expression (member must be NameExpr) -
src/ResolvExpr/Resolver.cc
r2fa5bd2 raca6a54c 485 485 visit_children = false; 486 486 findVoidExpression( asmExpr->operand, indexer ); 487 if ( asmExpr->get_inout() ) { 488 findVoidExpression( asmExpr->inout, indexer ); 489 } // if 487 490 } 488 491 … … 1362 1365 asmExpr = ast::mutate_field( 1363 1366 asmExpr, &ast::AsmExpr::operand, findVoidExpression( asmExpr->operand, symtab ) ); 1367 1368 if ( asmExpr->inout ) { 1369 asmExpr = ast::mutate_field( 1370 asmExpr, &ast::AsmExpr::inout, findVoidExpression( asmExpr->inout, symtab ) ); 1371 } 1364 1372 1365 1373 return asmExpr; -
src/SynTree/Expression.cc
r2fa5bd2 raca6a54c 527 527 } 528 528 529 AsmExpr::AsmExpr( const AsmExpr & other ) : Expression( other ), inout( other.inout), constraint( maybeClone( other.constraint ) ), operand( maybeClone( other.operand ) ) {}529 AsmExpr::AsmExpr( const AsmExpr & other ) : Expression( other ), inout( maybeClone( other.inout ) ), constraint( maybeClone( other.constraint ) ), operand( maybeClone( other.operand ) ) {} 530 530 531 531 532 532 void AsmExpr::print( std::ostream & os, Indenter indent ) const { 533 533 os << "Asm Expression: " << std::endl; 534 if ( !inout.empty() ) os << "[" << inout << "] ";534 if ( inout ) inout->print( os, indent+1 ); 535 535 if ( constraint ) constraint->print( os, indent+1 ); 536 536 if ( operand ) operand->print( os, indent+1 ); -
src/SynTree/Expression.h
r2fa5bd2 raca6a54c 231 231 enum Target { 232 232 Coroutine, Thread, Monitor, NUMBER_OF_TARGETS 233 }; 234 struct Concrete { 235 std::string field; 236 std::string getter; 237 }; 238 Target target; 239 Concrete concrete_target; 233 } target; 240 234 241 235 KeywordCastExpr( Expression * arg, Target target ); … … 581 575 class AsmExpr : public Expression { 582 576 public: 583 std::stringinout;577 Expression * inout; 584 578 Expression * constraint; 585 579 Expression * operand; 586 580 587 AsmExpr( const std::string * _inout, Expression * constraint, Expression * operand ) : inout( _inout ? *_inout : "" ), constraint( constraint ), operand( operand ) { delete _inout;}581 AsmExpr( Expression * inout, Expression * constraint, Expression * operand ) : inout( inout ), constraint( constraint ), operand( operand ) {} 588 582 AsmExpr( const AsmExpr & other ); 589 virtual ~AsmExpr() { delete constraint; delete operand; }; 583 virtual ~AsmExpr() { delete inout; delete constraint; delete operand; }; 584 585 Expression * get_inout() const { return inout; } 586 void set_inout( Expression * newValue ) { inout = newValue; } 587 588 Expression * get_constraint() const { return constraint; } 589 void set_constraint( Expression * newValue ) { constraint = newValue; } 590 591 Expression * get_operand() const { return operand; } 592 void set_operand( Expression * newValue ) { operand = newValue; } 590 593 591 594 virtual AsmExpr * clone() const override { return new AsmExpr( * this ); } -
src/cfa.make
r2fa5bd2 raca6a54c 4 4 LTCFACOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ 5 5 $(LIBTOOLFLAGS) --mode=compile $(CFACC) $(DEFS) \ 6 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(AM_CFLAGS) $(CFAFLAGS) $(CFLAGS) 6 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(CFAFLAGS) \ 7 $(AM_CFLAGS) $(CFLAGS) 7 8 8 9 AM_V_CFA = $(am__v_CFA_@AM_V@) -
src/main.cc
r2fa5bd2 raca6a54c 407 407 408 408 409 static const char optstring[] = ": c:ghlLmNnpP:S:twW:D:";409 static const char optstring[] = ":hlLmNnpP:S:twW:D:"; 410 410 411 411 enum { PreludeDir = 128 }; 412 412 static struct option long_opts[] = { 413 { "colors", required_argument, nullptr, 'c' },414 { "gdb", no_argument, nullptr, 'g' },415 413 { "help", no_argument, nullptr, 'h' }, 416 414 { "libcfa", no_argument, nullptr, 'l' }, … … 424 422 { "statistics", required_argument, nullptr, 'S' }, 425 423 { "tree", no_argument, nullptr, 't' }, 424 { "gdb", no_argument, nullptr, 'g' }, 426 425 { "", no_argument, nullptr, 0 }, // -w 427 426 { "", no_argument, nullptr, 0 }, // -W … … 431 430 432 431 static const char * description[] = { 433 "diagnostic color: never, always, or auto.", // -c 434 "wait for gdb to attach", // -g 435 "print help message", // -h 436 "generate libcfa.c", // -l 437 "generate line marks", // -L 438 "do not replace main", // -m 439 "do not generate line marks", // -N 440 "do not read prelude", // -n 432 "print help message", // -h 433 "generate libcfa.c", // -l 434 "generate line marks", // -L 435 "do not replace main", // -m 436 "do not generate line marks", // -N 437 "do not read prelude", // -n 441 438 "generate prototypes for prelude functions", // -p 442 "print", // -P439 "print", // -P 443 440 "<directory> prelude directory for debug/nodebug", // no flag 444 441 "<option-list> enable profiling information:\n counters,heap,time,all,none", // -S 445 "building cfa standard lib", // -t 446 "", // -w 447 "", // -W 448 "", // -D 442 "building cfa standard lib", // -t 443 "wait for gdb to attach", // -g 444 "", // -w 445 "", // -W 446 "", // -D 449 447 }; // description 450 448 … … 514 512 while ( (c = getopt_long( argc, argv, optstring, long_opts, nullptr )) != -1 ) { 515 513 switch ( c ) { 516 case 'c': // diagnostic colors517 if ( strcmp( optarg, "always" ) == 0 ) {518 ErrorHelpers::colors = ErrorHelpers::Colors::Always;519 } else if ( strcmp( optarg, "never" ) == 0 ) {520 ErrorHelpers::colors = ErrorHelpers::Colors::Never;521 } else if ( strcmp( optarg, "auto" ) == 0 ) {522 ErrorHelpers::colors = ErrorHelpers::Colors::Auto;523 } // if524 break;525 514 case 'h': // help message 526 515 usage( argv ); // no return -
tests/.expect/alloc.txt
r2fa5bd2 raca6a54c 30 30 CFA resize array alloc 31 31 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 32 CFA resize array alloc 32 CFA resize array alloc, fill 33 33 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 34 CFA resize array alloc 34 CFA resize array alloc, fill 35 35 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 36 36 CFA resize array alloc, fill 37 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x dededede 0xdededede 0xdededede 0xdededede0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede37 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 38 38 39 39 C memalign 42 42.5 -
tests/.expect/gccExtensions.x64.txt
r2fa5bd2 raca6a54c 12 12 asm volatile ( "mov %1, %0\n\t" "add $1, %0" : "=" "r" ( _X3dsti_2 ) : : ); 13 13 asm volatile ( "mov %1, %0\n\t" "add $1, %0" : "=r" ( _X3dsti_2 ) : "r" ( _X3srci_2 ) : ); 14 asm ( "mov %1, %0\n\t" "add $1, %0" : "=r" ( _X3dsti_2 ), "=r" ( _X3srci_2 ) : [ src] "r" ( _X3dsti_2 ) : "r0" );14 asm ( "mov %1, %0\n\t" "add $1, %0" : "=r" ( _X3dsti_2 ), "=r" ( _X3srci_2 ) : [ _X3srci_2 ] "r" ( _X3dsti_2 ) : "r0" ); 15 15 L2: L1: asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5" : : "r" ( _X3srci_2 ), "r" ( (&_X3dsti_2) ) : "r5", "memory" : L1, L2 ); 16 16 double _Complex _X2c1Cd_2; -
tests/.expect/gccExtensions.x86.txt
r2fa5bd2 raca6a54c 12 12 asm volatile ( "mov %1, %0\n\t" "add $1, %0" : "=" "r" ( _X3dsti_2 ) : : ); 13 13 asm volatile ( "mov %1, %0\n\t" "add $1, %0" : "=r" ( _X3dsti_2 ) : "r" ( _X3srci_2 ) : ); 14 asm ( "mov %1, %0\n\t" "add $1, %0" : "=r" ( _X3dsti_2 ), "=r" ( _X3srci_2 ) : [ src] "r" ( _X3dsti_2 ) : "r0" );14 asm ( "mov %1, %0\n\t" "add $1, %0" : "=r" ( _X3dsti_2 ), "=r" ( _X3srci_2 ) : [ _X3srci_2 ] "r" ( _X3dsti_2 ) : "r0" ); 15 15 L2: L1: asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5" : : "r" ( _X3srci_2 ), "r" ( (&_X3dsti_2) ) : "r5", "memory" : L1, L2 ); 16 16 double _Complex _X2c1Cd_2; -
tests/.expect/references.txt
r2fa5bd2 raca6a54c 36 36 3 37 37 3 9 { 1., 7. }, [1, 2, 3] 38 439 38 Destructing a Y 40 39 Destructing a Y -
tests/Makefile.am
r2fa5bd2 raca6a54c 46 46 47 47 # adjust CC to current flags 48 CC = $(if $(DISTCC_CFA_PATH),distcc $(DISTCC_CFA_PATH) ${ARCH_FLAGS},$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS})48 CC = $(if $(DISTCC_CFA_PATH),distcc $(DISTCC_CFA_PATH),$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS}) 49 49 CFACC = $(CC) 50 50 … … 53 53 54 54 # adjusted CC but without the actual distcc call 55 CFACCLOCAL = $(if $(DISTCC_CFA_PATH),$(DISTCC_CFA_PATH) ${ARCH_FLAGS},$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS})55 CFACCLOCAL = $(if $(DISTCC_CFA_PATH),$(DISTCC_CFA_PATH),$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS}) 56 56 57 57 PRETTY_PATH=mkdir -p $(dir $(abspath ${@})) && cd ${srcdir} && -
tests/Makefile.in
r2fa5bd2 raca6a54c 214 214 215 215 # adjust CC to current flags 216 CC = $(if $(DISTCC_CFA_PATH),distcc $(DISTCC_CFA_PATH) ${ARCH_FLAGS},$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS})216 CC = $(if $(DISTCC_CFA_PATH),distcc $(DISTCC_CFA_PATH),$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS}) 217 217 CCAS = @CCAS@ 218 218 CCASDEPMODE = @CCASDEPMODE@ … … 358 358 LTCFACOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ 359 359 $(LIBTOOLFLAGS) --mode=compile $(CFACC) $(DEFS) \ 360 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(AM_CFLAGS) $(CFAFLAGS) $(CFLAGS) 360 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(CFAFLAGS) \ 361 $(AM_CFLAGS) $(CFLAGS) 361 362 362 363 AM_V_CFA = $(am__v_CFA_@AM_V@) … … 404 405 405 406 # adjusted CC but without the actual distcc call 406 CFACCLOCAL = $(if $(DISTCC_CFA_PATH),$(DISTCC_CFA_PATH) ${ARCH_FLAGS},$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS})407 CFACCLOCAL = $(if $(DISTCC_CFA_PATH),$(DISTCC_CFA_PATH),$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS}) 407 408 PRETTY_PATH = mkdir -p $(dir $(abspath ${@})) && cd ${srcdir} && 408 409 avl_test_SOURCES = avltree/avl_test.cfa avltree/avl0.cfa avltree/avl1.cfa avltree/avl2.cfa avltree/avl3.cfa avltree/avl4.cfa avltree/avl-private.cfa -
tests/alloc.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Wed Feb 3 07:56:22 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Nov 22 15:34:19201913 // Update Count : 40412 // Last Modified On : Sun Oct 20 21:45:21 2019 13 // Update Count : 391 14 14 // 15 15 … … 126 126 127 127 p = alloc( p, 2 * dim ); // CFA resize array alloc 128 for ( i; dim ~ 2 * dim ) { p[i] = 0x1010101; } // fill upper part128 for ( i; dim ~ 2 * dim ) { p[i] = 0x1010101; } 129 129 printf( "CFA resize array alloc\n" ); 130 130 for ( i; 2 * dim ) { printf( "%#x ", p[i] ); } … … 139 139 140 140 p = alloc_set( p, 3 * dim, fill ); // CFA resize array alloc, fill 141 printf( "CFA resize array alloc \n" );141 printf( "CFA resize array alloc, fill\n" ); 142 142 for ( i; 3 * dim ) { printf( "%#x ", p[i] ); } 143 143 printf( "\n" ); … … 145 145 146 146 p = alloc_set( p, dim, fill ); // CFA resize array alloc, fill 147 printf( "CFA resize array alloc \n" );147 printf( "CFA resize array alloc, fill\n" ); 148 148 for ( i; dim ) { printf( "%#x ", p[i] ); } 149 149 printf( "\n" ); -
tests/builtins/sync.cfa
r2fa5bd2 raca6a54c 4 4 void foo() { 5 5 volatile _Bool * vpB = 0; _Bool vB = 0; 6 volatile char * vpc = 0; char * rpc = 0; char vc = 0; 7 volatile short * vps = 0; short * rps = 0; short vs = 0; 8 volatile int * vpi = 0; int * rpi = 0; int vi = 0; 9 volatile long int * vpl = 0; long int * rpl = 0; long int vl = 0; 10 volatile long long int * vpll = 0; long long int * rpll = 0; long long int vll = 0; 11 #if defined(__SIZEOF_INT128__) 12 volatile __int128 * vplll = 0; __int128 * rplll = 0; __int128 vlll = 0; 6 volatile char * vp1 = 0; char * rp1 = 0; char v1 = 0; 7 volatile short * vp2 = 0; short * rp2 = 0; short v2 = 0; 8 volatile int * vp4 = 0; int * rp4 = 0; int v4 = 0; 9 volatile long long int * vp8 = 0; long long int * rp8 = 0; long long int v8 = 0; 10 #if defined(__SIZEOF_INT128__) 11 volatile __int128 * vp16 = 0; __int128 * rp16 = 0; __int128 v16 = 0; 13 12 #endif 14 13 struct type * volatile * vpp = 0; struct type ** rpp = 0; struct type * vp = 0; 15 14 16 { char ret; ret = __sync_fetch_and_add(vpc, vc); } 17 { short ret; ret = __sync_fetch_and_add(vps, vs); } 18 { int ret; ret = __sync_fetch_and_add(vpi, vi); } 19 { long int ret; ret = __sync_fetch_and_add(vpl, vl); } 20 { long long int ret; ret = __sync_fetch_and_add(vpll, vll); } 21 #if defined(__SIZEOF_INT128__) 22 { __int128 ret; ret = __sync_fetch_and_add(vplll, vlll); } 23 #endif 24 25 { char ret; ret = __sync_fetch_and_sub(vpc, vc); } 26 { short ret; ret = __sync_fetch_and_sub(vps, vs); } 27 { int ret; ret = __sync_fetch_and_sub(vpi, vi); } 28 { long int ret; ret = __sync_fetch_and_sub(vpl, vl); } 29 { long long int ret; ret = __sync_fetch_and_sub(vpll, vll); } 30 #if defined(__SIZEOF_INT128__) 31 { __int128 ret; ret = __sync_fetch_and_sub(vplll, vlll); } 32 #endif 33 34 { char ret; ret = __sync_fetch_and_or(vpc, vc); } 35 { short ret; ret = __sync_fetch_and_or(vps, vs); } 36 { int ret; ret = __sync_fetch_and_or(vpi, vi); } 37 { long int ret; ret = __sync_fetch_and_or(vpl, vl); } 38 { long long int ret; ret = __sync_fetch_and_or(vpll, vll); } 39 #if defined(__SIZEOF_INT128__) 40 { __int128 ret; ret = __sync_fetch_and_or(vplll, vlll); } 41 #endif 42 43 { char ret; ret = __sync_fetch_and_and(vpc, vc); } 44 { short ret; ret = __sync_fetch_and_and(vps, vs); } 45 { int ret; ret = __sync_fetch_and_and(vpi, vi); } 46 { long int ret; ret = __sync_fetch_and_and(vpl, vl); } 47 { long long int ret; ret = __sync_fetch_and_and(vpll, vll); } 48 #if defined(__SIZEOF_INT128__) 49 { __int128 ret; ret = __sync_fetch_and_and(vplll, vlll); } 50 #endif 51 52 { char ret; ret = __sync_fetch_and_xor(vpc, vc); } 53 { short ret; ret = __sync_fetch_and_xor(vps, vs); } 54 { int ret; ret = __sync_fetch_and_xor(vpi, vi); } 55 { long int ret; ret = __sync_fetch_and_xor(vpl, vl); } 56 { long long int ret; ret = __sync_fetch_and_xor(vpll, vll); } 57 #if defined(__SIZEOF_INT128__) 58 { __int128 ret; ret = __sync_fetch_and_xor(vplll, vlll); } 59 #endif 60 61 { char ret; ret = __sync_fetch_and_nand(vpc, vc); } 62 { short ret; ret = __sync_fetch_and_nand(vps, vs); } 63 { int ret; ret = __sync_fetch_and_nand(vpi, vi); } 64 { long int ret; ret = __sync_fetch_and_nand(vpl, vl); } 65 { long long int ret; ret = __sync_fetch_and_nand(vpll, vll); } 66 #if defined(__SIZEOF_INT128__) 67 { __int128 ret; ret = __sync_fetch_and_nand(vplll, vlll); } 68 { __int128 ret; ret = __sync_fetch_and_nand_16(vplll, vlll); } 69 #endif 70 71 { char ret; ret = __sync_add_and_fetch(vpc, vc); } 72 { short ret; ret = __sync_add_and_fetch(vps, vs); } 73 { int ret; ret = __sync_add_and_fetch(vpi, vi); } 74 { long int ret; ret = __sync_add_and_fetch(vpl, vl); } 75 { long long int ret; ret = __sync_add_and_fetch(vpll, vll); } 76 #if defined(__SIZEOF_INT128__) 77 { __int128 ret; ret = __sync_add_and_fetch(vplll, vlll); } 78 #endif 79 80 { char ret; ret = __sync_sub_and_fetch(vpc, vc); } 81 { short ret; ret = __sync_sub_and_fetch(vps, vs); } 82 { int ret; ret = __sync_sub_and_fetch(vpi, vi); } 83 { long int ret; ret = __sync_sub_and_fetch(vpl, vl); } 84 { long long int ret; ret = __sync_sub_and_fetch(vpll, vll); } 85 #if defined(__SIZEOF_INT128__) 86 { __int128 ret; ret = __sync_sub_and_fetch(vplll, vlll); } 87 #endif 88 89 { char ret; ret = __sync_or_and_fetch(vpc, vc); } 90 { short ret; ret = __sync_or_and_fetch(vps, vs); } 91 { int ret; ret = __sync_or_and_fetch(vpi, vi); } 92 { long int ret; ret = __sync_or_and_fetch(vpl, vl); } 93 { long long int ret; ret = __sync_or_and_fetch(vpll, vll); } 94 #if defined(__SIZEOF_INT128__) 95 { __int128 ret; ret = __sync_or_and_fetch(vplll, vlll); } 96 #endif 97 98 { char ret; ret = __sync_and_and_fetch(vpc, vc); } 99 { short ret; ret = __sync_and_and_fetch(vps, vs); } 100 { int ret; ret = __sync_and_and_fetch(vpi, vi); } 101 { long int ret; ret = __sync_and_and_fetch(vpl, vl); } 102 { long long int ret; ret = __sync_and_and_fetch(vpll, vll); } 103 #if defined(__SIZEOF_INT128__) 104 { __int128 ret; ret = __sync_and_and_fetch(vplll, vlll); } 105 #endif 106 107 { char ret; ret = __sync_xor_and_fetch(vpc, vc); } 108 { short ret; ret = __sync_xor_and_fetch(vps, vs); } 109 { int ret; ret = __sync_xor_and_fetch(vpi, vi); } 110 { long int ret; ret = __sync_xor_and_fetch(vpl, vl); } 111 { long long int ret; ret = __sync_xor_and_fetch(vpll, vll); } 112 #if defined(__SIZEOF_INT128__) 113 { __int128 ret; ret = __sync_xor_and_fetch(vplll, vlll); } 114 #endif 115 116 { char ret; ret = __sync_nand_and_fetch(vpc, vc); } 117 { short ret; ret = __sync_nand_and_fetch(vps, vs); } 118 { int ret; ret = __sync_nand_and_fetch(vpi, vi); } 119 { long int ret; ret = __sync_nand_and_fetch(vpl, vl); } 120 { long long int ret; ret = __sync_nand_and_fetch(vpll, vll); } 121 #if defined(__SIZEOF_INT128__) 122 { __int128 ret; ret = __sync_nand_and_fetch(vplll, vlll); } 123 #endif 124 125 { _Bool ret; ret = __sync_bool_compare_and_swap(vpc, vc, vc); } 126 { _Bool ret; ret = __sync_bool_compare_and_swap(vps, vs, vs); } 127 { _Bool ret; ret = __sync_bool_compare_and_swap(vpi, vi, vi); } 128 { _Bool ret; ret = __sync_bool_compare_and_swap(vpl, vl, vl); } 129 { _Bool ret; ret = __sync_bool_compare_and_swap(vpll, vll, vll); } 130 #if defined(__SIZEOF_INT128__) 131 { _Bool ret; ret = __sync_bool_compare_and_swap(vplll, vlll, vlll); } 15 { char ret; ret = __sync_fetch_and_add(vp1, v1); } 16 { char ret; ret = __sync_fetch_and_add_1(vp1, v1); } 17 { short ret; ret = __sync_fetch_and_add(vp2, v2); } 18 { short ret; ret = __sync_fetch_and_add_2(vp2, v2); } 19 { int ret; ret = __sync_fetch_and_add(vp4, v4); } 20 { int ret; ret = __sync_fetch_and_add_4(vp4, v4); } 21 { long long int ret; ret = __sync_fetch_and_add(vp8, v8); } 22 { long long int ret; ret = __sync_fetch_and_add_8(vp8, v8); } 23 #if defined(__SIZEOF_INT128__) 24 { __int128 ret; ret = __sync_fetch_and_add(vp16, v16); } 25 { __int128 ret; ret = __sync_fetch_and_add_16(vp16, v16); } 26 #endif 27 28 { char ret; ret = __sync_fetch_and_sub(vp1, v1); } 29 { char ret; ret = __sync_fetch_and_sub_1(vp1, v1); } 30 { short ret; ret = __sync_fetch_and_sub(vp2, v2); } 31 { short ret; ret = __sync_fetch_and_sub_2(vp2, v2); } 32 { int ret; ret = __sync_fetch_and_sub(vp4, v4); } 33 { int ret; ret = __sync_fetch_and_sub_4(vp4, v4); } 34 { long long int ret; ret = __sync_fetch_and_sub(vp8, v8); } 35 { long long int ret; ret = __sync_fetch_and_sub_8(vp8, v8); } 36 #if defined(__SIZEOF_INT128__) 37 { __int128 ret; ret = __sync_fetch_and_sub(vp16, v16); } 38 { __int128 ret; ret = __sync_fetch_and_sub_16(vp16, v16); } 39 #endif 40 41 { char ret; ret = __sync_fetch_and_or(vp1, v1); } 42 { char ret; ret = __sync_fetch_and_or_1(vp1, v1); } 43 { short ret; ret = __sync_fetch_and_or(vp2, v2); } 44 { short ret; ret = __sync_fetch_and_or_2(vp2, v2); } 45 { int ret; ret = __sync_fetch_and_or(vp4, v4); } 46 { int ret; ret = __sync_fetch_and_or_4(vp4, v4); } 47 { long long int ret; ret = __sync_fetch_and_or(vp8, v8); } 48 { long long int ret; ret = __sync_fetch_and_or_8(vp8, v8); } 49 #if defined(__SIZEOF_INT128__) 50 { __int128 ret; ret = __sync_fetch_and_or(vp16, v16); } 51 { __int128 ret; ret = __sync_fetch_and_or_16(vp16, v16); } 52 #endif 53 54 { char ret; ret = __sync_fetch_and_and(vp1, v1); } 55 { char ret; ret = __sync_fetch_and_and_1(vp1, v1); } 56 { short ret; ret = __sync_fetch_and_and(vp2, v2); } 57 { short ret; ret = __sync_fetch_and_and_2(vp2, v2); } 58 { int ret; ret = __sync_fetch_and_and(vp4, v4); } 59 { int ret; ret = __sync_fetch_and_and_4(vp4, v4); } 60 { long long int ret; ret = __sync_fetch_and_and(vp8, v8); } 61 { long long int ret; ret = __sync_fetch_and_and_8(vp8, v8); } 62 #if defined(__SIZEOF_INT128__) 63 { __int128 ret; ret = __sync_fetch_and_and(vp16, v16); } 64 { __int128 ret; ret = __sync_fetch_and_and_16(vp16, v16); } 65 #endif 66 67 { char ret; ret = __sync_fetch_and_xor(vp1, v1); } 68 { char ret; ret = __sync_fetch_and_xor_1(vp1, v1); } 69 { short ret; ret = __sync_fetch_and_xor(vp2, v2); } 70 { short ret; ret = __sync_fetch_and_xor_2(vp2, v2); } 71 { int ret; ret = __sync_fetch_and_xor(vp4, v4); } 72 { int ret; ret = __sync_fetch_and_xor_4(vp4, v4); } 73 { long long int ret; ret = __sync_fetch_and_xor(vp8, v8); } 74 { long long int ret; ret = __sync_fetch_and_xor_8(vp8, v8); } 75 #if defined(__SIZEOF_INT128__) 76 { __int128 ret; ret = __sync_fetch_and_xor(vp16, v16); } 77 { __int128 ret; ret = __sync_fetch_and_xor_16(vp16, v16); } 78 #endif 79 80 { char ret; ret = __sync_fetch_and_nand(vp1, v1); } 81 { char ret; ret = __sync_fetch_and_nand_1(vp1, v1); } 82 { short ret; ret = __sync_fetch_and_nand(vp2, v2); } 83 { short ret; ret = __sync_fetch_and_nand_2(vp2, v2); } 84 { int ret; ret = __sync_fetch_and_nand(vp4, v4); } 85 { int ret; ret = __sync_fetch_and_nand_4(vp4, v4); } 86 { long long int ret; ret = __sync_fetch_and_nand(vp8, v8); } 87 { long long int ret; ret = __sync_fetch_and_nand_8(vp8, v8); } 88 #if defined(__SIZEOF_INT128__) 89 { __int128 ret; ret = __sync_fetch_and_nand(vp16, v16); } 90 { __int128 ret; ret = __sync_fetch_and_nand_16(vp16, v16); } 91 #endif 92 93 { char ret; ret = __sync_add_and_fetch(vp1, v1); } 94 { char ret; ret = __sync_add_and_fetch_1(vp1, v1); } 95 { short ret; ret = __sync_add_and_fetch(vp2, v2); } 96 { short ret; ret = __sync_add_and_fetch_2(vp2, v2); } 97 { int ret; ret = __sync_add_and_fetch(vp4, v4); } 98 { int ret; ret = __sync_add_and_fetch_4(vp4, v4); } 99 { long long int ret; ret = __sync_add_and_fetch(vp8, v8); } 100 { long long int ret; ret = __sync_add_and_fetch_8(vp8, v8); } 101 #if defined(__SIZEOF_INT128__) 102 { __int128 ret; ret = __sync_add_and_fetch(vp16, v16); } 103 { __int128 ret; ret = __sync_add_and_fetch_16(vp16, v16); } 104 #endif 105 106 { char ret; ret = __sync_sub_and_fetch(vp1, v1); } 107 { char ret; ret = __sync_sub_and_fetch_1(vp1, v1); } 108 { short ret; ret = __sync_sub_and_fetch(vp2, v2); } 109 { short ret; ret = __sync_sub_and_fetch_2(vp2, v2); } 110 { int ret; ret = __sync_sub_and_fetch(vp4, v4); } 111 { int ret; ret = __sync_sub_and_fetch_4(vp4, v4); } 112 { long long int ret; ret = __sync_sub_and_fetch(vp8, v8); } 113 { long long int ret; ret = __sync_sub_and_fetch_8(vp8, v8); } 114 #if defined(__SIZEOF_INT128__) 115 { __int128 ret; ret = __sync_sub_and_fetch(vp16, v16); } 116 { __int128 ret; ret = __sync_sub_and_fetch_16(vp16, v16); } 117 #endif 118 119 { char ret; ret = __sync_or_and_fetch(vp1, v1); } 120 { char ret; ret = __sync_or_and_fetch_1(vp1, v1); } 121 { short ret; ret = __sync_or_and_fetch(vp2, v2); } 122 { short ret; ret = __sync_or_and_fetch_2(vp2, v2); } 123 { int ret; ret = __sync_or_and_fetch(vp4, v4); } 124 { int ret; ret = __sync_or_and_fetch_4(vp4, v4); } 125 { long long int ret; ret = __sync_or_and_fetch(vp8, v8); } 126 { long long int ret; ret = __sync_or_and_fetch_8(vp8, v8); } 127 #if defined(__SIZEOF_INT128__) 128 { __int128 ret; ret = __sync_or_and_fetch(vp16, v16); } 129 { __int128 ret; ret = __sync_or_and_fetch_16(vp16, v16); } 130 #endif 131 132 { char ret; ret = __sync_and_and_fetch(vp1, v1); } 133 { char ret; ret = __sync_and_and_fetch_1(vp1, v1); } 134 { short ret; ret = __sync_and_and_fetch(vp2, v2); } 135 { short ret; ret = __sync_and_and_fetch_2(vp2, v2); } 136 { int ret; ret = __sync_and_and_fetch(vp4, v4); } 137 { int ret; ret = __sync_and_and_fetch_4(vp4, v4); } 138 { long long int ret; ret = __sync_and_and_fetch(vp8, v8); } 139 { long long int ret; ret = __sync_and_and_fetch_8(vp8, v8); } 140 #if defined(__SIZEOF_INT128__) 141 { __int128 ret; ret = __sync_and_and_fetch(vp16, v16); } 142 { __int128 ret; ret = __sync_and_and_fetch_16(vp16, v16); } 143 #endif 144 145 { char ret; ret = __sync_xor_and_fetch(vp1, v1); } 146 { char ret; ret = __sync_xor_and_fetch_1(vp1, v1); } 147 { short ret; ret = __sync_xor_and_fetch(vp2, v2); } 148 { short ret; ret = __sync_xor_and_fetch_2(vp2, v2); } 149 { int ret; ret = __sync_xor_and_fetch(vp4, v4); } 150 { int ret; ret = __sync_xor_and_fetch_4(vp4, v4); } 151 { long long int ret; ret = __sync_xor_and_fetch(vp8, v8); } 152 { long long int ret; ret = __sync_xor_and_fetch_8(vp8, v8); } 153 #if defined(__SIZEOF_INT128__) 154 { __int128 ret; ret = __sync_xor_and_fetch(vp16, v16); } 155 { __int128 ret; ret = __sync_xor_and_fetch_16(vp16, v16); } 156 #endif 157 158 { char ret; ret = __sync_nand_and_fetch(vp1, v1); } 159 { char ret; ret = __sync_nand_and_fetch_1(vp1, v1); } 160 { short ret; ret = __sync_nand_and_fetch(vp2, v2); } 161 { short ret; ret = __sync_nand_and_fetch_2(vp2, v2); } 162 { int ret; ret = __sync_nand_and_fetch(vp4, v4); } 163 { int ret; ret = __sync_nand_and_fetch_4(vp4, v4); } 164 { long long int ret; ret = __sync_nand_and_fetch(vp8, v8); } 165 { long long int ret; ret = __sync_nand_and_fetch_8(vp8, v8); } 166 #if defined(__SIZEOF_INT128__) 167 { __int128 ret; ret = __sync_nand_and_fetch(vp16, v16); } 168 { __int128 ret; ret = __sync_nand_and_fetch_16(vp16, v16); } 169 #endif 170 171 { _Bool ret; ret = __sync_bool_compare_and_swap(vp1, v1, v1); } 172 { _Bool ret; ret = __sync_bool_compare_and_swap_1(vp1, v1, v1); } 173 { _Bool ret; ret = __sync_bool_compare_and_swap(vp2, v2, v2); } 174 { _Bool ret; ret = __sync_bool_compare_and_swap_2(vp2, v2, v2); } 175 { _Bool ret; ret = __sync_bool_compare_and_swap(vp4, v4, v4); } 176 { _Bool ret; ret = __sync_bool_compare_and_swap_4(vp4, v4, v4); } 177 { _Bool ret; ret = __sync_bool_compare_and_swap(vp8, v8, v8); } 178 { _Bool ret; ret = __sync_bool_compare_and_swap_8(vp8, v8, v8); } 179 #if defined(__SIZEOF_INT128__) 180 { _Bool ret; ret = __sync_bool_compare_and_swap(vp16, v16, v16); } 181 { _Bool ret; ret = __sync_bool_compare_and_swap_16(vp16, v16,v16); } 132 182 #endif 133 183 { _Bool ret; ret = __sync_bool_compare_and_swap(vpp, vp, vp); } 134 184 135 { char ret; ret = __sync_val_compare_and_swap(vpc, vc, vc); } 136 { short ret; ret = __sync_val_compare_and_swap(vps, vs, vs); } 137 { int ret; ret = __sync_val_compare_and_swap(vpi, vi, vi); } 138 { long int ret; ret = __sync_val_compare_and_swap(vpl, vl, vl); } 139 { long long int ret; ret = __sync_val_compare_and_swap(vpll, vll, vll); } 140 #if defined(__SIZEOF_INT128__) 141 { __int128 ret; ret = __sync_val_compare_and_swap(vplll, vlll, vlll); } 185 { char ret; ret = __sync_val_compare_and_swap(vp1, v1, v1); } 186 { char ret; ret = __sync_val_compare_and_swap_1(vp1, v1, v1); } 187 { short ret; ret = __sync_val_compare_and_swap(vp2, v2, v2); } 188 { short ret; ret = __sync_val_compare_and_swap_2(vp2, v2, v2); } 189 { int ret; ret = __sync_val_compare_and_swap(vp4, v4, v4); } 190 { int ret; ret = __sync_val_compare_and_swap_4(vp4, v4, v4); } 191 { long long int ret; ret = __sync_val_compare_and_swap(vp8, v8, v8); } 192 { long long int ret; ret = __sync_val_compare_and_swap_8(vp8, v8, v8); } 193 #if defined(__SIZEOF_INT128__) 194 { __int128 ret; ret = __sync_val_compare_and_swap(vp16, v16, v16); } 195 { __int128 ret; ret = __sync_val_compare_and_swap_16(vp16, v16,v16); } 142 196 #endif 143 197 { struct type * ret; ret = __sync_val_compare_and_swap(vpp, vp, vp); } 144 198 145 199 146 { char ret; ret = __sync_lock_test_and_set(vpc, vc); } 147 { short ret; ret = __sync_lock_test_and_set(vps, vs); } 148 { int ret; ret = __sync_lock_test_and_set(vpi, vi); } 149 { long int ret; ret = __sync_lock_test_and_set(vpl, vl); } 150 { long long int ret; ret = __sync_lock_test_and_set(vpll, vll); } 151 #if defined(__SIZEOF_INT128__) 152 { __int128 ret; ret = __sync_lock_test_and_set(vplll, vlll); } 153 #endif 154 155 { __sync_lock_release(vpc); } 156 { __sync_lock_release(vps); } 157 { __sync_lock_release(vpi); } 158 { __sync_lock_release(vpl); } 159 { __sync_lock_release(vpll); } 160 #if defined(__SIZEOF_INT128__) 161 { __sync_lock_release(vplll); } 200 { char ret; ret = __sync_lock_test_and_set(vp1, v1); } 201 { char ret; ret = __sync_lock_test_and_set_1(vp1, v1); } 202 { short ret; ret = __sync_lock_test_and_set(vp2, v2); } 203 { short ret; ret = __sync_lock_test_and_set_2(vp2, v2); } 204 { int ret; ret = __sync_lock_test_and_set(vp4, v4); } 205 { int ret; ret = __sync_lock_test_and_set_4(vp4, v4); } 206 { long long int ret; ret = __sync_lock_test_and_set(vp8, v8); } 207 { long long int ret; ret = __sync_lock_test_and_set_8(vp8, v8); } 208 #if defined(__SIZEOF_INT128__) 209 { __int128 ret; ret = __sync_lock_test_and_set(vp16, v16); } 210 { __int128 ret; ret = __sync_lock_test_and_set_16(vp16, v16); } 211 #endif 212 213 { __sync_lock_release(vp1); } 214 { __sync_lock_release_1(vp1); } 215 { __sync_lock_release(vp2); } 216 { __sync_lock_release_2(vp2); } 217 { __sync_lock_release(vp4); } 218 { __sync_lock_release_4(vp4); } 219 { __sync_lock_release(vp8); } 220 { __sync_lock_release_8(vp8); } 221 #if defined(__SIZEOF_INT128__) 222 { __sync_lock_release(vp16); } 223 { __sync_lock_release_16(vp16); } 162 224 #endif 163 225 … … 168 230 169 231 { _Bool ret; ret = __atomic_test_and_set(vpB, vB); } 170 { _Bool ret; ret = __atomic_test_and_set(vp c, vc); }232 { _Bool ret; ret = __atomic_test_and_set(vp1, v1); } 171 233 { __atomic_clear(vpB, vB); } 172 { __atomic_clear(vpc, vc); } 173 174 { char ret; ret = __atomic_exchange_n(vpc, vc, __ATOMIC_SEQ_CST); } 175 { char ret; __atomic_exchange(vpc, &vc, &ret, __ATOMIC_SEQ_CST); } 176 { short ret; ret = __atomic_exchange_n(vps, vs, __ATOMIC_SEQ_CST); } 177 { short ret; __atomic_exchange(vps, &vs, &ret, __ATOMIC_SEQ_CST); } 178 { int ret; ret = __atomic_exchange_n(vpi, vi, __ATOMIC_SEQ_CST); } 179 { int ret; __atomic_exchange(vpi, &vi, &ret, __ATOMIC_SEQ_CST); } 180 { long int ret; ret = __atomic_exchange_n(vpl, vl, __ATOMIC_SEQ_CST); } 181 { long int ret; __atomic_exchange(vpl, &vl, &ret, __ATOMIC_SEQ_CST); } 182 { long long int ret; ret = __atomic_exchange_n(vpll, vll, __ATOMIC_SEQ_CST); } 183 { long long int ret; __atomic_exchange(vpll, &vll, &ret, __ATOMIC_SEQ_CST); } 184 #if defined(__SIZEOF_INT128__) 185 { __int128 ret; ret = __atomic_exchange_n(vplll, vlll, __ATOMIC_SEQ_CST); } 186 { __int128 ret; __atomic_exchange(vplll, &vlll, &ret, __ATOMIC_SEQ_CST); } 234 { __atomic_clear(vp1, v1); } 235 236 { char ret; ret = __atomic_exchange_n(vp1, v1, __ATOMIC_SEQ_CST); } 237 { char ret; ret = __atomic_exchange_1(vp1, v1, __ATOMIC_SEQ_CST); } 238 { char ret; __atomic_exchange(vp1, &v1, &ret, __ATOMIC_SEQ_CST); } 239 { short ret; ret = __atomic_exchange_n(vp2, v2, __ATOMIC_SEQ_CST); } 240 { short ret; ret = __atomic_exchange_2(vp2, v2, __ATOMIC_SEQ_CST); } 241 { short ret; __atomic_exchange(vp2, &v2, &ret, __ATOMIC_SEQ_CST); } 242 { int ret; ret = __atomic_exchange_n(vp4, v4, __ATOMIC_SEQ_CST); } 243 { int ret; ret = __atomic_exchange_4(vp4, v4, __ATOMIC_SEQ_CST); } 244 { int ret; __atomic_exchange(vp4, &v4, &ret, __ATOMIC_SEQ_CST); } 245 { long long int ret; ret = __atomic_exchange_n(vp8, v8, __ATOMIC_SEQ_CST); } 246 { long long int ret; ret = __atomic_exchange_8(vp8, v8, __ATOMIC_SEQ_CST); } 247 { long long int ret; __atomic_exchange(vp8, &v8, &ret, __ATOMIC_SEQ_CST); } 248 #if defined(__SIZEOF_INT128__) 249 { __int128 ret; ret = __atomic_exchange_n(vp16, v16, __ATOMIC_SEQ_CST); } 250 { __int128 ret; ret = __atomic_exchange_16(vp16, v16, __ATOMIC_SEQ_CST); } 251 { __int128 ret; __atomic_exchange(vp16, &v16, &ret, __ATOMIC_SEQ_CST); } 187 252 #endif 188 253 { struct type * ret; ret = __atomic_exchange_n(vpp, vp, __ATOMIC_SEQ_CST); } 189 254 { struct type * ret; __atomic_exchange(vpp, &vp, &ret, __ATOMIC_SEQ_CST); } 190 255 191 { char ret; ret = __atomic_load_n(vpc, __ATOMIC_SEQ_CST); } 192 { char ret; __atomic_load(vpc, &ret, __ATOMIC_SEQ_CST); } 193 { short ret; ret = __atomic_load_n(vps, __ATOMIC_SEQ_CST); } 194 { short ret; __atomic_load(vps, &ret, __ATOMIC_SEQ_CST); } 195 { int ret; ret = __atomic_load_n(vpi, __ATOMIC_SEQ_CST); } 196 { int ret; __atomic_load(vpi, &ret, __ATOMIC_SEQ_CST); } 197 { long int ret; ret = __atomic_load_n(vpl, __ATOMIC_SEQ_CST); } 198 { long int ret; __atomic_load(vpl, &ret, __ATOMIC_SEQ_CST); } 199 { long long int ret; ret = __atomic_load_n(vpll, __ATOMIC_SEQ_CST); } 200 { long long int ret; __atomic_load(vpll, &ret, __ATOMIC_SEQ_CST); } 201 #if defined(__SIZEOF_INT128__) 202 { __int128 ret; ret = __atomic_load_n(vplll, __ATOMIC_SEQ_CST); } 203 { __int128 ret; __atomic_load(vplll, &ret, __ATOMIC_SEQ_CST); } 256 { char ret; ret = __atomic_load_n(vp1, __ATOMIC_SEQ_CST); } 257 { char ret; ret = __atomic_load_1(vp1, __ATOMIC_SEQ_CST); } 258 { char ret; __atomic_load(vp1, &ret, __ATOMIC_SEQ_CST); } 259 { short ret; ret = __atomic_load_n(vp2, __ATOMIC_SEQ_CST); } 260 { short ret; ret = __atomic_load_2(vp2, __ATOMIC_SEQ_CST); } 261 { short ret; __atomic_load(vp2, &ret, __ATOMIC_SEQ_CST); } 262 { int ret; ret = __atomic_load_n(vp4, __ATOMIC_SEQ_CST); } 263 { int ret; ret = __atomic_load_4(vp4, __ATOMIC_SEQ_CST); } 264 { int ret; __atomic_load(vp4, &ret, __ATOMIC_SEQ_CST); } 265 { long long int ret; ret = __atomic_load_n(vp8, __ATOMIC_SEQ_CST); } 266 { long long int ret; ret = __atomic_load_8(vp8, __ATOMIC_SEQ_CST); } 267 { long long int ret; __atomic_load(vp8, &ret, __ATOMIC_SEQ_CST); } 268 #if defined(__SIZEOF_INT128__) 269 { __int128 ret; ret = __atomic_load_n(vp16, __ATOMIC_SEQ_CST); } 270 { __int128 ret; ret = __atomic_load_16(vp16, __ATOMIC_SEQ_CST); } 271 { __int128 ret; __atomic_load(vp16, &ret, __ATOMIC_SEQ_CST); } 204 272 #endif 205 273 { struct type * ret; ret = __atomic_load_n(vpp, __ATOMIC_SEQ_CST); } 206 274 { struct type * ret; __atomic_load(vpp, &ret, __ATOMIC_SEQ_CST); } 207 275 208 { _Bool ret; ret = __atomic_compare_exchange_n(vpc, rpc, vc, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 209 { _Bool ret; ret = __atomic_compare_exchange(vpc, rpc, &vc, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 210 { _Bool ret; ret = __atomic_compare_exchange_n(vps, rps, vs, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 211 { _Bool ret; ret = __atomic_compare_exchange(vps, rps, &vs, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 212 { _Bool ret; ret = __atomic_compare_exchange_n(vpi, rpi, vi, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 213 { _Bool ret; ret = __atomic_compare_exchange(vpi, rpi, &vi, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 214 { _Bool ret; ret = __atomic_compare_exchange_n(vpl, rpl, vl, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 215 { _Bool ret; ret = __atomic_compare_exchange(vpl, rpl, &vl, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 216 { _Bool ret; ret = __atomic_compare_exchange_n(vpll, rpll, vll, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 217 { _Bool ret; ret = __atomic_compare_exchange(vpll, rpll, &vll, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 218 #if defined(__SIZEOF_INT128__) 219 { _Bool ret; ret = __atomic_compare_exchange_n(vplll, rplll, vlll, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 220 { _Bool ret; ret = __atomic_compare_exchange(vplll, rplll, &vlll, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 276 { _Bool ret; ret = __atomic_compare_exchange_n(vp1, rp1, v1, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 277 { _Bool ret; ret = __atomic_compare_exchange_1(vp1, rp1, v1, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 278 { _Bool ret; ret = __atomic_compare_exchange(vp1, rp1, &v1, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 279 { _Bool ret; ret = __atomic_compare_exchange_n(vp2, rp2, v2, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 280 { _Bool ret; ret = __atomic_compare_exchange_2(vp2, rp2, v2, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 281 { _Bool ret; ret = __atomic_compare_exchange(vp2, rp2, &v2, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 282 { _Bool ret; ret = __atomic_compare_exchange_n(vp4, rp4, v4, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 283 { _Bool ret; ret = __atomic_compare_exchange_4(vp4, rp4, v4, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 284 { _Bool ret; ret = __atomic_compare_exchange(vp4, rp4, &v4, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 285 { _Bool ret; ret = __atomic_compare_exchange_n(vp8, rp8, v8, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 286 { _Bool ret; ret = __atomic_compare_exchange_8(vp8, rp8, v8, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 287 { _Bool ret; ret = __atomic_compare_exchange(vp8, rp8, &v8, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 288 #if defined(__SIZEOF_INT128__) 289 { _Bool ret; ret = __atomic_compare_exchange_n(vp16, rp16, v16, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 290 { _Bool ret; ret = __atomic_compare_exchange_16(vp16, rp16, v16, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 291 { _Bool ret; ret = __atomic_compare_exchange(vp16, rp16, &v16, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 221 292 #endif 222 293 { _Bool ret; ret = __atomic_compare_exchange_n(vpp, rpp, vp, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 223 294 { _Bool ret; ret = __atomic_compare_exchange(vpp, rpp, &vp, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } 224 295 225 { __atomic_store_n(vpc, vc, __ATOMIC_SEQ_CST); } 226 { __atomic_store(vpc, &vc, __ATOMIC_SEQ_CST); } 227 { __atomic_store_n(vps, vs, __ATOMIC_SEQ_CST); } 228 { __atomic_store(vps, &vs, __ATOMIC_SEQ_CST); } 229 { __atomic_store_n(vpi, vi, __ATOMIC_SEQ_CST); } 230 { __atomic_store(vpi, &vi, __ATOMIC_SEQ_CST); } 231 { __atomic_store_n(vpl, vl, __ATOMIC_SEQ_CST); } 232 { __atomic_store(vpl, &vl, __ATOMIC_SEQ_CST); } 233 { __atomic_store_n(vpll, vll, __ATOMIC_SEQ_CST); } 234 { __atomic_store(vpll, &vll, __ATOMIC_SEQ_CST); } 235 #if defined(__SIZEOF_INT128__) 236 { __atomic_store_n(vplll, vlll, __ATOMIC_SEQ_CST); } 237 { __atomic_store(vplll, &vlll, __ATOMIC_SEQ_CST); } 296 { __atomic_store_n(vp1, v1, __ATOMIC_SEQ_CST); } 297 { __atomic_store_1(vp1, v1, __ATOMIC_SEQ_CST); } 298 { __atomic_store(vp1, &v1, __ATOMIC_SEQ_CST); } 299 { __atomic_store_n(vp2, v2, __ATOMIC_SEQ_CST); } 300 { __atomic_store_2(vp2, v2, __ATOMIC_SEQ_CST); } 301 { __atomic_store(vp2, &v2, __ATOMIC_SEQ_CST); } 302 { __atomic_store_n(vp4, v4, __ATOMIC_SEQ_CST); } 303 { __atomic_store_4(vp4, v4, __ATOMIC_SEQ_CST); } 304 { __atomic_store(vp4, &v4, __ATOMIC_SEQ_CST); } 305 { __atomic_store_n(vp8, v8, __ATOMIC_SEQ_CST); } 306 { __atomic_store_8(vp8, v8, __ATOMIC_SEQ_CST); } 307 { __atomic_store(vp8, &v8, __ATOMIC_SEQ_CST); } 308 #if defined(__SIZEOF_INT128__) 309 { __atomic_store_n(vp16, v16, __ATOMIC_SEQ_CST); } 310 { __atomic_store_16(vp16, v16, __ATOMIC_SEQ_CST); } 311 { __atomic_store(vp16, &v16, __ATOMIC_SEQ_CST); } 238 312 #endif 239 313 { __atomic_store_n(vpp, vp, __ATOMIC_SEQ_CST); } 240 314 { __atomic_store(vpp, &vp, __ATOMIC_SEQ_CST); } 241 315 242 { char ret; ret = __atomic_add_fetch(vpc, vc, __ATOMIC_SEQ_CST); } 243 { short ret; ret = __atomic_add_fetch(vps, vs, __ATOMIC_SEQ_CST); } 244 { int ret; ret = __atomic_add_fetch(vpi, vi, __ATOMIC_SEQ_CST); } 245 { long int ret; ret = __atomic_add_fetch(vpl, vl, __ATOMIC_SEQ_CST); } 246 { long long int ret; ret = __atomic_add_fetch(vpll, vll, __ATOMIC_SEQ_CST); } 247 #if defined(__SIZEOF_INT128__) 248 { __int128 ret; ret = __atomic_add_fetch(vplll, vlll, __ATOMIC_SEQ_CST); } 249 #endif 250 251 { char ret; ret = __atomic_sub_fetch(vpc, vc, __ATOMIC_SEQ_CST); } 252 { short ret; ret = __atomic_sub_fetch(vps, vs, __ATOMIC_SEQ_CST); } 253 { int ret; ret = __atomic_sub_fetch(vpi, vi, __ATOMIC_SEQ_CST); } 254 { long int ret; ret = __atomic_sub_fetch(vpl, vl, __ATOMIC_SEQ_CST); } 255 { long long int ret; ret = __atomic_sub_fetch(vpll, vll, __ATOMIC_SEQ_CST); } 256 #if defined(__SIZEOF_INT128__) 257 { __int128 ret; ret = __atomic_sub_fetch(vplll, vlll, __ATOMIC_SEQ_CST); } 258 #endif 259 260 { char ret; ret = __atomic_and_fetch(vpc, vc, __ATOMIC_SEQ_CST); } 261 { short ret; ret = __atomic_and_fetch(vps, vs, __ATOMIC_SEQ_CST); } 262 { int ret; ret = __atomic_and_fetch(vpi, vi, __ATOMIC_SEQ_CST); } 263 { long int ret; ret = __atomic_and_fetch(vpl, vl, __ATOMIC_SEQ_CST); } 264 { long long int ret; ret = __atomic_and_fetch(vpll, vll, __ATOMIC_SEQ_CST); } 265 #if defined(__SIZEOF_INT128__) 266 { __int128 ret; ret = __atomic_and_fetch(vplll, vlll, __ATOMIC_SEQ_CST); } 267 #endif 268 269 { char ret; ret = __atomic_nand_fetch(vpc, vc, __ATOMIC_SEQ_CST); } 270 { short ret; ret = __atomic_nand_fetch(vps, vs, __ATOMIC_SEQ_CST); } 271 { int ret; ret = __atomic_nand_fetch(vpi, vi, __ATOMIC_SEQ_CST); } 272 { long int ret; ret = __atomic_nand_fetch(vpl, vl, __ATOMIC_SEQ_CST); } 273 { long long int ret; ret = __atomic_nand_fetch(vpll, vll, __ATOMIC_SEQ_CST); } 274 #if defined(__SIZEOF_INT128__) 275 { __int128 ret; ret = __atomic_nand_fetch(vplll, vlll, __ATOMIC_SEQ_CST); } 276 #endif 277 278 { char ret; ret = __atomic_xor_fetch(vpc, vc, __ATOMIC_SEQ_CST); } 279 { short ret; ret = __atomic_xor_fetch(vps, vs, __ATOMIC_SEQ_CST); } 280 { int ret; ret = __atomic_xor_fetch(vpi, vi, __ATOMIC_SEQ_CST); } 281 { long int ret; ret = __atomic_xor_fetch(vpl, vl, __ATOMIC_SEQ_CST); } 282 { long long int ret; ret = __atomic_xor_fetch(vpll, vll, __ATOMIC_SEQ_CST); } 283 #if defined(__SIZEOF_INT128__) 284 { __int128 ret; ret = __atomic_xor_fetch(vplll, vlll, __ATOMIC_SEQ_CST); } 285 #endif 286 287 { char ret; ret = __atomic_or_fetch(vpc, vc, __ATOMIC_SEQ_CST); } 288 { short ret; ret = __atomic_or_fetch(vps, vs, __ATOMIC_SEQ_CST); } 289 { int ret; ret = __atomic_or_fetch(vpi, vi, __ATOMIC_SEQ_CST); } 290 { long int ret; ret = __atomic_or_fetch(vpl, vl, __ATOMIC_SEQ_CST); } 291 { long long int ret; ret = __atomic_or_fetch(vpll, vll, __ATOMIC_SEQ_CST); } 292 #if defined(__SIZEOF_INT128__) 293 { __int128 ret; ret = __atomic_or_fetch(vplll, vlll, __ATOMIC_SEQ_CST); } 294 #endif 295 296 { char ret; ret = __atomic_fetch_add(vpc, vc, __ATOMIC_SEQ_CST); } 297 { short ret; ret = __atomic_fetch_add(vps, vs, __ATOMIC_SEQ_CST); } 298 { int ret; ret = __atomic_fetch_add(vpi, vi, __ATOMIC_SEQ_CST); } 299 { long int ret; ret = __atomic_fetch_add(vpl, vl, __ATOMIC_SEQ_CST); } 300 { long long int ret; ret = __atomic_fetch_add(vpll, vll, __ATOMIC_SEQ_CST); } 301 #if defined(__SIZEOF_INT128__) 302 { __int128 ret; ret = __atomic_fetch_add(vplll, vlll, __ATOMIC_SEQ_CST); } 303 #endif 304 305 { char ret; ret = __atomic_fetch_sub(vpc, vc, __ATOMIC_SEQ_CST); } 306 { short ret; ret = __atomic_fetch_sub(vps, vs, __ATOMIC_SEQ_CST); } 307 { int ret; ret = __atomic_fetch_sub(vpi, vi, __ATOMIC_SEQ_CST); } 308 { long int ret; ret = __atomic_fetch_sub(vpl, vl, __ATOMIC_SEQ_CST); } 309 { long long int ret; ret = __atomic_fetch_sub(vpll, vll, __ATOMIC_SEQ_CST); } 310 #if defined(__SIZEOF_INT128__) 311 { __int128 ret; ret = __atomic_fetch_sub(vplll, vlll, __ATOMIC_SEQ_CST); } 312 #endif 313 314 { char ret; ret = __atomic_fetch_and(vpc, vc, __ATOMIC_SEQ_CST); } 315 { short ret; ret = __atomic_fetch_and(vps, vs, __ATOMIC_SEQ_CST); } 316 { int ret; ret = __atomic_fetch_and(vpi, vi, __ATOMIC_SEQ_CST); } 317 { long int ret; ret = __atomic_fetch_and(vpl, vl, __ATOMIC_SEQ_CST); } 318 { long long int ret; ret = __atomic_fetch_and(vpll, vll, __ATOMIC_SEQ_CST); } 319 #if defined(__SIZEOF_INT128__) 320 { __int128 ret; ret = __atomic_fetch_and(vplll, vlll, __ATOMIC_SEQ_CST); } 321 #endif 322 323 { char ret; ret = __atomic_fetch_nand(vpc, vc, __ATOMIC_SEQ_CST); } 324 { short ret; ret = __atomic_fetch_nand(vps, vs, __ATOMIC_SEQ_CST); } 325 { int ret; ret = __atomic_fetch_nand(vpi, vi, __ATOMIC_SEQ_CST); } 326 { long int ret; ret = __atomic_fetch_nand(vpl, vl, __ATOMIC_SEQ_CST); } 327 { long long int ret; ret = __atomic_fetch_nand(vpll, vll, __ATOMIC_SEQ_CST); } 328 #if defined(__SIZEOF_INT128__) 329 { __int128 ret; ret = __atomic_fetch_nand(vplll, vlll, __ATOMIC_SEQ_CST); } 330 #endif 331 332 { char ret; ret = __atomic_fetch_xor(vpc, vc, __ATOMIC_SEQ_CST); } 333 { short ret; ret = __atomic_fetch_xor(vps, vs, __ATOMIC_SEQ_CST); } 334 { int ret; ret = __atomic_fetch_xor(vpi, vi, __ATOMIC_SEQ_CST); } 335 { long int ret; ret = __atomic_fetch_xor(vpl, vl, __ATOMIC_SEQ_CST); } 336 { long long int ret; ret = __atomic_fetch_xor(vpll, vll, __ATOMIC_SEQ_CST); } 337 #if defined(__SIZEOF_INT128__) 338 { __int128 ret; ret = __atomic_fetch_xor(vplll, vlll, __ATOMIC_SEQ_CST); } 339 #endif 340 341 { char ret; ret = __atomic_fetch_or(vpc, vc, __ATOMIC_SEQ_CST); } 342 { short ret; ret = __atomic_fetch_or(vps, vs, __ATOMIC_SEQ_CST); } 343 { int ret; ret = __atomic_fetch_or(vpi, vi, __ATOMIC_SEQ_CST); } 344 { long int ret; ret = __atomic_fetch_or(vpl, vl, __ATOMIC_SEQ_CST); } 345 { long long int ret; ret = __atomic_fetch_or(vpll, vll, __ATOMIC_SEQ_CST); } 346 #if defined(__SIZEOF_INT128__) 347 { __int128 ret; ret = __atomic_fetch_or(vplll, vlll, __ATOMIC_SEQ_CST); } 348 #endif 349 350 { _Bool ret; ret = __atomic_always_lock_free(sizeof(int), vpi); } 351 { _Bool ret; ret = __atomic_is_lock_free(sizeof(int), vpi); } 316 { char ret; ret = __atomic_add_fetch(vp1, v1, __ATOMIC_SEQ_CST); } 317 { char ret; ret = __atomic_add_fetch_1(vp1, v1, __ATOMIC_SEQ_CST); } 318 { short ret; ret = __atomic_add_fetch(vp2, v2, __ATOMIC_SEQ_CST); } 319 { short ret; ret = __atomic_add_fetch_2(vp2, v2, __ATOMIC_SEQ_CST); } 320 { int ret; ret = __atomic_add_fetch(vp4, v4, __ATOMIC_SEQ_CST); } 321 { int ret; ret = __atomic_add_fetch_4(vp4, v4, __ATOMIC_SEQ_CST); } 322 { long long int ret; ret = __atomic_add_fetch(vp8, v8, __ATOMIC_SEQ_CST); } 323 { long long int ret; ret = __atomic_add_fetch_8(vp8, v8, __ATOMIC_SEQ_CST); } 324 #if defined(__SIZEOF_INT128__) 325 { __int128 ret; ret = __atomic_add_fetch(vp16, v16, __ATOMIC_SEQ_CST); } 326 { __int128 ret; ret = __atomic_add_fetch_16(vp16, v16, __ATOMIC_SEQ_CST); } 327 #endif 328 329 { char ret; ret = __atomic_sub_fetch(vp1, v1, __ATOMIC_SEQ_CST); } 330 { char ret; ret = __atomic_sub_fetch_1(vp1, v1, __ATOMIC_SEQ_CST); } 331 { short ret; ret = __atomic_sub_fetch(vp2, v2, __ATOMIC_SEQ_CST); } 332 { short ret; ret = __atomic_sub_fetch_2(vp2, v2, __ATOMIC_SEQ_CST); } 333 { int ret; ret = __atomic_sub_fetch(vp4, v4, __ATOMIC_SEQ_CST); } 334 { int ret; ret = __atomic_sub_fetch_4(vp4, v4, __ATOMIC_SEQ_CST); } 335 { long long int ret; ret = __atomic_sub_fetch(vp8, v8, __ATOMIC_SEQ_CST); } 336 { long long int ret; ret = __atomic_sub_fetch_8(vp8, v8, __ATOMIC_SEQ_CST); } 337 #if defined(__SIZEOF_INT128__) 338 { __int128 ret; ret = __atomic_sub_fetch(vp16, v16, __ATOMIC_SEQ_CST); } 339 { __int128 ret; ret = __atomic_sub_fetch_16(vp16, v16, __ATOMIC_SEQ_CST); } 340 #endif 341 342 { char ret; ret = __atomic_and_fetch(vp1, v1, __ATOMIC_SEQ_CST); } 343 { char ret; ret = __atomic_and_fetch_1(vp1, v1, __ATOMIC_SEQ_CST); } 344 { short ret; ret = __atomic_and_fetch(vp2, v2, __ATOMIC_SEQ_CST); } 345 { short ret; ret = __atomic_and_fetch_2(vp2, v2, __ATOMIC_SEQ_CST); } 346 { int ret; ret = __atomic_and_fetch(vp4, v4, __ATOMIC_SEQ_CST); } 347 { int ret; ret = __atomic_and_fetch_4(vp4, v4, __ATOMIC_SEQ_CST); } 348 { long long int ret; ret = __atomic_and_fetch(vp8, v8, __ATOMIC_SEQ_CST); } 349 { long long int ret; ret = __atomic_and_fetch_8(vp8, v8, __ATOMIC_SEQ_CST); } 350 #if defined(__SIZEOF_INT128__) 351 { __int128 ret; ret = __atomic_and_fetch(vp16, v16, __ATOMIC_SEQ_CST); } 352 { __int128 ret; ret = __atomic_and_fetch_16(vp16, v16, __ATOMIC_SEQ_CST); } 353 #endif 354 355 { char ret; ret = __atomic_nand_fetch(vp1, v1, __ATOMIC_SEQ_CST); } 356 { char ret; ret = __atomic_nand_fetch_1(vp1, v1, __ATOMIC_SEQ_CST); } 357 { short ret; ret = __atomic_nand_fetch(vp2, v2, __ATOMIC_SEQ_CST); } 358 { short ret; ret = __atomic_nand_fetch_2(vp2, v2, __ATOMIC_SEQ_CST); } 359 { int ret; ret = __atomic_nand_fetch(vp4, v4, __ATOMIC_SEQ_CST); } 360 { int ret; ret = __atomic_nand_fetch_4(vp4, v4, __ATOMIC_SEQ_CST); } 361 { long long int ret; ret = __atomic_nand_fetch(vp8, v8, __ATOMIC_SEQ_CST); } 362 { long long int ret; ret = __atomic_nand_fetch_8(vp8, v8, __ATOMIC_SEQ_CST); } 363 #if defined(__SIZEOF_INT128__) 364 { __int128 ret; ret = __atomic_nand_fetch(vp16, v16, __ATOMIC_SEQ_CST); } 365 { __int128 ret; ret = __atomic_nand_fetch_16(vp16, v16, __ATOMIC_SEQ_CST); } 366 #endif 367 368 { char ret; ret = __atomic_xor_fetch(vp1, v1, __ATOMIC_SEQ_CST); } 369 { char ret; ret = __atomic_xor_fetch_1(vp1, v1, __ATOMIC_SEQ_CST); } 370 { short ret; ret = __atomic_xor_fetch(vp2, v2, __ATOMIC_SEQ_CST); } 371 { short ret; ret = __atomic_xor_fetch_2(vp2, v2, __ATOMIC_SEQ_CST); } 372 { int ret; ret = __atomic_xor_fetch(vp4, v4, __ATOMIC_SEQ_CST); } 373 { int ret; ret = __atomic_xor_fetch_4(vp4, v4, __ATOMIC_SEQ_CST); } 374 { long long int ret; ret = __atomic_xor_fetch(vp8, v8, __ATOMIC_SEQ_CST); } 375 { long long int ret; ret = __atomic_xor_fetch_8(vp8, v8, __ATOMIC_SEQ_CST); } 376 #if defined(__SIZEOF_INT128__) 377 { __int128 ret; ret = __atomic_xor_fetch(vp16, v16, __ATOMIC_SEQ_CST); } 378 { __int128 ret; ret = __atomic_xor_fetch_16(vp16, v16, __ATOMIC_SEQ_CST); } 379 #endif 380 381 { char ret; ret = __atomic_or_fetch(vp1, v1, __ATOMIC_SEQ_CST); } 382 { char ret; ret = __atomic_or_fetch_1(vp1, v1, __ATOMIC_SEQ_CST); } 383 { short ret; ret = __atomic_or_fetch(vp2, v2, __ATOMIC_SEQ_CST); } 384 { short ret; ret = __atomic_or_fetch_2(vp2, v2, __ATOMIC_SEQ_CST); } 385 { int ret; ret = __atomic_or_fetch(vp4, v4, __ATOMIC_SEQ_CST); } 386 { int ret; ret = __atomic_or_fetch_4(vp4, v4, __ATOMIC_SEQ_CST); } 387 { long long int ret; ret = __atomic_or_fetch(vp8, v8, __ATOMIC_SEQ_CST); } 388 { long long int ret; ret = __atomic_or_fetch_8(vp8, v8, __ATOMIC_SEQ_CST); } 389 #if defined(__SIZEOF_INT128__) 390 { __int128 ret; ret = __atomic_or_fetch(vp16, v16, __ATOMIC_SEQ_CST); } 391 { __int128 ret; ret = __atomic_or_fetch_16(vp16, v16, __ATOMIC_SEQ_CST); } 392 #endif 393 394 { char ret; ret = __atomic_fetch_add(vp1, v1, __ATOMIC_SEQ_CST); } 395 { char ret; ret = __atomic_fetch_add_1(vp1, v1, __ATOMIC_SEQ_CST); } 396 { short ret; ret = __atomic_fetch_add(vp2, v2, __ATOMIC_SEQ_CST); } 397 { short ret; ret = __atomic_fetch_add_2(vp2, v2, __ATOMIC_SEQ_CST); } 398 { int ret; ret = __atomic_fetch_add(vp4, v4, __ATOMIC_SEQ_CST); } 399 { int ret; ret = __atomic_fetch_add_4(vp4, v4, __ATOMIC_SEQ_CST); } 400 { long long int ret; ret = __atomic_fetch_add(vp8, v8, __ATOMIC_SEQ_CST); } 401 { long long int ret; ret = __atomic_fetch_add_8(vp8, v8, __ATOMIC_SEQ_CST); } 402 #if defined(__SIZEOF_INT128__) 403 { __int128 ret; ret = __atomic_fetch_add(vp16, v16, __ATOMIC_SEQ_CST); } 404 { __int128 ret; ret = __atomic_fetch_add_16(vp16, v16, __ATOMIC_SEQ_CST); } 405 #endif 406 407 { char ret; ret = __atomic_fetch_sub(vp1, v1, __ATOMIC_SEQ_CST); } 408 { char ret; ret = __atomic_fetch_sub_1(vp1, v1, __ATOMIC_SEQ_CST); } 409 { short ret; ret = __atomic_fetch_sub(vp2, v2, __ATOMIC_SEQ_CST); } 410 { short ret; ret = __atomic_fetch_sub_2(vp2, v2, __ATOMIC_SEQ_CST); } 411 { int ret; ret = __atomic_fetch_sub(vp4, v4, __ATOMIC_SEQ_CST); } 412 { int ret; ret = __atomic_fetch_sub_4(vp4, v4, __ATOMIC_SEQ_CST); } 413 { long long int ret; ret = __atomic_fetch_sub(vp8, v8, __ATOMIC_SEQ_CST); } 414 { long long int ret; ret = __atomic_fetch_sub_8(vp8, v8, __ATOMIC_SEQ_CST); } 415 #if defined(__SIZEOF_INT128__) 416 { __int128 ret; ret = __atomic_fetch_sub(vp16, v16, __ATOMIC_SEQ_CST); } 417 { __int128 ret; ret = __atomic_fetch_sub_16(vp16, v16, __ATOMIC_SEQ_CST); } 418 #endif 419 420 { char ret; ret = __atomic_fetch_and(vp1, v1, __ATOMIC_SEQ_CST); } 421 { char ret; ret = __atomic_fetch_and_1(vp1, v1, __ATOMIC_SEQ_CST); } 422 { short ret; ret = __atomic_fetch_and(vp2, v2, __ATOMIC_SEQ_CST); } 423 { short ret; ret = __atomic_fetch_and_2(vp2, v2, __ATOMIC_SEQ_CST); } 424 { int ret; ret = __atomic_fetch_and(vp4, v4, __ATOMIC_SEQ_CST); } 425 { int ret; ret = __atomic_fetch_and_4(vp4, v4, __ATOMIC_SEQ_CST); } 426 { long long int ret; ret = __atomic_fetch_and(vp8, v8, __ATOMIC_SEQ_CST); } 427 { long long int ret; ret = __atomic_fetch_and_8(vp8, v8, __ATOMIC_SEQ_CST); } 428 #if defined(__SIZEOF_INT128__) 429 { __int128 ret; ret = __atomic_fetch_and(vp16, v16, __ATOMIC_SEQ_CST); } 430 { __int128 ret; ret = __atomic_fetch_and_16(vp16, v16, __ATOMIC_SEQ_CST); } 431 #endif 432 433 { char ret; ret = __atomic_fetch_nand(vp1, v1, __ATOMIC_SEQ_CST); } 434 { char ret; ret = __atomic_fetch_nand_1(vp1, v1, __ATOMIC_SEQ_CST); } 435 { short ret; ret = __atomic_fetch_nand(vp2, v2, __ATOMIC_SEQ_CST); } 436 { short ret; ret = __atomic_fetch_nand_2(vp2, v2, __ATOMIC_SEQ_CST); } 437 { int ret; ret = __atomic_fetch_nand(vp4, v4, __ATOMIC_SEQ_CST); } 438 { int ret; ret = __atomic_fetch_nand_4(vp4, v4, __ATOMIC_SEQ_CST); } 439 { long long int ret; ret = __atomic_fetch_nand(vp8, v8, __ATOMIC_SEQ_CST); } 440 { long long int ret; ret = __atomic_fetch_nand_8(vp8, v8, __ATOMIC_SEQ_CST); } 441 #if defined(__SIZEOF_INT128__) 442 { __int128 ret; ret = __atomic_fetch_nand(vp16, v16, __ATOMIC_SEQ_CST); } 443 { __int128 ret; ret = __atomic_fetch_nand_16(vp16, v16, __ATOMIC_SEQ_CST); } 444 #endif 445 446 { char ret; ret = __atomic_fetch_xor(vp1, v1, __ATOMIC_SEQ_CST); } 447 { char ret; ret = __atomic_fetch_xor_1(vp1, v1, __ATOMIC_SEQ_CST); } 448 { short ret; ret = __atomic_fetch_xor(vp2, v2, __ATOMIC_SEQ_CST); } 449 { short ret; ret = __atomic_fetch_xor_2(vp2, v2, __ATOMIC_SEQ_CST); } 450 { int ret; ret = __atomic_fetch_xor(vp4, v4, __ATOMIC_SEQ_CST); } 451 { int ret; ret = __atomic_fetch_xor_4(vp4, v4, __ATOMIC_SEQ_CST); } 452 { long long int ret; ret = __atomic_fetch_xor(vp8, v8, __ATOMIC_SEQ_CST); } 453 { long long int ret; ret = __atomic_fetch_xor_8(vp8, v8, __ATOMIC_SEQ_CST); } 454 #if defined(__SIZEOF_INT128__) 455 { __int128 ret; ret = __atomic_fetch_xor(vp16, v16, __ATOMIC_SEQ_CST); } 456 { __int128 ret; ret = __atomic_fetch_xor_16(vp16, v16, __ATOMIC_SEQ_CST); } 457 #endif 458 459 { char ret; ret = __atomic_fetch_or(vp1, v1, __ATOMIC_SEQ_CST); } 460 { char ret; ret = __atomic_fetch_or_1(vp1, v1, __ATOMIC_SEQ_CST); } 461 { short ret; ret = __atomic_fetch_or(vp2, v2, __ATOMIC_SEQ_CST); } 462 { short ret; ret = __atomic_fetch_or_2(vp2, v2, __ATOMIC_SEQ_CST); } 463 { int ret; ret = __atomic_fetch_or(vp4, v4, __ATOMIC_SEQ_CST); } 464 { int ret; ret = __atomic_fetch_or_4(vp4, v4, __ATOMIC_SEQ_CST); } 465 { long long int ret; ret = __atomic_fetch_or(vp8, v8, __ATOMIC_SEQ_CST); } 466 { long long int ret; ret = __atomic_fetch_or_8(vp8, v8, __ATOMIC_SEQ_CST); } 467 #if defined(__SIZEOF_INT128__) 468 { __int128 ret; ret = __atomic_fetch_or(vp16, v16, __ATOMIC_SEQ_CST); } 469 { __int128 ret; ret = __atomic_fetch_or_16(vp16, v16, __ATOMIC_SEQ_CST); } 470 #endif 471 472 { _Bool ret; ret = __atomic_always_lock_free(sizeof(int), vp4); } 473 { _Bool ret; ret = __atomic_is_lock_free(sizeof(int), vp4); } 352 474 { __atomic_thread_fence(__ATOMIC_SEQ_CST); } 353 475 { __atomic_signal_fence(__ATOMIC_SEQ_CST); } -
tests/concurrent/preempt.cfa
r2fa5bd2 raca6a54c 36 36 if( (counter % 7) == this.value ) { 37 37 __cfaabi_check_preemption(); 38 int next = __atomic_add_fetch ( &counter, 1, __ATOMIC_SEQ_CST);38 int next = __atomic_add_fetch_4(&counter, 1, __ATOMIC_SEQ_CST); 39 39 __cfaabi_check_preemption(); 40 40 if( (next % 100) == 0 ) printf("%d\n", (int)next); -
tests/concurrent/signal/wait.cfa
r2fa5bd2 raca6a54c 98 98 } 99 99 100 __ atomic_fetch_sub( &waiter_left, 1, __ATOMIC_SEQ_CST);100 __sync_fetch_and_sub_4( &waiter_left, 1); 101 101 } 102 102 … … 109 109 } 110 110 111 __ atomic_fetch_sub( &waiter_left, 1, __ATOMIC_SEQ_CST);111 __sync_fetch_and_sub_4( &waiter_left, 1); 112 112 } 113 113 … … 120 120 } 121 121 122 __ atomic_fetch_sub( &waiter_left, 1, __ATOMIC_SEQ_CST);122 __sync_fetch_and_sub_4( &waiter_left, 1); 123 123 } 124 124 … … 131 131 } 132 132 133 __ atomic_fetch_sub( &waiter_left, 1, __ATOMIC_SEQ_CST);133 __sync_fetch_and_sub_4( &waiter_left, 1); 134 134 } 135 135 -
tests/concurrent/thread.cfa
r2fa5bd2 raca6a54c 7 7 thread Second { semaphore* lock; }; 8 8 9 void ?{}( First & this, semaphore & lock ) { ((thread&)this){ "Thread 1"}; this.lock = &lock; }10 void ?{}( Second & this, semaphore & lock ) { ((thread&)this){ "Thread 2"}; this.lock = &lock; }9 void ?{}( First & this, semaphore & lock ) { ((thread&)this){"Thread 1"}; this.lock = &lock; } 10 void ?{}( Second & this, semaphore & lock ) { ((thread&)this){"Thread 2"}; this.lock = &lock; } 11 11 12 12 void main(First& this) { -
tests/heap.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Tue Nov 6 17:54:56 2018 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Nov 24 12:34:51201913 // Update Count : 2812 // Last Modified On : Fri Jul 19 08:22:34 2019 13 // Update Count : 19 14 14 // 15 15 … … 38 38 enum { NoOfAllocs = 5000, NoOfMmaps = 10 }; 39 39 char * locns[NoOfAllocs]; 40 size_t amount; 41 enum { limit = 64 * 1024 }; // check alignments up to here 40 int i; 42 41 43 42 // check alloc/free … … 75 74 size_t s = (i + 1) * 20; 76 75 char * area = (char *)malloc( s ); 77 if ( area == 0 p) abort( "malloc/free out of memory" );76 if ( area == 0 ) abort( "malloc/free out of memory" ); 78 77 area[0] = '\345'; area[s - 1] = '\345'; // fill first/last 79 78 area[malloc_usable_size( area ) - 1] = '\345'; // fill ultimate byte … … 84 83 size_t s = i + 1; // +1 to make initialization simpler 85 84 locns[i] = (char *)malloc( s ); 86 if ( locns[i] == 0 p) abort( "malloc/free out of memory" );85 if ( locns[i] == 0 ) abort( "malloc/free out of memory" ); 87 86 locns[i][0] = '\345'; locns[i][s - 1] = '\345'; // fill first/last 88 87 locns[i][malloc_usable_size( locns[i] ) - 1] = '\345'; // fill ultimate byte … … 100 99 size_t s = i + default_mmap_start(); // cross over point 101 100 char * area = (char *)malloc( s ); 102 if ( area == 0 p) abort( "malloc/free out of memory" );101 if ( area == 0 ) abort( "malloc/free out of memory" ); 103 102 area[0] = '\345'; area[s - 1] = '\345'; // fill first/last 104 103 area[malloc_usable_size( area ) - 1] = '\345'; // fill ultimate byte … … 109 108 size_t s = i + default_mmap_start(); // cross over point 110 109 locns[i] = (char *)malloc( s ); 111 if ( locns[i] == 0 p) abort( "malloc/free out of memory" );110 if ( locns[i] == 0 ) abort( "malloc/free out of memory" ); 112 111 locns[i][0] = '\345'; locns[i][s - 1] = '\345'; // fill first/last 113 112 locns[i][malloc_usable_size( locns[i] ) - 1] = '\345'; // fill ultimate byte … … 125 124 size_t s = (i + 1) * 20; 126 125 char * area = (char *)calloc( 5, s ); 127 if ( area == 0 p) abort( "calloc/free out of memory" );126 if ( area == 0 ) abort( "calloc/free out of memory" ); 128 127 if ( area[0] != '\0' || area[s - 1] != '\0' || 129 128 area[malloc_usable_size( area ) - 1] != '\0' || … … 137 136 size_t s = i + 1; 138 137 locns[i] = (char *)calloc( 5, s ); 139 if ( locns[i] == 0 p) abort( "calloc/free out of memory" );138 if ( locns[i] == 0 ) abort( "calloc/free out of memory" ); 140 139 if ( locns[i][0] != '\0' || locns[i][s - 1] != '\0' || 141 140 locns[i][malloc_usable_size( locns[i] ) - 1] != '\0' || … … 156 155 size_t s = i + default_mmap_start(); // cross over point 157 156 char * area = (char *)calloc( 1, s ); 158 if ( area == 0 p) abort( "calloc/free out of memory" );157 if ( area == 0 ) abort( "calloc/free out of memory" ); 159 158 if ( area[0] != '\0' || area[s - 1] != '\0' ) abort( "calloc/free corrupt storage4.1" ); 160 159 if ( area[malloc_usable_size( area ) - 1] != '\0' ) abort( "calloc/free corrupt storage4.2" ); … … 168 167 size_t s = i + default_mmap_start(); // cross over point 169 168 locns[i] = (char *)calloc( 1, s ); 170 if ( locns[i] == 0 p) abort( "calloc/free out of memory" );169 if ( locns[i] == 0 ) abort( "calloc/free out of memory" ); 171 170 if ( locns[i][0] != '\0' || locns[i][s - 1] != '\0' || 172 171 locns[i][malloc_usable_size( locns[i] ) - 1] != '\0' || … … 184 183 // check memalign/free (sbrk) 185 184 185 enum { limit = 64 * 1024 }; // check alignments up to here 186 186 187 for ( a; libAlign() ~= limit ~ a ) { // generate powers of 2 187 188 //sout | alignments[a]; 188 189 for ( s; 1 ~ NoOfAllocs ) { // allocation of size 0 can return null 189 190 char * area = (char *)memalign( a, s ); 190 if ( area == 0 p) abort( "memalign/free out of memory" );191 //sout | i | area;191 if ( area == 0 ) abort( "memalign/free out of memory" ); 192 //sout | i | " " | area; 192 193 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment 193 194 abort( "memalign/free bad alignment : memalign(%d,%d) = %p", (int)a, s, area ); 194 195 } // if 195 area[0] = '\345'; area[s - 1] = '\345'; // fill first/last byte196 area[0] = '\345'; area[s - 1] = '\345'; // fill first/last byte 196 197 area[malloc_usable_size( area ) - 1] = '\345'; // fill ultimate byte 197 198 free( area ); … … 206 207 size_t s = i + default_mmap_start(); // cross over point 207 208 char * area = (char *)memalign( a, s ); 208 if ( area == 0 p) abort( "memalign/free out of memory" );209 //sout | i | area;209 if ( area == 0 ) abort( "memalign/free out of memory" ); 210 //sout | i | " " | area; 210 211 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment 211 212 abort( "memalign/free bad alignment : memalign(%d,%d) = %p", (int)a, (int)s, area ); … … 222 223 // initial N byte allocation 223 224 char * area = (char *)calloc( 5, i ); 224 if ( area == 0 p) abort( "calloc/realloc/free out of memory" );225 if ( area == 0 ) abort( "calloc/realloc/free out of memory" ); 225 226 if ( area[0] != '\0' || area[i - 1] != '\0' || 226 227 area[malloc_usable_size( area ) - 1] != '\0' || … … 230 231 for ( s; i ~ 256 * 1024 ~ 26 ) { // start at initial memory request 231 232 area = (char *)realloc( area, s ); // attempt to reuse storage 232 if ( area == 0 p) abort( "calloc/realloc/free out of memory" );233 if ( area == 0 ) abort( "calloc/realloc/free out of memory" ); 233 234 if ( area[0] != '\0' || area[s - 1] != '\0' || 234 235 area[malloc_usable_size( area ) - 1] != '\0' || … … 244 245 size_t s = i + default_mmap_start(); // cross over point 245 246 char * area = (char *)calloc( 1, s ); 246 if ( area == 0 p) abort( "calloc/realloc/free out of memory" );247 if ( area == 0 ) abort( "calloc/realloc/free out of memory" ); 247 248 if ( area[0] != '\0' || area[s - 1] != '\0' || 248 249 area[malloc_usable_size( area ) - 1] != '\0' || … … 252 253 for ( r; i ~ 256 * 1024 ~ 26 ) { // start at initial memory request 253 254 area = (char *)realloc( area, r ); // attempt to reuse storage 254 if ( area == 0 p) abort( "calloc/realloc/free out of memory" );255 if ( area == 0 ) abort( "calloc/realloc/free out of memory" ); 255 256 if ( area[0] != '\0' || area[r - 1] != '\0' || 256 257 area[malloc_usable_size( area ) - 1] != '\0' || … … 262 263 // check memalign/realloc/free 263 264 264 amount = 2;265 size_t amount = 2; 265 266 for ( a; libAlign() ~= limit ~ a ) { // generate powers of 2 266 267 // initial N byte allocation 267 268 char * area = (char *)memalign( a, amount ); // aligned N-byte allocation 268 if ( area == 0 p) abort( "memalign/realloc/free out of memory" ); // no storage ?269 //sout | alignments[a] | area;269 if ( area == 0 ) abort( "memalign/realloc/free out of memory" ); // no storage ? 270 //sout | alignments[a] | " " | area; 270 271 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment 271 272 abort( "memalign/realloc/free bad alignment : memalign(%d,%d) = %p", (int)a, (int)amount, area ); … … 277 278 if ( area[0] != '\345' || area[s - 2] != '\345' ) abort( "memalign/realloc/free corrupt storage" ); 278 279 area = (char *)realloc( area, s ); // attempt to reuse storage 279 if ( area == 0 p) abort( "memalign/realloc/free out of memory" ); // no storage ?280 //sout | i | area;280 if ( area == 0 ) abort( "memalign/realloc/free out of memory" ); // no storage ? 281 //sout | i | " " | area; 281 282 if ( (size_t)area % a != 0 ) { // check for initial alignment 282 283 abort( "memalign/realloc/free bad alignment %p", area ); … … 293 294 for ( s; 1 ~ limit ) { // allocation of size 0 can return null 294 295 char * area = (char *)cmemalign( a, 1, s ); 295 if ( area == 0 p) abort( "cmemalign/free out of memory" );296 //sout | i | area;296 if ( area == 0 ) abort( "cmemalign/free out of memory" ); 297 //sout | i | " " | area; 297 298 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment 298 299 abort( "cmemalign/free bad alignment : cmemalign(%d,%d) = %p", (int)a, s, area ); … … 312 313 // initial N byte allocation 313 314 char * area = (char *)cmemalign( a, 1, amount ); // aligned N-byte allocation 314 if ( area == 0 p) abort( "cmemalign/realloc/free out of memory" ); // no storage ?315 //sout | alignments[a] | area;315 if ( area == 0 ) abort( "cmemalign/realloc/free out of memory" ); // no storage ? 316 //sout | alignments[a] | " " | area; 316 317 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment 317 318 abort( "cmemalign/realloc/free bad alignment : cmemalign(%d,%d) = %p", (int)a, (int)amount, area ); … … 326 327 if ( area[0] != '\345' || area[s - 2] != '\345' ) abort( "cmemalign/realloc/free corrupt storage2" ); 327 328 area = (char *)realloc( area, s ); // attempt to reuse storage 328 if ( area == 0 p) abort( "cmemalign/realloc/free out of memory" ); // no storage ?329 //sout | i | area;329 if ( area == 0 ) abort( "cmemalign/realloc/free out of memory" ); // no storage ? 330 //sout | i | " " | area; 330 331 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment 331 332 abort( "cmemalign/realloc/free bad alignment %p", area ); … … 338 339 free( area ); 339 340 } // for 340 341 // check memalign/realloc with align/free342 343 amount = 2;344 for ( a; libAlign() ~= limit ~ a ) { // generate powers of 2345 // initial N byte allocation346 char * area = (char *)memalign( a, amount ); // aligned N-byte allocation347 if ( area == 0p ) abort( "memalign/realloc with align/free out of memory" ); // no storage ?348 //sout | alignments[a] | area | endl;349 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment350 abort( "memalign/realloc with align/free bad alignment : memalign(%d,%d) = %p", (int)a, (int)amount, area );351 } // if352 area[0] = '\345'; area[amount - 2] = '\345'; // fill first/penultimate byte353 354 // Do not start this loop index at 0 because realloc of 0 bytes frees the storage.355 for ( s; amount ~ 256 * 1024 ) { // start at initial memory request356 if ( area[0] != '\345' || area[s - 2] != '\345' ) abort( "memalign/realloc/free corrupt storage" );357 area = (char *)realloc( area, a * 2, s ); // attempt to reuse storage358 if ( area == 0p ) abort( "memalign/realloc with align/free out of memory" ); // no storage ?359 //sout | i | area | endl;360 if ( (size_t)area % a * 2 != 0 ) { // check for initial alignment361 abort( "memalign/realloc with align/free bad alignment %p", area );362 } // if363 area[s - 1] = '\345'; // fill last byte364 } // for365 free( area );366 } // for367 368 // check cmemalign/realloc with align/free369 370 amount = 2;371 for ( size_t a = libAlign() + libAlign(); a <= limit; a += a ) { // generate powers of 2372 // initial N byte allocation373 char *area = (char *)cmemalign( a, 1, amount ); // aligned N-byte allocation374 if ( area == 0p ) abort( "cmemalign/realloc with align/free out of memory" ); // no storage ?375 //sout | alignments[a] | area | endl;376 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment377 abort( "cmemalign/realloc with align/free bad alignment : cmemalign(%d,%d) = %p", (int)a, (int)amount, area );378 } // if379 if ( area[0] != '\0' || area[amount - 1] != '\0' ||380 area[malloc_usable_size( area ) - 1] != '\0' ||381 ! malloc_zero_fill( area ) ) abort( "cmemalign/realloc with align/free corrupt storage1" );382 area[0] = '\345'; area[amount - 2] = '\345'; // fill first/penultimate byte383 384 // Do not start this loop index at 0 because realloc of 0 bytes frees the storage.385 for ( int s = amount; s < 256 * 1024; s += 1 ) { // start at initial memory request386 if ( area[0] != '\345' || area[s - 2] != '\345' ) abort( "cmemalign/realloc with align/free corrupt storage2" );387 area = (char *)realloc( area, a * 2, s ); // attempt to reuse storage388 if ( area == 0p ) abort( "cmemalign/realloc with align/free out of memory" ); // no storage ?389 //sout | i | area | endl;390 if ( (size_t)area % a * 2 != 0 || malloc_alignment( area ) != a * 2 ) { // check for initial alignment391 abort( "cmemalign/realloc with align/free bad alignment %p %jd %jd", area, malloc_alignment( area ), a * 2 );392 } // if393 if ( area[s - 1] != '\0' || area[s - 1] != '\0' ||394 area[malloc_usable_size( area ) - 1] != '\0' ||395 ! malloc_zero_fill( area ) ) abort( "cmemalign/realloc/free corrupt storage3" );396 area[s - 1] = '\345'; // fill last byte397 } // for398 free( area );399 } // for400 401 341 //sout | "worker" | thisTask() | "successful completion"; 402 342 } // Worker main -
tests/linking/withthreads.cfa
r2fa5bd2 raca6a54c 34 34 // Local Variables: // 35 35 // tab-width: 4 // 36 // compile-command: "cfa withthreads.cfa" //36 // compile-command: "cfa nothreads.cfa" // 37 37 // End: // -
tests/raii/dtor-early-exit.cfa
r2fa5bd2 raca6a54c 217 217 } 218 218 219 void i() {220 // potential loop221 for() {222 if(true) continue;223 int t = 0;224 }225 }226 227 219 // TODO: implement __label__ and uncomment these lines 228 220 void computedGoto() { -
tests/references.cfa
r2fa5bd2 raca6a54c 119 119 f( 3, a + b, (S){ 1.0, 7.0 }, (int [3]){ 1, 2, 3 } ); // two rvalue to reference 120 120 } 121 122 {123 int a = 3;124 int *p = &a;125 asm (126 "incl %[p]\n\t"127 : [p] "+m" (*p)128 );129 printf("%d\n", a);130 }131 121 } 132 122 -
tests/test.py
r2fa5bd2 raca6a54c 10 10 import tempfile 11 11 import time 12 13 import os14 import psutil15 import signal16 12 17 13 ################################################################################ … … 225 221 make('clean', output_file=subprocess.DEVNULL, error=subprocess.DEVNULL) 226 222 227 # since python prints stacks by default on a interrupt, redo the interrupt handling to be silent228 def worker_init():229 def sig_int(signal_num, frame):230 pass231 232 signal.signal(signal.SIGINT, sig_int)233 234 223 # create the executor for our jobs and handle the signal properly 235 pool = multiprocessing.Pool(jobs , worker_init)224 pool = multiprocessing.Pool(jobs) 236 225 237 226 failed = False 238 239 def stop(x, y):240 print("Tests interrupted by user", file=sys.stderr)241 sys.exit(1)242 signal.signal(signal.SIGINT, stop)243 227 244 228 # for each test to run -
tests/time.cfa
r2fa5bd2 raca6a54c 10 10 // Created On : Tue Mar 27 17:24:56 2018 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Nov 29 23:05:30 201913 // Update Count : 2 412 // Last Modified On : Thu Dec 20 23:09:21 2018 13 // Update Count : 23 14 14 // 15 15 … … 20 20 Duration d1 = 3`h, d2 = 2`s, d3 = 3.375`s, d4 = 12`s, d5 = 1`s + 10_000`ns; 21 21 sout | d1 | d2 | d3 | d4 | d5; 22 int i; 22 23 d1 = 0; 23 24 sout | d1 | d2 | d3;
Note:
See TracChangeset
for help on using the changeset viewer.