Changes in / [5715d43:762fbc1]
- Files:
-
- 8 edited
-
driver/cfa.cc (modified) (7 diffs)
-
libcfa/src/common.hfa (modified) (2 diffs)
-
libcfa/src/heap.cfa (modified) (3 diffs)
-
libcfa/src/stdlib.hfa (modified) (5 diffs)
-
tests/.expect/minmax.txt (modified) (2 diffs)
-
tests/alloc.cfa (modified) (3 diffs)
-
tests/heap.cfa (modified) (3 diffs)
-
tests/minmax.cfa (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
driver/cfa.cc
r5715d43 r762fbc1 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 13 17:22:02202013 // Update Count : 43 512 // Last Modified On : Fri Aug 14 07:22:03 2020 13 // Update Count : 437 14 14 // 15 15 16 16 #include <iostream> 17 #include <cstdio> // perror18 #include <cstdlib> // putenv, exit19 #include <climits> // PATH_MAX20 #include <unistd.h> // execvp21 #include <string> // STL version22 #include <string.h> // strcmp23 #include <algorithm> // find17 #include <cstdio> // perror 18 #include <cstdlib> // putenv, exit 19 #include <climits> // PATH_MAX 20 #include <unistd.h> // execvp 21 #include <string> // STL version 22 #include <string.h> // strcmp 23 #include <algorithm> // find 24 24 25 25 #include <sys/types.h> … … 36 36 // #define __DEBUG_H__ 37 37 38 #define xstr(s) str(s) 39 #define str(s) #s 40 38 41 // "N__=" suffix 39 42 static string __CFA_FLAGPREFIX__( "__CFA_FLAG" ); 40 43 41 void Putenv( char * argv[], string arg ) {44 static void Putenv( char * argv[], string arg ) { 42 45 // environment variables must have unique names 43 46 static int flags = 0; … … 49 52 } // Putenv 50 53 51 // check if string has prefix 52 bool prefix( const string & arg, const string & pre ) { 54 static bool prefix( const string & arg, const string & pre ) { // check if string has prefix 53 55 return arg.substr( 0, pre.size() ) == pre; 54 56 } // prefix 55 57 56 inline bool ends_with(const string & str, const string & sfix) {58 static inline bool ends_with(const string & str, const string & sfix) { 57 59 if (sfix.size() > str.size()) return false; 58 60 return std::equal(str.rbegin(), str.rbegin() + sfix.size(), sfix.rbegin(), sfix.rend()); … … 60 62 61 63 // check if string has suffix 62 bool suffix( const string & arg ) {64 static bool suffix( const string & arg ) { 63 65 enum { NumSuffixes = 3 }; 64 66 static const string suffixes[NumSuffixes] = { "cfa", "hfa", "ifa" }; … … 70 72 } // suffix 71 73 72 73 74 static inline bool dirExists( const string & path ) { // check if directory exists 74 75 struct stat info; … … 79 80 static inline string dir(const string & path) { 80 81 return path.substr(0, path.find_last_of('/')); 81 } 82 } // dir 82 83 83 84 // Different path modes … … 118 119 } 119 120 120 121 #define xstr(s) str(s)122 #define str(s) #s123 121 124 122 int main( int argc, char * argv[] ) { -
libcfa/src/common.hfa
r5715d43 r762fbc1 10 10 // Created On : Wed Jul 11 17:54:36 2018 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Jul 12 08:02:18 201813 // Update Count : 512 // Last Modified On : Sat Aug 15 08:51:29 2020 13 // Update Count : 14 14 14 // 15 15 … … 67 67 68 68 static inline { 69 char min( char t1, char t2 ) { return t1 < t2 ? t1 : t2; } // optimization 70 intptr_t min( intptr_t t1, intptr_t t2 ) { return t1 < t2 ? t1 : t2; } // optimization 71 uintptr_t min( uintptr_t t1, uintptr_t t2 ) { return t1 < t2 ? t1 : t2; } // optimization 69 72 forall( otype T | { int ?<?( T, T ); } ) 70 73 T min( T t1, T t2 ) { return t1 < t2 ? t1 : t2; } 71 74 75 char max( char t1, char t2 ) { return t1 > t2 ? t1 : t2; } // optimization 76 intptr_t max( intptr_t t1, intptr_t t2 ) { return t1 > t2 ? t1 : t2; } // optimization 77 uintptr_t max( uintptr_t t1, uintptr_t t2 ) { return t1 > t2 ? t1 : t2; } // optimization 72 78 forall( otype T | { int ?>?( T, T ); } ) 73 79 T max( T t1, T t2 ) { return t1 > t2 ? t1 : t2; } -
libcfa/src/heap.cfa
r5715d43 r762fbc1 10 10 // Created On : Tue Dec 19 21:58:35 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Aug 9 12:23:20202013 // Update Count : 89412 // Last Modified On : Wed Aug 12 16:43:38 2020 13 // Update Count : 902 14 14 // 15 15 … … 650 650 for ( HeapManager.Storage * p = freeLists[i].freeList; p != 0p; p = p->header.kind.real.next ) { 651 651 #else 652 for ( HeapManager.Storage * p = top( freeLists[i].freeList ); p != 0p; p = (p)`next->top ) { 652 // for ( HeapManager.Storage * p = top( freeLists[i].freeList ); p != 0p; p = (p)`next->top ) { 653 for ( HeapManager.Storage * p = top( freeLists[i].freeList ); p != 0p; /* p = getNext( p )->top */) { 654 typeof(p) temp = (( p )`next)->top; // FIX ME: direct assignent fails, initialization works 655 p = temp; 653 656 #endif // BUCKETLOCK 654 657 total += size; … … 1162 1165 choose( option ) { 1163 1166 case M_TOP_PAD: 1164 heapExpand = ceiling ( value, pageSize ); return 1;1167 heapExpand = ceiling2( value, pageSize ); return 1; 1165 1168 case M_MMAP_THRESHOLD: 1166 1169 if ( setMmapStart( value ) ) return 1; -
libcfa/src/stdlib.hfa
r5715d43 r762fbc1 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Aug 11 21:11:46202013 // Update Count : 49512 // Last Modified On : Fri Aug 14 23:38:50 2020 13 // Update Count : 504 14 14 // 15 15 … … 39 39 //--------------------------------------- 40 40 41 #include "common.hfa" 42 43 //--------------------------------------- 44 41 45 // Macro because of returns 42 46 #define $VAR_ALLOC( allocation, alignment ) \ … … 152 156 } // alloc_set 153 157 154 T * alloc_set( size_t dim , const T fill[]) {155 return (T *)memcpy( (T *)alloc( dim ), fill, dim* sizeof(T) ); // initialize with fill value158 T * alloc_set( size_t dimNew, const T fill[], size_t dimOld ) { 159 return (T *)memcpy( (T *)alloc( dimNew ), fill, min( dimNew, dimOld ) * sizeof(T) ); // initialize with fill value 156 160 } // alloc_set 157 161 … … 220 224 } // alloc_align_set 221 225 222 T * alloc_align_set( size_t align, size_t dim , const T fill[]) {223 return (T *)memcpy( (T *)alloc_align( align, dim ), fill, dim* sizeof(T) );226 T * alloc_align_set( size_t align, size_t dimNew, const T fill[], size_t dimOld ) { 227 return (T *)memcpy( (T *)alloc_align( align, dimNew ), fill, min( dimNew, dimOld ) * sizeof(T) ); 224 228 } // alloc_align_set 225 229 … … 374 378 //--------------------------------------- 375 379 376 #include "common.hfa"377 378 //---------------------------------------379 380 380 extern bool threading_enabled(void) OPTIONAL_THREAD; 381 381 -
tests/.expect/minmax.txt
r5715d43 r762fbc1 1 1 char z a min a 2 signed int 4 3 min32 signed int 4 -3 min -3 3 3 unsigned int 4 3 min 3 4 signed long int 4 3 min34 signed long int 4 -3 min -3 5 5 unsigned long int 4 3 min 3 6 signed long long int 4 3 min36 signed long long int 4 -3 min -3 7 7 unsigned long long int 4 3 min 3 8 8 float 4. 3.1 min 3.1 … … 11 11 12 12 char z a max z 13 signed int 4 3 max 413 signed int 4 -3 max 4 14 14 unsigned int 4 3 max 4 15 signed long int 4 3 max 415 signed long int 4 -3 max 4 16 16 unsigned long int 4 3 max 4 17 signed long long int 4 3 max 417 signed long long int 4 -3 max 4 18 18 unsigned long long int 4 3 max 4 19 19 float 4. 3.1 max 4. -
tests/alloc.cfa
r5715d43 r762fbc1 10 10 // Created On : Wed Feb 3 07:56:22 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Apr 6 21:08:23202013 // Update Count : 4 2812 // Last Modified On : Fri Aug 14 16:59:59 2020 13 // Update Count : 430 14 14 // 15 15 … … 90 90 // do not free 91 91 92 ip1 = alloc_set( 2 * dim, ip );// CFA array alloc, fill92 ip1 = alloc_set( 2 * dim, ip, 2 * dim ); // CFA array alloc, fill 93 93 printf( "CFA array alloc, fill from array\n" ); 94 94 for ( i; 2 * dim ) { printf( "%#x %#x, ", ip[i], ip1[i] ); } … … 288 288 // do not free 289 289 290 stp1 = alloc_align_set( Alignment, dim, stp );// CFA array memalign, fill290 stp1 = alloc_align_set( Alignment, dim, stp, dim ); // CFA array memalign, fill 291 291 assert( (uintptr_t)stp % Alignment == 0 ); 292 292 printf( "CFA array alloc_align, fill array\n" ); -
tests/heap.cfa
r5715d43 r762fbc1 10 10 // Created On : Tue Nov 6 17:54:56 2018 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Aug 4 06:36:17202013 // Update Count : 5 612 // Last Modified On : Sun Aug 9 08:05:16 2020 13 // Update Count : 57 14 14 // 15 15 … … 232 232 size_t s = i + default_mmap_start(); // cross over point 233 233 char * area = (char *)calloc( 1, s ); 234 // if ( area == 0p ) abort( "calloc/realloc/free out of memory" );235 234 if ( area[0] != '\0' || area[s - 1] != '\0' || 236 235 area[malloc_size( area ) - 1] != '\0' || 237 ! malloc_zero_fill( area ) ) //abort( "calloc/realloc/free corrupt storage3" ); 238 printf( "C %zd %d %d %d %d\n", s, area[0] != '\0', area[s - 1] != '\0', area[malloc_size( area ) - 1] != '\0', ! malloc_zero_fill( area ) ); 236 ! malloc_zero_fill( area ) ) abort( "calloc/realloc/free corrupt storage3" ); 239 237 240 238 // Do not start this loop index at 0 because realloc of 0 bytes frees the storage. 241 239 for ( r; i ~ 256 * 1024 ~ 26 ) { // start at initial memory request 242 240 area = (char *)realloc( area, r ); // attempt to reuse storage 243 // if ( area == 0p ) abort( "calloc/realloc/free out of memory" );244 241 if ( area[0] != '\0' || area[r - 1] != '\0' || 245 242 area[malloc_size( area ) - 1] != '\0' || … … 255 252 // initial N byte allocation 256 253 char * area = (char *)memalign( a, amount ); // aligned N-byte allocation 257 // if ( area == 0p ) abort( "memalign/realloc/free out of memory" ); // no storage ?258 254 //sout | alignments[a] | area; 259 255 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment -
tests/minmax.cfa
r5715d43 r762fbc1 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Dec 4 21:45:31 201813 // Update Count : 5 212 // Last Modified On : Sat Aug 15 08:28:01 2020 13 // Update Count : 54 14 14 // 15 15 … … 23 23 24 24 sout | "char\t\t\t" | 'z' | ' ' | 'a' | "\tmin " | min( 'z', 'a' ); 25 sout | "signed int\t\t" | 4 | 3 | "\tmin" | min( 4,3 );25 sout | "signed int\t\t" | 4 | -3 | "\tmin" | min( 4, -3 ); 26 26 sout | "unsigned int\t\t" | 4u | 3u | "\tmin" | min( 4u, 3u ); 27 sout | "signed long int\t\t" | 4l | 3l | "\tmin" | min( 4l,3l );27 sout | "signed long int\t\t" | 4l | -3l | "\tmin" | min( 4l, -3l ); 28 28 sout | "unsigned long int\t" | 4ul | 3ul | "\tmin" | min( 4ul, 3ul ); 29 sout | "signed long long int\t" | 4ll | 3ll | "\tmin" | min( 4ll,3ll );29 sout | "signed long long int\t" | 4ll | -3ll | "\tmin" | min( 4ll, -3ll ); 30 30 sout | "unsigned long long int\t" | 4ull | 3ull | "\tmin" | min( 4ull, 3ull ); 31 31 sout | "float\t\t\t" | 4.0f | 3.1f | "\tmin" | min( 4.0f, 3.1f ); … … 36 36 37 37 sout | "char\t\t\t" | 'z' | ' ' | 'a' | "\tmax " | max( 'z', 'a' ); 38 sout | "signed int\t\t" | 4 | 3 | "\tmax" | max( 4,3 );38 sout | "signed int\t\t" | 4 | -3 | "\tmax" | max( 4, -3 ); 39 39 sout | "unsigned int\t\t" | 4u | 3u | "\tmax" | max( 4u, 3u ); 40 sout | "signed long int\t\t" | 4l | 3l | "\tmax" | max( 4l,3l );40 sout | "signed long int\t\t" | 4l | -3l | "\tmax" | max( 4l, -3l ); 41 41 sout | "unsigned long int\t" | 4ul | 3ul | "\tmax" | max( 4ul, 3ul ); 42 sout | "signed long long int\t" | 4ll | 3ll | "\tmax" | max( 4ll,3ll );42 sout | "signed long long int\t" | 4ll | -3ll | "\tmax" | max( 4ll, -3ll ); 43 43 sout | "unsigned long long int\t" | 4ull | 3ull | "\tmax" | max( 4ull, 3ull ); 44 44 sout | "float\t\t\t" | 4.0f | 3.1f | "\tmax" | max( 4.0f, 3.1f );
Note:
See TracChangeset
for help on using the changeset viewer.