Changes in / [9617533:447b0d2b]
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/man/cfa.1
r9617533 r447b0d2b 11 11 .\" Created On : Wed Jul 26 22:34:47 2017 12 12 .\" Last Modified By : Peter A. Buhr 13 .\" Last Modified On : Wed Sep 2 17:59:53 202014 .\" Update Count : 7813 .\" Last Modified On : Thu Jul 27 10:29:29 2017 14 .\" Update Count : 44 15 15 .\" 16 16 .\" nroff -man cfa.1 … … 23 23 .ds Cf "Cforall 24 24 .\" 25 .TH CFA 1 "2020-09-2" cfa-\*(Mg "\*(Cf Project"25 .TH cfa 1 2017-07-27 cfa-\*(Mg 26 26 .SH NAME 27 cfa \- \*(Cf project translator and runtime library to enhance C27 cfa \- \*(Cf Translator and Runtime Library 28 28 .SH SYNOPSIS 29 cfa [cfa/gcc-options] 30 [cfa/c source-files] 31 [assembler/loader files] 29 cfa [gcc-options] [C/\*(Cf source-files] [assembler/loader files] 32 30 .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 35 31 The cfa command compiles C and \*(Cf source files and links C/\*(Cf object 36 32 files named on the command line. … … 38 34 The cfa command introduces a translator pass over the specified source files 39 35 after the C preprocessor but before the C compilation. The translator converts 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. 36 new \*(Cf constructs into C statements. The cfa command also provides the 37 runtime library, which is linked with each \*(Cf application. 43 38 44 39 The command line options depend on the particular C compiler used (gcc/clang 45 40 supported). As with most C compilers, the output is sent to the file a.out(5) 46 41 unless the -o option is present on the command line. See the reference pages 47 for gcc(1) for more information on command line options.42 for gcc(1) for more information. 48 43 .SH OPTIONS 49 44 When multiple conflicting options appear on the command line, e.g., … … 55 50 All of the options available to the gcc compiler are available to the cfa 56 51 translator. The following gcc flags are implicitly turned on: 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. 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. 65 56 .LP 66 57 The following additional options are available: 67 .IP "-CFA"358 .IP -CFA 3 68 59 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. 69 60 The generated code starts with the standard \*(Cf prelude. 70 .IP "-debug"61 .IP -debug 71 62 The program is linked with the debugging version of the runtime system. 72 63 The debug version performs runtime checks to help during the debugging phase of a \*(Cf program, but can substantially slow program execution. 73 64 The runtime checks should only be removed after the program is completely debugged. 74 65 .B This option is the default. 75 .IP "-nodebug"66 .IP -nodebug 76 67 The program is linked with the non-debugging version of the runtime system, so the execution of the program is faster. 77 68 .I However, no runtime checks or asserts are performed so errors usually result in abnormal program behaviour or termination. 78 .IP "-help"69 .IP -help 79 70 Information about the set of \*(Cf compilation flags is printed. 80 .IP "-nohelp"71 .IP -nohelp 81 72 Information about the set of \*(Cf compilation flags is not printed. 82 73 .B This option is the default. 83 .IP "-quiet"74 .IP -quiet 84 75 The \*(Cf compilation message is not printed at the beginning of a compilation. 85 .IP "-noquiet"76 .IP -noquiet 86 77 The \*(Cf compilation message is printed at the beginning of a compilation. 87 78 .B This option is the default. … … 90 81 available. These variables allow conditional compilation of programs that must 91 82 work differently in these situations. 92 .IP "__CFA_MAJOR__"383 .IP __CFA_MAJOR__ 3 93 84 is available during preprocessing and its value is the major version number of \*(Cf. 94 .IP "__CFA_MINOR__"85 .IP __CFA_MINOR__ 95 86 is available during preprocessing and its value is the minor version number of \*(Cf. 96 .IP "__CFA_PATCH__"87 .IP __CFA_PATCH__ 97 88 is available during preprocessing and its value is the patch level number of \*(Cf. 98 89 .IP "__CFA__, __CFORALL__, and __cforall" 99 90 are always available during preprocessing and have no value. 100 .IP "__CFA_DEBUG__"91 .IP __CFA_DEBUG__ 101 92 is available during preprocessing if the -debug compilation option is 102 93 specified. … … 125 116 .SH REFERENCES 126 117 .HP 3 127 .I \*(Cf Home Page 118 \*(Cf Reference and Rational Manual 128 119 .br 129 http s://cforall.uwaterloo.ca120 http://plg.uwaterloo.ca/~cforall/refrat.pdf 130 121 .HP 131 122 .I \*(Cf User Manual 132 123 .br 133 https://cforall.uwaterloo.ca/doc/user.pdf 134 .SH BUILDS 135 Nightly builds are available here https://cforall.uwaterloo.ca/jenkins 124 http://plg.uwaterloo.ca/~cforall/user.pdf 136 125 .SH BUGS 137 Bugs reportss are available here https://cforall.uwaterloo.ca/trac126 Bugs should be reported to trac@plg.cs.uwaterloo.ca. 138 127 .SH COPYRIGHT 139 128 \*(Cf is covered under the licence agreement in the distribution. 140 129 .SH AUTHORS 141 130 Andrew Beach, Richard Bilson, Peter A. Buhr, Thierry Delisle, Glen Ditchfield, 142 Rodolfo G. Esteves, Aaron Moss, Rob Schluntz , Mubeen Zulfiqar131 Rodolfo G. Esteves, Aaron Moss, Rob Schluntz -
driver/cfa.cc
r9617533 r447b0d2b 10 10 // Created On : Tue Aug 20 13:44:49 2002 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Sep 2 17:59:20202013 // Update Count : 43 812 // Last Modified On : Thu Aug 20 23:43:59 2020 13 // Update Count : 436 14 14 // 15 15 … … 437 437 #endif // __x86_64__ 438 438 args[nargs++] = "-ldl"; 439 args[nargs++] = "-lrt"; 439 440 args[nargs++] = "-lm"; 440 441 } // if -
libcfa/src/heap.cfa
r9617533 r447b0d2b 10 10 // Created On : Tue Dec 19 21:58:35 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T hu Sep 3 16:22:54202013 // Update Count : 9 4312 // Last Modified On : Tue Sep 1 21:58:36 2020 13 // Update Count : 927 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) 31 33 32 34 static bool traceHeap = false; … … 954 956 955 957 headers( "realloc", naddr, header, freeElem, bsize, oalign ); 956 memcpy( naddr, oaddr, min( osize, size ) ); // copy bytes958 memcpy( naddr, oaddr, MIN( osize, size ) ); // copy bytes 957 959 free( oaddr ); 958 960 … … 1231 1233 } // if 1232 1234 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 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; 1265 1252 } // if 1266 1253 } // if … … 1319 1306 1320 1307 headers( "realloc", naddr, header, freeElem, bsize, oalign ); 1321 memcpy( naddr, oaddr, min( osize, size ) ); // copy bytes1308 memcpy( naddr, oaddr, MIN( osize, size ) ); // copy bytes 1322 1309 free( oaddr ); 1323 1310
Note: See TracChangeset
for help on using the changeset viewer.