Changeset 68f0c4e for libcfa/src/stdlib.hfa
- Timestamp:
- Sep 1, 2020, 8:05:48 PM (3 years ago)
- Branches:
- arm-eh, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 70cab43
- Parents:
- d3aa64f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/stdlib.hfa
rd3aa64f r68f0c4e 43 43 //--------------------------------------- 44 44 45 // Macro because of returns46 #define $VAR_ALLOC( allocation, alignment ) \47 if ( _Alignof(T) <= libAlign() ) return (T *)(void *)allocation( (size_t)sizeof(T) ); /* C allocation */ \48 else return (T *)alignment( _Alignof(T), sizeof(T) )49 50 45 #define $ARRAY_ALLOC( allocation, alignment, dim ) \ 51 46 if ( _Alignof(T) <= libAlign() ) return (T *)(void *)allocation( dim, (size_t)sizeof(T) ); /* C allocation */ \ 52 47 else return (T *)alignment( _Alignof(T), dim, sizeof(T) ) 53 48 54 #define $RE_SPECIALS( ptr, size, allocation, alignment ) \55 if ( unlikely( size == 0 ) || unlikely( ptr == 0p ) ) { \56 if ( unlikely( size == 0 ) ) free( ptr ); \57 $VAR_ALLOC( malloc, memalign ); \58 } /* if */59 60 49 static inline forall( dtype T | sized(T) ) { 61 50 // Cforall safe equivalents, i.e., implicit size specification 62 51 63 52 T * malloc( void ) { 64 $VAR_ALLOC( malloc, memalign ); 53 if ( _Alignof(T) <= libAlign() ) return (T *)(void *)malloc( (size_t)sizeof(T) ); /* C allocation */ 54 else return (T *)memalign( _Alignof(T), sizeof(T) ); 65 55 } // malloc 66 56 … … 74 64 75 65 T * resize( T * ptr, size_t size ) { // CFA resize, eliminate return-type cast 76 $RE_SPECIALS( ptr, size, malloc, memalign );77 66 if ( _Alignof(T) <= libAlign() ) return (T *)(void *)resize( (void *)ptr, size ); // CFA resize 78 67 else return (T *)(void *)resize( (void *)ptr, _Alignof(T), size ); // CFA resize … … 80 69 81 70 T * realloc( T * ptr, size_t size ) { // CFA realloc, eliminate return-type cast 82 $RE_SPECIALS( ptr, size, malloc, memalign );83 71 if ( _Alignof(T) <= libAlign() ) return (T *)(void *)realloc( (void *)ptr, size ); // C realloc 84 72 else return (T *)(void *)realloc( (void *)ptr, _Alignof(T), size ); // CFA realloc … … 188 176 size_t size = sizeof(T); 189 177 size_t copy_end = 0; 190 191 178 if(Resize) { 192 ptr = (T*) (void *) resize( (int *)Resize, Align, Dim * size ); 179 //printf("1. $alloc_internal got: %p %p %lu %lu\n", Resize, Realloc, Align, Dim); // these prints are temporary 180 ptr = (T*) (void *) resize( (void *)Resize, Align, Dim * size ); 193 181 } else if (Realloc) { 194 182 if (Fill.tag != '0') copy_end = min(malloc_size( Realloc ), Dim * size); 195 ptr = (T*) (void *) realloc( (int *)Realloc, Align, Dim * size ); 183 //printf("2. $alloc_internal got: %p %p %lu %lu\n", Resize, Realloc, Align, Dim); 184 ptr = (T*) (void *) realloc( (void *)Realloc, Align, Dim * size ); 196 185 } else { 186 //printf("3. $alloc_internal got: %p %p %lu %lu\n", Resize, Realloc, Align, Dim); 197 187 ptr = (T*) (void *) memalign( Align, Dim * size ); 198 188 }
Note: See TracChangeset
for help on using the changeset viewer.