Changes in / [447b0d2b:9617533]
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/man/cfa.1
r447b0d2b r9617533 11 11 .\" Created On : Wed Jul 26 22:34:47 2017 12 12 .\" Last Modified By : Peter A. Buhr 13 .\" Last Modified On : Thu Jul 27 10:29:29 201714 .\" Update Count : 4413 .\" Last Modified On : Wed Sep 2 17:59:53 2020 14 .\" Update Count : 78 15 15 .\" 16 16 .\" nroff -man cfa.1 … … 23 23 .ds Cf "Cforall 24 24 .\" 25 .TH cfa 1 2017-07-27 cfa-\*(Mg25 .TH CFA 1 "2020-09-2" cfa-\*(Mg "\*(Cf Project" 26 26 .SH NAME 27 cfa \- \*(Cf Translator and Runtime Library27 cfa \- \*(Cf project translator and runtime library to enhance C 28 28 .SH SYNOPSIS 29 cfa [gcc-options] [C/\*(Cf source-files] [assembler/loader files] 29 cfa [cfa/gcc-options] 30 [cfa/c source-files] 31 [assembler/loader files] 30 32 .SH DESCRIPTION 33 \*(Cf (C-for-all) is an open-source project extending ISO C with modern safety and productivity features, while still ensuring backwards compatibility with C and its programmers. 34 31 35 The cfa command compiles C and \*(Cf source files and links C/\*(Cf object 32 36 files named on the command line. … … 34 38 The cfa command introduces a translator pass over the specified source files 35 39 after the C preprocessor but before the C compilation. The translator converts 36 new \*(Cf constructs into C statements. The cfa command also provides the 37 runtime library, which is linked with each \*(Cf application. 40 new \*(Cf constructs into C statements. The cfa command also provides a fully 41 concurrent (user-level threads) runtime library, which is linked with the 42 \*(Cf application. 38 43 39 44 The command line options depend on the particular C compiler used (gcc/clang 40 45 supported). As with most C compilers, the output is sent to the file a.out(5) 41 46 unless the -o option is present on the command line. See the reference pages 42 for gcc(1) for more information .47 for gcc(1) for more information on command line options. 43 48 .SH OPTIONS 44 49 When multiple conflicting options appear on the command line, e.g., … … 50 55 All of the options available to the gcc compiler are available to the cfa 51 56 translator. The following gcc flags are implicitly turned on: 52 .IP -std=gnu99 3 53 The 1999 C standard plus GNU extensions. 54 .IP -fgnu89-inline 55 Use the traditional GNU semantics for inline routines in C99 mode, which allows inline routines in header files. 57 .IP "-std=gnu11" 3 58 The 2011 C standard plus GNU extensions. 59 .IP "-fgnu89-inline" 60 Use the traditional GNU semantics for inline routines in C11 mode, which allows inline routines in header files. 61 .IP "-imacros stdbool.h" 62 Include stdbool.h to get defines for bool/true/false. 63 .IP "-latomic -lm" 64 Provide access to double-wide CAS instruction and math library. 56 65 .LP 57 66 The following additional options are available: 58 .IP -CFA367 .IP "-CFA" 3 59 68 Only the C preprocessor and the \*(Cf translator steps are performed and the transformed program is written to standard output, which makes it possible to examine the code generated by the \*(Cf translator. 60 69 The generated code starts with the standard \*(Cf prelude. 61 .IP -debug70 .IP "-debug" 62 71 The program is linked with the debugging version of the runtime system. 63 72 The debug version performs runtime checks to help during the debugging phase of a \*(Cf program, but can substantially slow program execution. 64 73 The runtime checks should only be removed after the program is completely debugged. 65 74 .B This option is the default. 66 .IP -nodebug75 .IP "-nodebug" 67 76 The program is linked with the non-debugging version of the runtime system, so the execution of the program is faster. 68 77 .I However, no runtime checks or asserts are performed so errors usually result in abnormal program behaviour or termination. 69 .IP -help78 .IP "-help" 70 79 Information about the set of \*(Cf compilation flags is printed. 71 .IP -nohelp80 .IP "-nohelp" 72 81 Information about the set of \*(Cf compilation flags is not printed. 73 82 .B This option is the default. 74 .IP -quiet83 .IP "-quiet" 75 84 The \*(Cf compilation message is not printed at the beginning of a compilation. 76 .IP -noquiet85 .IP "-noquiet" 77 86 The \*(Cf compilation message is printed at the beginning of a compilation. 78 87 .B This option is the default. … … 81 90 available. These variables allow conditional compilation of programs that must 82 91 work differently in these situations. 83 .IP __CFA_MAJOR__392 .IP "__CFA_MAJOR__" 3 84 93 is available during preprocessing and its value is the major version number of \*(Cf. 85 .IP __CFA_MINOR__94 .IP "__CFA_MINOR__" 86 95 is available during preprocessing and its value is the minor version number of \*(Cf. 87 .IP __CFA_PATCH__96 .IP "__CFA_PATCH__" 88 97 is available during preprocessing and its value is the patch level number of \*(Cf. 89 98 .IP "__CFA__, __CFORALL__, and __cforall" 90 99 are always available during preprocessing and have no value. 91 .IP __CFA_DEBUG__100 .IP "__CFA_DEBUG__" 92 101 is available during preprocessing if the -debug compilation option is 93 102 specified. … … 116 125 .SH REFERENCES 117 126 .HP 3 118 \*(Cf Reference and Rational Manual 127 .I \*(Cf Home Page 119 128 .br 120 http ://plg.uwaterloo.ca/~cforall/refrat.pdf129 https://cforall.uwaterloo.ca 121 130 .HP 122 131 .I \*(Cf User Manual 123 132 .br 124 http://plg.uwaterloo.ca/~cforall/user.pdf 133 https://cforall.uwaterloo.ca/doc/user.pdf 134 .SH BUILDS 135 Nightly builds are available here https://cforall.uwaterloo.ca/jenkins 125 136 .SH BUGS 126 Bugs should be reported to trac@plg.cs.uwaterloo.ca.137 Bugs reportss are available here https://cforall.uwaterloo.ca/trac 127 138 .SH COPYRIGHT 128 139 \*(Cf is covered under the licence agreement in the distribution. 129 140 .SH AUTHORS 130 141 Andrew Beach, Richard Bilson, Peter A. Buhr, Thierry Delisle, Glen Ditchfield, 131 Rodolfo G. Esteves, Aaron Moss, Rob Schluntz 142 Rodolfo G. Esteves, Aaron Moss, Rob Schluntz, Mubeen Zulfiqar -
driver/cfa.cc
r447b0d2b r9617533 10 10 // Created On : Tue Aug 20 13:44:49 2002 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Aug 20 23:43:59202013 // Update Count : 43 612 // Last Modified On : Wed Sep 2 17:59:20 2020 13 // Update Count : 438 14 14 // 15 15 … … 437 437 #endif // __x86_64__ 438 438 args[nargs++] = "-ldl"; 439 args[nargs++] = "-lrt";440 439 args[nargs++] = "-lm"; 441 440 } // if -
libcfa/src/heap.cfa
r447b0d2b r9617533 10 10 // Created On : Tue Dec 19 21:58:35 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Sep 1 21:58:36202013 // Update Count : 9 2712 // Last Modified On : Thu Sep 3 16:22:54 2020 13 // Update Count : 943 14 14 // 15 15 … … 29 29 #include "math.hfa" // ceiling 30 30 #include "bitmanip.hfa" // is_pow2, ceiling2 31 32 #define MIN(x, y) (y > x ? x : y)33 31 34 32 static bool traceHeap = false; … … 956 954 957 955 headers( "realloc", naddr, header, freeElem, bsize, oalign ); 958 memcpy( naddr, oaddr, MIN( osize, size ) ); // copy bytes956 memcpy( naddr, oaddr, min( osize, size ) ); // copy bytes 959 957 free( oaddr ); 960 958 … … 1233 1231 } // if 1234 1232 1235 HeapManager.Storage.Header * header; 1236 HeapManager.FreeHeader * freeElem; 1237 size_t bsize, oalign; 1238 headers( "resize", oaddr, header, freeElem, bsize, oalign ); 1239 size_t odsize = dataStorage( bsize, oaddr, header ); // data storage available in bucket 1240 1241 if ( oalign == nalign && size <= odsize && odsize <= size * 2 ) { // <= alignment and new alignment are same, allow 50% wasted storage for smaller size 1242 header->kind.real.blockSize &= -2; // turn off 0 fill 1243 header->kind.real.size = size; // reset allocation size 1244 return oaddr; 1245 } // if 1246 if ( oalign < nalign && (uintptr_t)oaddr % nalign == 0 && oalign > libAlign() ) { // <= alignment and new alignment happens to match, and oaddr has a fake header 1247 headerAddr( oaddr )->kind.fake.alignment = nalign | 1; // update alignment (could be the same) 1248 if ( size <= odsize && odsize <= size * 2 ) { // allow 50% wasted storage for smaller size 1249 header->kind.real.blockSize &= -2; // turn off 0 fill 1250 header->kind.real.size = size; // reset allocation size 1251 return oaddr; 1233 // Attempt to reuse existing storage. 1234 HeapManager.Storage.Header * header = headerAddr( oaddr ); 1235 if ( header->kind.fake.alignment & 1 == 1 ) { // old fake header ? 1236 if ( unlikely( (uintptr_t)oaddr % nalign == 0) && // lucky match ? 1237 header->kind.fake.alignment <= nalign && // ok to leave LSB at 1 1238 nalign <= 128 ) { // not too much alignment storage wasted ? 1239 1240 HeapManager.FreeHeader * freeElem; 1241 size_t bsize, oalign; 1242 headers( "resize", oaddr, header, freeElem, bsize, oalign ); 1243 size_t odsize = dataStorage( bsize, oaddr, header ); // data storage available in bucket 1244 1245 if ( size <= odsize && odsize <= size * 2 ) { // allow 50% wasted data storage 1246 headerAddr( oaddr )->kind.fake.alignment = nalign | 1; // update alignment (could be the same) 1247 1248 header->kind.real.blockSize &= -2; // turn off 0 fill 1249 header->kind.real.size = size; // reset allocation size 1250 return oaddr; 1251 } // if 1252 } // if 1253 } else { // no old fake header 1254 if ( nalign == libAlign() ) { // no new fake header needed => try to reuse storage 1255 HeapManager.FreeHeader * freeElem; 1256 size_t bsize, oalign; 1257 headers( "resize", oaddr, header, freeElem, bsize, oalign ); 1258 size_t odsize = dataStorage( bsize, oaddr, header ); // data storage available in bucket 1259 1260 if ( size <= odsize && odsize <= size * 2 ) { // allow 50% wasted data storage 1261 header->kind.real.blockSize &= -2; // turn off 0 fill 1262 header->kind.real.size = size; // reset allocation size 1263 return oaddr; 1264 } // if 1252 1265 } // if 1253 1266 } // if … … 1306 1319 1307 1320 headers( "realloc", naddr, header, freeElem, bsize, oalign ); 1308 memcpy( naddr, oaddr, MIN( osize, size ) ); // copy bytes1321 memcpy( naddr, oaddr, min( osize, size ) ); // copy bytes 1309 1322 free( oaddr ); 1310 1323
Note: See TracChangeset
for help on using the changeset viewer.