Changes in / [e1056381:ed12051]
- Files:
-
- 3 added
- 4 deleted
- 13 edited
-
libcfa/prelude/Makefile.in (modified) (3 diffs)
-
libcfa/src/Makefile.am (modified) (1 diff)
-
libcfa/src/Makefile.in (modified) (1 diff)
-
libcfa/src/bitmanip.hfa (modified) (2 diffs)
-
libcfa/src/exception.c (modified) (5 diffs)
-
tests/.expect/alloc.txt (modified) (1 diff)
-
tests/.expect/bitmanip.x64.txt (added)
-
tests/.expect/bitmanip.x86.txt (added)
-
tests/.expect/bitmanip1.x64.txt (deleted)
-
tests/.expect/bitmanip2.x64.txt (deleted)
-
tests/alloc.cfa (modified) (3 diffs)
-
tests/bitmanip.cfa (added)
-
tests/bitmanip1.cfa (deleted)
-
tests/bitmanip2.cfa (deleted)
-
tests/exceptions/.expect/interact.txt (modified) (1 diff)
-
tests/exceptions/.expect/resume.txt (modified) (1 diff)
-
tests/exceptions/.expect/terminate.txt (modified) (1 diff)
-
tests/exceptions/interact.cfa (modified) (2 diffs)
-
tests/exceptions/resume.cfa (modified) (1 diff)
-
tests/exceptions/terminate.cfa (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/prelude/Makefile.in
re1056381 red12051 1 # Makefile.in generated by automake 1.1 5from Makefile.am.1 # Makefile.in generated by automake 1.16.1 from Makefile.am. 2 2 # @configure_input@ 3 3 4 # Copyright (C) 1994-201 4Free Software Foundation, Inc.4 # Copyright (C) 1994-2018 Free Software Foundation, Inc. 5 5 6 6 # This Makefile.in is free software; the Free Software Foundation … … 331 331 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ 332 332 *) \ 333 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__ depfiles_maybe)'; \334 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__ depfiles_maybe);; \333 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ 334 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ 335 335 esac; 336 336 … … 377 377 378 378 379 distdir: $(DISTFILES) 379 distdir: $(BUILT_SOURCES) 380 $(MAKE) $(AM_MAKEFLAGS) distdir-am 381 382 distdir-am: $(DISTFILES) 380 383 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ 381 384 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ -
libcfa/src/Makefile.am
re1056381 red12051 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 - fexceptions -pthread @ARCH_FLAGS@ @CONFIG_CFLAGS@35 AM_CFLAGS = -g -Wall -Wno-unused-function -fPIC -pthread @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
re1056381 red12051 456 456 # The built sources must not depend on the installed headers 457 457 AM_CFAFLAGS = -quiet -cfalib -I$(srcdir)/stdhdr $(if $(findstring ${gdbwaittarget}, ${@}), -XCFA --gdb) @CONFIG_CFAFLAGS@ 458 AM_CFLAGS = -g -Wall -Wno-unused-function -fPIC - fexceptions -pthread @ARCH_FLAGS@ @CONFIG_CFLAGS@458 AM_CFLAGS = -g -Wall -Wno-unused-function -fPIC -pthread @ARCH_FLAGS@ @CONFIG_CFLAGS@ 459 459 AM_CCASFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@ 460 460 @BUILDLIB_FALSE@headers_nosrc = -
libcfa/src/bitmanip.hfa
re1056381 red12051 11 11 // Created On : Sat Mar 14 18:12:27 2020 12 12 // Last Modified By : Peter A. Buhr 13 // Last Modified On : Mon Apr 6 22:17:19202014 // Update Count : 7813 // Last Modified On : Mon Mar 16 14:28:46 2020 14 // Update Count : 49 15 15 // 16 16 … … 23 23 #include <assert.h> 24 24 25 #define __bitsizeof( n ) (sizeof(n) * __CHAR_BIT__)26 27 25 static inline { 28 26 // Count leading 0 bits. 29 unsigned int leading0s( unsigned char n ) { return n != 0 ? __builtin_clz( n ) - (__bitsizeof(unsigned int) - __bitsizeof(n)) : __bitsizeof(n); }30 unsigned int leading0s( unsigned short int n ) { return n != 0 ? __builtin_clz( n ) - (__bitsizeof(unsigned int) - __bitsizeof(n)) : __bitsizeof(n); }31 unsigned int leading0s( unsigned int n ) { return n != 0 ? __builtin_clz( n ) : __bitsizeof(n); }32 unsigned int leading0s( unsigned long int n ) { return n != 0 ? __builtin_clzl( n ) : __bitsizeof(n); }33 unsigned int leading0s( unsigned long long int n ) { return n != 0 ? __builtin_clzll( n ) : __bitsizeof(n); }27 unsigned int cl0( unsigned char n ) { return n != 0 ? __builtin_clz( n ) - (sizeof(unsigned int) * __CHAR_BIT__ - sizeof(n) * __CHAR_BIT__) : sizeof(n) * __CHAR_BIT__; } 28 unsigned int cl0( unsigned short int n ) { return n != 0 ? __builtin_clz( n ) - (sizeof(unsigned int) * __CHAR_BIT__ - sizeof(n) * __CHAR_BIT__) : sizeof(n) * __CHAR_BIT__; } 29 unsigned int cl0( unsigned int n ) { return n != 0 ? __builtin_clz( n ) : sizeof(n) * __CHAR_BIT__; } 30 unsigned int cl0( unsigned long int n ) { return n != 0 ? __builtin_clzl( n ) : sizeof(n) * __CHAR_BIT__; } 31 unsigned int cl0( unsigned long long int n ) { return n != 0 ? __builtin_clzll( n ) : sizeof(n) * __CHAR_BIT__; } 34 32 35 33 // Count trailing 0 bits. 36 unsigned int trailing0s( unsigned char n ) { return n != 0 ? __builtin_ctz( n ) : __bitsizeof(n); }37 unsigned int trailing0s( unsigned short int n ) { return n != 0 ? __builtin_ctz( n ) : __bitsizeof(n); }38 unsigned int trailing0s( unsigned int n ) { return n != 0 ? __builtin_ctz( n ) : __bitsizeof(n); }39 unsigned int trailing0s( unsigned long int n ) { return n != 0 ? __builtin_ctzl( n ) : __bitsizeof(n); }40 unsigned int trailing0s( unsigned long long int n ) { return n != 0 ? __builtin_ctzll( n ) : __bitsizeof(n); }34 unsigned int ct0( unsigned char n ) { return n != 0 ? __builtin_ctz( n ) : sizeof(n) * __CHAR_BIT__; } 35 unsigned int ct0( unsigned short int n ) { return n != 0 ? __builtin_ctz( n ) : sizeof(n) * __CHAR_BIT__; } 36 unsigned int ct0( unsigned int n ) { return n != 0 ? __builtin_ctz( n ) : sizeof(n) * __CHAR_BIT__; } 37 unsigned int ct0( unsigned long int n ) { return n != 0 ? __builtin_ctzl( n ) : sizeof(n) * __CHAR_BIT__; } 38 unsigned int ct0( unsigned long long int n ) { return n != 0 ? __builtin_ctzll( n ) : sizeof(n) * __CHAR_BIT__; } 41 39 42 40 // Count all 1 bits. 43 unsigned int all1s( unsigned char n ) { return __builtin_popcount( n ); }44 unsigned int all1s( unsigned short int n ) { return __builtin_popcount( n ); }45 unsigned int all1s( unsigned int n ) { return __builtin_popcount( n ); }46 unsigned int all1s( unsigned long int n ) { return __builtin_popcountl( n ); }47 unsigned int all1s( unsigned long long int n ) { return __builtin_popcountll( n ); }41 unsigned int ca1( unsigned char n ) { return __builtin_popcount( n ); } 42 unsigned int ca1( unsigned short int n ) { return __builtin_popcount( n ); } 43 unsigned int ca1( unsigned int n ) { return __builtin_popcount( n ); } 44 unsigned int ca1( unsigned long int n ) { return __builtin_popcountl( n ); } 45 unsigned int ca1( unsigned long long int n ) { return __builtin_popcountll( n ); } 48 46 49 47 // Count all 0 bits. 50 unsigned int all0s( unsigned char n ) { return __bitsizeof(n)- __builtin_popcount( n ); }51 unsigned int all0s( unsigned short int n ) { return __bitsizeof(n)- __builtin_popcount( n ); }52 unsigned int all0s( unsigned int n ) { return __bitsizeof(n)- __builtin_popcount( n ); }53 unsigned int all0s( unsigned long int n ) { return __bitsizeof(n)- __builtin_popcountl( n ); }54 unsigned int all0s( unsigned long long int n ) { return __bitsizeof(n)- __builtin_popcountll( n ); }48 unsigned int ca0( unsigned char n ) { return sizeof(n) * __CHAR_BIT__ - __builtin_popcount( n ); } 49 unsigned int ca0( unsigned short int n ) { return sizeof(n) * __CHAR_BIT__ - __builtin_popcount( n ); } 50 unsigned int ca0( unsigned int n ) { return sizeof(n) * __CHAR_BIT__ - __builtin_popcount( n ); } 51 unsigned int ca0( unsigned long int n ) { return sizeof(n) * __CHAR_BIT__ - __builtin_popcountl( n ); } 52 unsigned int ca0( unsigned long long int n ) { return sizeof(n) * __CHAR_BIT__ - __builtin_popcountll( n ); } 55 53 56 // Find least significiant zero bit. (ffs) 57 unsigned int low0( unsigned char n ) { return __builtin_ffs( (typeof(n))~n ); } 58 unsigned int low0( unsigned short int n ) { return __builtin_ffs( (typeof(n))~n ); } 59 unsigned int low0( unsigned int n ) { return __builtin_ffs( ~n ); } 60 unsigned int low0( unsigned long int n ) { return __builtin_ffsl( ~n ); } 61 unsigned int low0( unsigned long long int n ) { return __builtin_ffsll( ~n ); } 54 // Find least significiant set bit. (ffs) 55 unsigned int fls( unsigned int n ) { return __builtin_ffs( n ); } 56 unsigned int fls( unsigned long int n ) { return __builtin_ffsl( n ); } 57 unsigned int fls( unsigned long long int n ) { return __builtin_ffsll( n ); } 62 58 63 // Find least significiant one bit. 64 unsigned int low1( unsigned int n ) { return __builtin_ffs( n ); } 65 unsigned int low1( unsigned long int n ) { return __builtin_ffsl( n ); } 66 unsigned int low1( unsigned long long int n ) { return __builtin_ffsll( n ); } 59 // Find most significiant set bit. 60 unsigned int fms( unsigned char n ) { return n != 0 ? sizeof(unsigned int) * __CHAR_BIT__ - __builtin_clz( n ) : 0; } 61 unsigned int fms( unsigned short int n ) { return n != 0 ? sizeof(unsigned int) * __CHAR_BIT__ - __builtin_clz( n ) : 0; } 62 unsigned int fms( unsigned int n ) { return n != 0 ? sizeof(n) * __CHAR_BIT__ - __builtin_clz( n ) : 0; } 63 unsigned int fms( unsigned long int n ) { return n != 0 ? sizeof(n) * __CHAR_BIT__ - __builtin_clzl( n ) : 0; } 64 unsigned int fms( unsigned long long int n ) { return n != 0 ? sizeof(n) * __CHAR_BIT__ - __builtin_clzll( n ) : 0; } 67 65 68 // Find most significiant zero bit. 69 unsigned int high0( unsigned char n ) { return n != (typeof(n))-1 ? __bitsizeof(unsigned int) - __builtin_clz( (typeof(n))~n ) : 0; } 70 unsigned int high0( unsigned short int n ) { return n != (typeof(n))-1 ? __bitsizeof(unsigned int) - __builtin_clz( (typeof(n))~n ) : 0; } 71 unsigned int high0( unsigned int n ) { return n != -1 ? __bitsizeof(n) - __builtin_clz( ~n ) : 0; } 72 unsigned int high0( unsigned long int n ) { return n != -1 ? __bitsizeof(n) - __builtin_clzl( ~n ) : 0; } 73 unsigned int high0( unsigned long long int n ) { return n != -1 ? __bitsizeof(n) - __builtin_clzll( ~n ) : 0; } 66 // Check for power of 2 67 bool pow2( unsigned long int value ) { 68 return (value & (value - 1)) == 0; // clears bits below value, rounding down to the next lower multiple of value 69 } // pow2 74 70 75 // Find most significiant one bit. 76 unsigned int high1( unsigned char n ) { return n != 0 ? __bitsizeof(unsigned int) - __builtin_clz( n ) : 0; } 77 unsigned int high1( unsigned short int n ) { return n != 0 ? __bitsizeof(unsigned int) - __builtin_clz( n ) : 0; } 78 unsigned int high1( unsigned int n ) { return n != 0 ? __bitsizeof(n) - __builtin_clz( n ) : 0; } 79 unsigned int high1( unsigned long int n ) { return n != 0 ? __bitsizeof(n) - __builtin_clzl( n ) : 0; } 80 unsigned int high1( unsigned long long int n ) { return n != 0 ? __bitsizeof(n) - __builtin_clzll( n ) : 0; } 71 // Returns value aligned at the floor of align. 72 unsigned long int floor( unsigned long int value, unsigned long int align ) { 73 assert( pow2( align ) ); 74 return value & -align; // clear bits above or equal to align, giving value % align 75 } // floor 81 76 82 // Check for power of 2, clears bits below value, rounding down to the next lower multiple of value. 83 bool is_pow2( int value ) { return (value & (value - 1)) == 0; } 84 bool is_pow2( unsigned long long int value ) { return (value & (value - 1)) == 0; } 85 86 // Returns value aligned at the floor of align, clear bits above or equal to align, giving value % align. 87 unsigned int floor2( unsigned int value, unsigned int align ) { assert( is_pow2( align ) ); return value & -align; } 88 unsigned long long int floor2( unsigned long long int value, unsigned long long int align ) { assert( is_pow2( align ) ); return value & -align; } 89 90 unsigned int floor( unsigned int value, unsigned int align ) { return value / align * align; } 91 unsigned long long int floor( unsigned long long int value, unsigned long long int align ) { return value / align * align; } 92 93 // Returns value aligned at the ceiling of align, negate, round down, negate is the same as round up. 94 unsigned int ceiling2( unsigned int value, unsigned int align ) { assert( is_pow2( align ) ); return -floor2( -value, align ); } 95 unsigned long long int ceiling2( unsigned long long int value, unsigned long long int align ) { assert( is_pow2( align ) ); return -floor2( -value, align ); } 96 97 unsigned int ceiling( unsigned int value, unsigned int align ) { return (value + (align - 1)) / align; } 98 unsigned long long int ceiling( unsigned long long int value, unsigned long long int align ) { return (value + (align - 1)) / align; } 99 } // distribution 77 // Returns value aligned at the ceiling of align. 78 unsigned long int ceiling( unsigned long int value, unsigned long int align ) { 79 assert( pow2( align ) ); 80 return -floor( -value, align ); // negate, round down, negate is the same as round up 81 } // ceiling 82 } 100 83 101 84 // Local Variables: // -
libcfa/src/exception.c
re1056381 red12051 10 10 // Created On : Mon Jun 26 15:13:00 2017 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Mon Apr 06 14:40:00 202013 // Update Count : 1 512 // Last Modified On : Fri Apr 03 11:57:00 2020 13 // Update Count : 14 14 14 // 15 15 … … 75 75 // RESUMPTION ================================================================ 76 76 77 static void reset_top_resume(struct __cfaehm_try_resume_node ** store) {78 this_exception_context()->top_resume = *store;79 }80 81 77 void __cfaehm_throw_resume(exception_t * except) { 82 78 struct exception_context_t * context = this_exception_context(); … … 84 80 __cfaabi_dbg_print_safe("Throwing resumption exception\n"); 85 81 86 __attribute__((cleanup(reset_top_resume)))87 82 struct __cfaehm_try_resume_node * original_head = context->top_resume; 88 83 struct __cfaehm_try_resume_node * current = context->top_resume; … … 91 86 context->top_resume = current->next; 92 87 if (current->handler(except)) { 88 context->top_resume = original_head; 93 89 return; 94 90 } … … 96 92 97 93 __cfaabi_dbg_print_safe("Unhandled exception\n"); 94 context->top_resume = original_head; 98 95 99 96 // Fall back to termination: -
tests/.expect/alloc.txt
re1056381 red12051 35 35 CFA realloc array alloc, fill 36 36 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 37 CFA realloc array alloc, 5 38 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 0xdededede 39 CFA realloc array alloc, 5 40 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 41 CFA realloc array alloc, 5 42 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 37 43 38 44 C memalign 42 42.5 -
tests/alloc.cfa
re1056381 red12051 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 : 42 812 // Last Modified On : Wed Apr 1 10:58:35 2020 13 // Update Count : 424 14 14 // 15 15 … … 151 151 ip = alloc_set( ip, 3 * dim, fill ); // CFA realloc array alloc, fill 152 152 printf( "CFA realloc array alloc, fill\n" ); 153 for ( i; 3 * dim ) { printf( "%#x ", ip[i] );; } 154 printf( "\n" ); 155 // do not free 156 157 ip = alloc_set( ip, 3 * dim, 5 ); // CFA realloc array alloc, 5 158 printf( "CFA realloc array alloc, 5\n" ); 153 159 for ( i; 3 * dim ) { printf( "%#x ", ip[i] ); } 154 printf( "\n" );155 // do not free156 #if 0 // FIX ME157 ip = alloc_set( ip, 5 * dim, 5 ); // CFA realloc array alloc, 5158 printf( "CFA realloc array alloc, 5\n" );159 for ( i; 5 * dim ) { printf( "%#x ", ip[i] ); }160 160 printf( "\n" ); 161 161 // do not free … … 167 167 // do not free 168 168 169 ip = alloc_set( ip, 5* dim, 5 ); // CFA realloc array alloc, 5169 ip = alloc_set( ip, 3 * dim, 5 ); // CFA realloc array alloc, 5 170 170 printf( "CFA realloc array alloc, 5\n" ); 171 for ( i; 5 * dim ) { printf( "%#x ", ip[i] ); }172 printf( "\n" ); 173 #endif // 0 174 free( ip ); 171 for ( i; 3 * dim ) { printf( "%#x ", ip[i] );; } 172 printf( "\n" ); 173 free( ip ); 174 175 175 176 176 // resize, non-array types -
tests/exceptions/.expect/interact.txt
re1056381 red12051 14 14 resumption catch, will terminate 15 15 inner termination catch 16 17 throwing resume moon18 resumption moon catch, will terminate19 termination catch20 throwing resume star21 resumption star catch -
tests/exceptions/.expect/resume.txt
re1056381 red12051 25 25 caught second exception 26 26 recaught first exception 27 28 inner catch29 inner catch30 outer catch -
tests/exceptions/.expect/terminate.txt
re1056381 red12051 24 24 caught second exception 25 25 recaught first exception 26 27 inner catch28 outer catch -
tests/exceptions/interact.cfa
re1056381 red12051 86 86 printf("outer terminate catch (error)\n"); 87 87 } 88 #if 0 88 89 printf("\n"); 89 90 … … 110 111 printf("outermost catch (error)\n"); 111 112 } 113 #endif 112 114 } -
tests/exceptions/resume.cfa
re1056381 red12051 99 99 printf("caught second exception (bad location)\n"); 100 100 } 101 printf("\n");102 103 // Check successive operations.104 try {105 try {106 THROW_RESUME(&(zen){});107 THROW_RESUME(&(zen){});108 } catchResume (zen *) {109 printf("inner catch\n");110 }111 THROW_RESUME(&(zen){});112 } catchResume (zen *) {113 printf("outer catch\n");114 }115 101 } -
tests/exceptions/terminate.cfa
re1056381 red12051 99 99 printf("caught second exception (bad location)\n"); 100 100 } 101 printf("\n");102 103 // Check successive operations.104 try {105 try {106 THROW(&(zen){});107 THROW(&(zen){});108 } catch (zen *) {109 printf("inner catch\n");110 }111 THROW(&(zen){});112 } catch (zen *) {113 printf("outer catch\n");114 }115 101 }
Note:
See TracChangeset
for help on using the changeset viewer.