- Timestamp:
- Oct 23, 2020, 9:08:09 PM (5 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- c532847
- Parents:
- 37b7d95 (diff), 3aec25f (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- libcfa
- Files:
-
- 15 edited
-
prelude/builtins.c (modified) (2 diffs)
-
src/concurrency/coroutine.cfa (modified) (4 diffs)
-
src/concurrency/coroutine.hfa (modified) (3 diffs)
-
src/concurrency/io.cfa (modified) (1 diff)
-
src/concurrency/io/call.cfa.in (modified) (1 diff)
-
src/concurrency/kernel.cfa (modified) (3 diffs)
-
src/concurrency/kernel.hfa (modified) (1 diff)
-
src/concurrency/kernel/startup.cfa (modified) (1 diff)
-
src/concurrency/kernel_private.hfa (modified) (1 diff)
-
src/concurrency/monitor.cfa (modified) (1 diff)
-
src/concurrency/snzi.hfa (modified) (1 diff)
-
src/exception.h (modified) (3 diffs)
-
src/exception.hfa (modified) (7 diffs)
-
src/limits.cfa (modified) (2 diffs)
-
src/limits.hfa (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/prelude/builtins.c
r37b7d95 re7d6968 10 10 // Created On : Fri Jul 21 16:21:03 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jul 13 21:10:02202013 // Update Count : 1 0912 // Last Modified On : Fri Oct 9 18:26:19 2020 13 // Update Count : 110 14 14 // 15 15 … … 94 94 // universal typed pointer constant 95 95 static inline forall( dtype DT ) DT * intptr( uintptr_t addr ) { return (DT *)addr; } 96 static inline forall( ftype FT ) FT * intptr( uintptr_t addr ) { return (FT *)addr; } 96 97 97 98 #if defined(__SIZEOF_INT128__) -
libcfa/src/concurrency/coroutine.cfa
r37b7d95 re7d6968 47 47 48 48 //----------------------------------------------------------------------------- 49 FORALL_DATA_INSTANCE(CoroutineCancelled, 50 (dtype coroutine_t | sized(coroutine_t)), (coroutine_t)) 49 FORALL_DATA_INSTANCE(CoroutineCancelled, (dtype coroutine_t), (coroutine_t)) 51 50 52 51 struct __cfaehm_node { … … 59 58 void mark_exception(CoroutineCancelled(T) *) {} 60 59 61 forall(dtype T | sized(T))60 forall(dtype T) 62 61 void copy(CoroutineCancelled(T) * dst, CoroutineCancelled(T) * src) { 63 62 dst->the_coroutine = src->the_coroutine; … … 77 76 exception_t * except = (exception_t *)(1 + (__cfaehm_node *)desc->cancellation); 78 77 78 // TODO: Remove explitate vtable set once trac#186 is fixed. 79 79 CoroutineCancelled(T) except; 80 except.virtual_table = &get_exception_vtable(&except); 80 81 except.the_coroutine = &cor; 81 82 except.the_exception = except; … … 91 92 92 93 // minimum feasible stack size in bytes 93 #define MinStackSize 1000 94 static const size_t MinStackSize = 1000; 94 95 extern size_t __page_size; // architecture pagesize HACK, should go in proper runtime singleton 95 96 -
libcfa/src/concurrency/coroutine.hfa
r37b7d95 re7d6968 22 22 //----------------------------------------------------------------------------- 23 23 // Exception thrown from resume when a coroutine stack is cancelled. 24 // Should not have to be be sized (see trac #196). 25 FORALL_DATA_EXCEPTION(CoroutineCancelled, 26 (dtype coroutine_t | sized(coroutine_t)), (coroutine_t)) ( 24 FORALL_DATA_EXCEPTION(CoroutineCancelled, (dtype coroutine_t), (coroutine_t)) ( 27 25 coroutine_t * the_coroutine; 28 26 exception_t * the_exception; … … 30 28 31 29 forall(dtype T) 32 void mark_exception(CoroutineCancelled(T) *);33 34 forall(dtype T | sized(T))35 30 void copy(CoroutineCancelled(T) * dst, CoroutineCancelled(T) * src); 36 31 … … 42 37 // Anything that implements this trait can be resumed. 43 38 // Anything that is resumed is a coroutine. 44 trait is_coroutine(dtype T | sized(T) 45 | is_resumption_exception(CoroutineCancelled(T)) 46 | VTABLE_ASSERTION(CoroutineCancelled, (T))) { 39 trait is_coroutine(dtype T | IS_RESUMPTION_EXCEPTION(CoroutineCancelled, (T))) { 47 40 void main(T & this); 48 41 $coroutine * get_coroutine(T & this); -
libcfa/src/concurrency/io.cfa
r37b7d95 re7d6968 134 134 int ret = 0; 135 135 if( need_sys_to_submit || need_sys_to_complete ) { 136 ret = syscall( __NR_io_uring_enter, ring.fd, to_submit, 0, flags, 0p, _NSIG / 8);136 ret = syscall( __NR_io_uring_enter, ring.fd, to_submit, 0, flags, (sigset_t *)0p, _NSIG / 8); 137 137 if( ret < 0 ) { 138 138 switch((int)errno) { -
libcfa/src/concurrency/io/call.cfa.in
r37b7d95 re7d6968 47 47 #include "kernel/fwd.hfa" 48 48 49 #if defined(CFA_HAVE_IOSQE_FIXED_FILE) && defined(CFA_HAVE_IOSQE_IO_DRAIN) && defined(CFA_HAVE_IOSQE_ASYNC) 50 #define REGULAR_FLAGS (IOSQE_FIXED_FILE | IOSQE_IO_DRAIN | IOSQE_ASYNC) 51 #elif defined(CFA_HAVE_IOSQE_FIXED_FILE) && defined(CFA_HAVE_IOSQE_ASYNC) 52 #define REGULAR_FLAGS (IOSQE_FIXED_FILE | IOSQE_ASYNC) 53 #elif defined(CFA_HAVE_IOSQE_FIXED_FILE) && defined(CFA_HAVE_IOSQE_IO_DRAIN) 54 #define REGULAR_FLAGS (IOSQE_FIXED_FILE | IOSQE_IO_DRAIN) 55 #elif defined(CFA_HAVE_IOSQE_IO_DRAIN) && defined(CFA_HAVE_IOSQE_ASYNC) 56 #define REGULAR_FLAGS (IOSQE_IO_DRAIN | IOSQE_ASYNC) 57 #elif defined(CFA_HAVE_IOSQE_FIXED_FILE) 58 #define REGULAR_FLAGS (IOSQE_FIXED_FILE) 59 #elif defined(CFA_HAVE_IOSQE_IO_DRAIN) 60 #define REGULAR_FLAGS (IOSQE_IO_DRAIN) 61 #elif defined(CFA_HAVE_IOSQE_ASYNC) 62 #define REGULAR_FLAGS (IOSQE_ASYNC) 63 #else 64 #define REGULAR_FLAGS (0) 65 #endif 66 67 #if defined(CFA_HAVE_IOSQE_IO_LINK) && defined(CFA_HAVE_IOSQE_IO_HARDLINK) 68 #define LINK_FLAGS (IOSQE_IO_LINK | IOSQE_IO_HARDLINK) 69 #elif defined(CFA_HAVE_IOSQE_IO_LINK) 70 #define LINK_FLAGS (IOSQE_IO_LINK) 71 #elif defined(CFA_HAVE_IOSQE_IO_HARDLINK) 72 #define LINK_FLAGS (IOSQE_IO_HARDLINK) 73 #else 74 #define LINK_FLAGS (0) 75 #endif 76 77 #if defined(CFA_HAVE_SPLICE_F_FD_IN_FIXED) 78 #define SPLICE_FLAGS (SPLICE_F_FD_IN_FIXED) 79 #else 80 #define SPLICE_FLAGS (0) 81 #endif 49 static const __u8 REGULAR_FLAGS = 0 50 #if defined(CFA_HAVE_IOSQE_FIXED_FILE) 51 | IOSQE_FIXED_FILE 52 #endif 53 #if defined(CFA_HAVE_IOSQE_IO_DRAIN) 54 | IOSQE_IO_DRAIN 55 #endif 56 #if defined(CFA_HAVE_IOSQE_ASYNC) 57 | IOSQE_ASYNC 58 #endif 59 ; 60 61 static const __u32 LINK_FLAGS = 0 62 #if defined(CFA_HAVE_IOSQE_IO_LINK) 63 | IOSQE_IO_LINK 64 #endif 65 #if defined(CFA_HAVE_IOSQE_IO_HARDLINK) 66 | IOSQE_IO_HARDLINK 67 #endif 68 ; 69 70 static const __u32 SPLICE_FLAGS = 0 71 #if defined(CFA_HAVE_SPLICE_F_FD_IN_FIXED) 72 | SPLICE_F_FD_IN_FIXED 73 #endif 74 ; 82 75 83 76 extern [* struct io_uring_sqe, __u32] __submit_alloc( struct __io_data & ring, __u64 data ); -
libcfa/src/concurrency/kernel.cfa
r37b7d95 re7d6968 252 252 /* paranoid */ verify( kernelTLS.this_thread == thrd_dst ); 253 253 /* paranoid */ verify( thrd_dst->context.SP ); 254 /* paranoid */ verify( thrd_dst->state != Halted ); 254 255 /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) < ((uintptr_t)__get_stack(thrd_dst->curr_cor)->base ) || thrd_dst->curr_cor == proc_cor, "ERROR : Destination $thread %p has been corrupted.\n StackPointer too small.\n", thrd_dst ); // add escape condition if we are setting up the processor 255 256 /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) > ((uintptr_t)__get_stack(thrd_dst->curr_cor)->limit) || thrd_dst->curr_cor == proc_cor, "ERROR : Destination $thread %p has been corrupted.\n StackPointer too large.\n", thrd_dst ); // add escape condition if we are setting up the processor … … 287 288 if(unlikely(thrd_dst->state == Halted)) { 288 289 // The thread has halted, it should never be scheduled/run again 289 // We may need to wake someone up here since 290 unpark( this->destroyer ); 291 this->destroyer = 0p; 290 // finish the thread 291 __thread_finish( thrd_dst ); 292 292 break RUNNING; 293 293 } … … 448 448 } 449 449 450 // KERNEL ONLY 451 void __leave_thread() { 452 /* paranoid */ verify( ! kernelTLS.preemption_state.enabled ); 453 returnToKernel(); 454 abort(); 450 extern "C" { 451 // Leave the thread monitor 452 // last routine called by a thread. 453 // Should never return 454 void __cfactx_thrd_leave() { 455 $thread * thrd = TL_GET( this_thread ); 456 $monitor * this = &thrd->self_mon; 457 458 // Lock the monitor now 459 lock( this->lock __cfaabi_dbg_ctx2 ); 460 461 disable_interrupts(); 462 463 thrd->state = Halted; 464 465 if( thrd != this->owner || this->recursion != 1) { abort( "Thread internal monitor has unbalanced recursion" ); } 466 467 // Leave the thread 468 /* paranoid */ verify( ! kernelTLS.preemption_state.enabled ); 469 returnToKernel(); 470 abort(); 471 472 // Control flow should never reach here! 473 } 455 474 } 456 475 -
libcfa/src/concurrency/kernel.hfa
r37b7d95 re7d6968 79 79 // Handle to pthreads 80 80 pthread_t kernel_thread; 81 82 // RunThread data83 // Action to do after a thread is ran84 $thread * destroyer;85 81 86 82 // Preemption data -
libcfa/src/concurrency/kernel/startup.cfa
r37b7d95 re7d6968 474 474 this.cltr = &_cltr; 475 475 full_proc = true; 476 destroyer = 0p;477 476 do_terminate = false; 478 477 preemption_alarm = 0p; -
libcfa/src/concurrency/kernel_private.hfa
r37b7d95 re7d6968 39 39 ; 40 40 41 // Block current thread andrelease/wake-up the following resources42 void __ leave_thread() __attribute__((noreturn));41 //release/wake-up the following resources 42 void __thread_finish( $thread * thrd ); 43 43 44 44 //----------------------------------------------------------------------------- -
libcfa/src/concurrency/monitor.cfa
r37b7d95 re7d6968 281 281 } 282 282 283 extern "C" { 284 // Leave the thread monitor 285 // last routine called by a thread. 286 // Should never return 287 void __cfactx_thrd_leave() { 288 $thread * thrd = TL_GET( this_thread ); 289 $monitor * this = &thrd->self_mon; 290 291 // Lock the monitor now 292 lock( this->lock __cfaabi_dbg_ctx2 ); 293 294 disable_interrupts(); 295 296 thrd->state = Halted; 297 298 /* paranoid */ verifyf( thrd == this->owner, "Expected owner to be %p, got %p (r: %i, m: %p)", thrd, this->owner, this->recursion, this ); 299 300 // Leaving a recursion level, decrement the counter 301 this->recursion -= 1; 302 303 // If we haven't left the last level of recursion 304 // it must mean there is an error 305 if( this->recursion != 0) { abort( "Thread internal monitor has unbalanced recursion" ); } 306 307 // Fetch the next thread, can be null 308 $thread * new_owner = next_thread( this ); 309 310 // Release the monitor lock 311 unlock( this->lock ); 312 313 // Unpark the next owner if needed 314 /* paranoid */ verifyf( !new_owner || new_owner == this->owner, "Expected owner to be %p, got %p (m: %p)", new_owner, this->owner, this ); 315 /* paranoid */ verify( ! kernelTLS.preemption_state.enabled ); 316 /* paranoid */ verify( ! kernelTLS.this_processor->destroyer ); 317 /* paranoid */ verify( thrd->state == Halted ); 318 319 kernelTLS.this_processor->destroyer = new_owner; 320 321 // Leave the thread 322 __leave_thread(); 323 324 // Control flow should never reach here! 325 } 283 void __thread_finish( $thread * thrd ) { 284 $monitor * this = &thrd->self_mon; 285 286 // Lock the monitor now 287 /* paranoid */ verify( this->lock.lock ); 288 /* paranoid */ verifyf( thrd == this->owner, "Expected owner to be %p, got %p (r: %i, m: %p)", thrd, this->owner, this->recursion, this ); 289 /* paranoid */ verify( ! kernelTLS.preemption_state.enabled ); 290 /* paranoid */ verify( thrd->state == Halted ); 291 /* paranoid */ verify( this->recursion == 1 ); 292 293 // Leaving a recursion level, decrement the counter 294 this->recursion -= 1; 295 this->owner = 0p; 296 297 // Fetch the next thread, can be null 298 $thread * new_owner = next_thread( this ); 299 300 // Release the monitor lock 301 unlock( this->lock ); 302 303 // Unpark the next owner if needed 304 /* paranoid */ verifyf( !new_owner || new_owner == this->owner, "Expected owner to be %p, got %p (m: %p)", new_owner, this->owner, this ); 305 /* paranoid */ verify( ! kernelTLS.preemption_state.enabled ); 306 /* paranoid */ verify( thrd->state == Halted ); 307 unpark( new_owner ); 326 308 } 327 309 -
libcfa/src/concurrency/snzi.hfa
r37b7d95 re7d6968 36 36 static inline void depart( __snzi_node_t & ); 37 37 38 #define __snzi_half -1 38 static const int __snzi_half = -1; 39 39 40 40 //-------------------------------------------------- -
libcfa/src/exception.h
r37b7d95 re7d6968 76 76 // implemented in the .c file either so they all have to be inline. 77 77 78 trait is_exception(dtype exceptT ) {78 trait is_exception(dtype exceptT, dtype virtualT) { 79 79 /* The first field must be a pointer to a virtual table. 80 * That virtual table must be a decendent of the base exception virtual tab $80 * That virtual table must be a decendent of the base exception virtual table. 81 81 */ 82 v oid mark_exception(exceptT *);83 // This is never used and should be a no-op.82 virtualT const & get_exception_vtable(exceptT *); 83 // Always returns the virtual table for this type (associated types hack). 84 84 }; 85 85 86 trait is_termination_exception(dtype exceptT | is_exception(exceptT)) {86 trait is_termination_exception(dtype exceptT, dtype virtualT | is_exception(exceptT, virtualT)) { 87 87 void defaultTerminationHandler(exceptT &); 88 88 }; 89 89 90 trait is_resumption_exception(dtype exceptT | is_exception(exceptT)) {90 trait is_resumption_exception(dtype exceptT, dtype virtualT | is_exception(exceptT, virtualT)) { 91 91 void defaultResumptionHandler(exceptT &); 92 92 }; 93 93 94 forall(dtype exceptT | is_termination_exception(exceptT))94 forall(dtype exceptT, dtype virtualT | is_termination_exception(exceptT, virtualT)) 95 95 static inline void $throw(exceptT & except) { 96 96 __cfaehm_throw_terminate( … … 100 100 } 101 101 102 forall(dtype exceptT | is_resumption_exception(exceptT))102 forall(dtype exceptT, dtype virtualT | is_resumption_exception(exceptT, virtualT)) 103 103 static inline void $throwResume(exceptT & except) { 104 104 __cfaehm_throw_resume( … … 108 108 } 109 109 110 forall(dtype exceptT | is_exception(exceptT))110 forall(dtype exceptT, dtype virtualT | is_exception(exceptT, virtualT)) 111 111 static inline void cancel_stack(exceptT & except) __attribute__((noreturn)) { 112 112 __cfaehm_cancel_stack( (exception_t *)&except ); 113 113 } 114 114 115 forall(dtype exceptT | is_exception(exceptT))115 forall(dtype exceptT, dtype virtualT | is_exception(exceptT, virtualT)) 116 116 static inline void defaultTerminationHandler(exceptT & except) { 117 117 return cancel_stack( except ); 118 118 } 119 119 120 forall(dtype exceptT | is_exception(exceptT))120 forall(dtype exceptT, dtype virtualT | is_exception(exceptT, virtualT)) 121 121 static inline void defaultResumptionHandler(exceptT & except) { 122 122 throw except; -
libcfa/src/exception.hfa
r37b7d95 re7d6968 95 95 // visible anywhere you use the instantiation of the exception is used. 96 96 #define POLY_VTABLE_DECLARATION(exception_name, ...) \ 97 void mark_exception(exception_name(__VA_ARGS__) *); \97 VTABLE_TYPE(exception_name)(__VA_ARGS__) const & get_exception_vtable(exception_name(__VA_ARGS__) *); \ 98 98 extern VTABLE_TYPE(exception_name)(__VA_ARGS__) VTABLE_NAME(exception_name) 99 99 … … 125 125 #define VTABLE_ASSERTION(exception_name, parameters) \ 126 126 { VTABLE_TYPE(exception_name) parameters VTABLE_NAME(exception_name); } 127 128 // IS_EXCEPTION(exception_name [, (...parameters)]) 129 // IS_RESUMPTION_EXCEPTION(exception_name [, (parameters...)]) 130 // IS_TERMINATION_EXCEPTION(exception_name [, (parameters...)]) 131 // Create an assertion that exception_name, possibly with the qualifing parameters, is the given 132 // kind of exception with the standard vtable with the same parameters if applicable. 133 #define IS_EXCEPTION(...) _IS_EXCEPTION(is_exception, __VA_ARGS__, , ~) 134 #define IS_RESUMPTION_EXCEPTION(...) _IS_EXCEPTION(is_resumption_exception, __VA_ARGS__, , ~) 135 #define IS_TERMINATION_EXCEPTION(...) _IS_EXCEPTION(is_termination_exception, __VA_ARGS__, , ~) 127 136 128 137 // All internal helper macros begin with an underscore. … … 160 169 161 170 #define _FORALL_CTOR0_DECLARATION(exception_name, assertions, parameters) \ 162 forall(_UNPACK assertions | VTABLE_ASSERTION(exception_name, parameters) ) \ 171 forall(_UNPACK assertions | \ 172 is_exception(exception_name parameters, VTABLE_TYPE(exception_name) parameters)) \ 163 173 void ?{}(exception_name parameters & this) 164 174 165 175 #define _FORALL_CTOR0_INSTANCE(exception_name, assertions, parameters) \ 166 176 _FORALL_CTOR0_DECLARATION(exception_name, assertions, parameters) { \ 167 VTABLE_INIT(this, exception_name); \177 (this).virtual_table = &get_exception_vtable(&this); \ 168 178 } 169 179 … … 185 195 #define _VTABLE_DECLARATION(exception_name, parent_name, ...) \ 186 196 struct exception_name; \ 187 void mark_exception(exception_name *); \188 197 VTABLE_TYPE(exception_name); \ 198 VTABLE_TYPE(exception_name) const & get_exception_vtable(exception_name *); \ 189 199 extern VTABLE_TYPE(exception_name) VTABLE_NAME(exception_name); \ 190 200 VTABLE_TYPE(exception_name) { \ … … 197 207 198 208 #define _VTABLE_INSTANCE(exception_name, parent_name, ...) \ 199 void mark_exception(exception_name *) {} \ 209 VTABLE_TYPE(exception_name) const & get_exception_vtable(exception_name *) { \ 210 return VTABLE_NAME(exception_name); \ 211 } \ 200 212 void _GLUE2(exception_name,_copy)(exception_name * this, exception_name * other) { \ 201 213 *this = *other; \ … … 218 230 219 231 #define _POLY_VTABLE_INSTANCE(exception_name, parent_name, ...) \ 220 void mark_exception(exception_name(__VA_ARGS__) *) {} \ 232 extern VTABLE_TYPE(exception_name)(__VA_ARGS__) VTABLE_NAME(exception_name); \ 233 VTABLE_TYPE(exception_name)(__VA_ARGS__) const & get_exception_vtable( \ 234 exception_name(__VA_ARGS__) *) { \ 235 return VTABLE_NAME(exception_name); \ 236 } \ 221 237 void _GLUE2(exception_name,_copy)( \ 222 238 exception_name(__VA_ARGS__) * this, exception_name(__VA_ARGS__) * other) { \ … … 227 243 _GLUE2(exception_name,_copy), ^?{}, \ 228 244 _CLOSE 245 246 #define _IS_EXCEPTION(kind, exception_name, parameters, ...) \ 247 kind(exception_name parameters, VTABLE_TYPE(exception_name) parameters) -
libcfa/src/limits.cfa
r37b7d95 re7d6968 10 10 // Created On : Wed Apr 6 18:06:52 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Sep 30 22:56:32 202013 // Update Count : 7 612 // Last Modified On : Thu Mar 1 16:22:51 2018 13 // Update Count : 74 14 14 // 15 15 … … 23 23 // Integral Constants 24 24 25 signed char MIN = SCHAR_MIN;26 unsigned char MIN = 0;27 short int MIN = SHRT_MIN;28 unsigned short int MIN = 0;29 int MIN = INT_MIN;30 unsigned int MIN = 0;31 long int MIN = LONG_MIN;32 unsigned long int MIN = 0;33 long long int MIN = LLONG_MIN;34 unsigned long long int MIN = 0;25 const signed char MIN = SCHAR_MIN; 26 const unsigned char MIN = 0; 27 const short int MIN = SHRT_MIN; 28 const unsigned short int MIN = 0; 29 const int MIN = INT_MIN; 30 const unsigned int MIN = 0; 31 const long int MIN = LONG_MIN; 32 const unsigned long int MIN = 0; 33 const long long int MIN = LLONG_MIN; 34 const unsigned long long int MIN = 0; 35 35 36 signed char MAX = SCHAR_MAX;37 unsigned char MAX = UCHAR_MAX;38 short int MAX = SHRT_MAX;39 unsigned short int MAX = USHRT_MAX;40 int MAX = INT_MAX;41 unsigned int MAX = UINT_MAX;42 long int MAX = LONG_MAX;43 unsigned long int MAX = ULONG_MAX;44 long long int MAX = LLONG_MAX;45 unsigned long long int MAX = ULLONG_MAX;36 const signed char MAX = SCHAR_MAX; 37 const unsigned char MAX = UCHAR_MAX; 38 const short int MAX = SHRT_MAX; 39 const unsigned short int MAX = USHRT_MAX; 40 const int MAX = INT_MAX; 41 const unsigned int MAX = UINT_MAX; 42 const long int MAX = LONG_MAX; 43 const unsigned long int MAX = ULONG_MAX; 44 const long long int MAX = LLONG_MAX; 45 const unsigned long long int MAX = ULLONG_MAX; 46 46 47 47 // Floating-Point Constants 48 48 49 float MIN = FLT_MIN;50 double MIN = DBL_MIN;51 long double MIN = LDBL_MIN;52 float _Complex MIN = __FLT_MIN__ + __FLT_MIN__ * I;53 double _Complex MIN = DBL_MIN + DBL_MIN * I;54 long double _Complex MIN = LDBL_MIN + LDBL_MIN * I;49 const float MIN = FLT_MIN; 50 const double MIN = DBL_MIN; 51 const long double MIN = LDBL_MIN; 52 const float _Complex MIN = __FLT_MIN__ + __FLT_MIN__ * I; 53 const double _Complex MIN = DBL_MIN + DBL_MIN * I; 54 const long double _Complex MIN = LDBL_MIN + LDBL_MIN * I; 55 55 56 float MAX = FLT_MAX;57 double MAX = DBL_MAX;58 long double MAX = LDBL_MAX;59 float _Complex MAX = FLT_MAX + FLT_MAX * I;60 double _Complex MAX = DBL_MAX + DBL_MAX * I;61 long double _Complex MAX = LDBL_MAX + LDBL_MAX * I;56 const float MAX = FLT_MAX; 57 const double MAX = DBL_MAX; 58 const long double MAX = LDBL_MAX; 59 const float _Complex MAX = FLT_MAX + FLT_MAX * I; 60 const double _Complex MAX = DBL_MAX + DBL_MAX * I; 61 const long double _Complex MAX = LDBL_MAX + LDBL_MAX * I; 62 62 63 float PI = (float)M_PI;// pi64 float PI_2 = (float)M_PI_2;// pi / 265 float PI_4 = (float)M_PI_4;// pi / 466 float _1_PI = (float)M_1_PI;// 1 / pi67 float _2_PI = (float)M_2_PI;// 2 / pi68 float _2_SQRT_PI = (float)M_2_SQRTPI;// 2 / sqrt(pi)63 const float PI = (float)M_PI; // pi 64 const float PI_2 = (float)M_PI_2; // pi / 2 65 const float PI_4 = (float)M_PI_4; // pi / 4 66 const float _1_PI = (float)M_1_PI; // 1 / pi 67 const float _2_PI = (float)M_2_PI; // 2 / pi 68 const float _2_SQRT_PI = (float)M_2_SQRTPI; // 2 / sqrt(pi) 69 69 70 double PI = M_PI;// pi71 double PI_2 = M_PI_2;// pi / 272 double PI_4 = M_PI_4;// pi / 473 double _1_PI = M_1_PI;// 1 / pi74 double _2_PI = M_2_PI;// 2 / pi75 double _2_SQRT_PI = M_2_SQRTPI;// 2 / sqrt(pi)70 const double PI = M_PI; // pi 71 const double PI_2 = M_PI_2; // pi / 2 72 const double PI_4 = M_PI_4; // pi / 4 73 const double _1_PI = M_1_PI; // 1 / pi 74 const double _2_PI = M_2_PI; // 2 / pi 75 const double _2_SQRT_PI = M_2_SQRTPI; // 2 / sqrt(pi) 76 76 77 long double PI = M_PIl;// pi78 long double PI_2 = M_PI_2l;// pi / 279 long double PI_4 = M_PI_4l;// pi / 480 long double _1_PI = M_1_PIl;// 1 / pi81 long double _2_PI = M_2_PIl;// 2 / pi82 long double _2_SQRT_PI = M_2_SQRTPIl;// 2 / sqrt(pi)77 const long double PI = M_PIl; // pi 78 const long double PI_2 = M_PI_2l; // pi / 2 79 const long double PI_4 = M_PI_4l; // pi / 4 80 const long double _1_PI = M_1_PIl; // 1 / pi 81 const long double _2_PI = M_2_PIl; // 2 / pi 82 const long double _2_SQRT_PI = M_2_SQRTPIl; // 2 / sqrt(pi) 83 83 84 float _Complex PI = (float)M_PI + 0.0_iF;// pi85 float _Complex PI_2 = (float)M_PI_2 + 0.0_iF;// pi / 286 float _Complex PI_4 = (float)M_PI_4 + 0.0_iF;// pi / 487 float _Complex _1_PI = (float)M_1_PI + 0.0_iF;// 1 / pi88 float _Complex _2_PI = (float)M_2_PI + 0.0_iF;// 2 / pi89 float _Complex _2_SQRT_PI = (float)M_2_SQRTPI + 0.0_iF; // 2 / sqrt(pi)84 const float _Complex PI = (float)M_PI + 0.0_iF; // pi 85 const float _Complex PI_2 = (float)M_PI_2 + 0.0_iF; // pi / 2 86 const float _Complex PI_4 = (float)M_PI_4 + 0.0_iF; // pi / 4 87 const float _Complex _1_PI = (float)M_1_PI + 0.0_iF; // 1 / pi 88 const float _Complex _2_PI = (float)M_2_PI + 0.0_iF; // 2 / pi 89 const float _Complex _2_SQRT_PI = (float)M_2_SQRTPI + 0.0_iF; // 2 / sqrt(pi) 90 90 91 double _Complex PI = M_PI + 0.0_iD;// pi92 double _Complex PI_2 = M_PI_2 + 0.0_iD;// pi / 293 double _Complex PI_4 = M_PI_4 + 0.0_iD;// pi / 494 double _Complex _1_PI = M_1_PI + 0.0_iD;// 1 / pi95 double _Complex _2_PI = M_2_PI + 0.0_iD;// 2 / pi96 double _Complex _2_SQRT_PI = M_2_SQRTPI + 0.0_iD;// 2 / sqrt(pi)91 const double _Complex PI = M_PI + 0.0_iD; // pi 92 const double _Complex PI_2 = M_PI_2 + 0.0_iD; // pi / 2 93 const double _Complex PI_4 = M_PI_4 + 0.0_iD; // pi / 4 94 const double _Complex _1_PI = M_1_PI + 0.0_iD; // 1 / pi 95 const double _Complex _2_PI = M_2_PI + 0.0_iD; // 2 / pi 96 const double _Complex _2_SQRT_PI = M_2_SQRTPI + 0.0_iD; // 2 / sqrt(pi) 97 97 98 long double _Complex PI = M_PIl + 0.0_iL;// pi99 long double _Complex PI_2 = M_PI_2l + 0.0_iL;// pi / 2100 long double _Complex PI_4 = M_PI_4l + 0.0_iL;// pi / 4101 long double _Complex _1_PI = M_1_PIl + 0.0_iL;// 1 / pi102 long double _Complex _2_PI = M_2_PIl + 0.0_iL;// 2 / pi103 long double _Complex _2_SQRT_PI = M_2_SQRTPIl + 0.0_iL; // 2 / sqrt(pi)98 const long double _Complex PI = M_PIl + 0.0_iL; // pi 99 const long double _Complex PI_2 = M_PI_2l + 0.0_iL; // pi / 2 100 const long double _Complex PI_4 = M_PI_4l + 0.0_iL; // pi / 4 101 const long double _Complex _1_PI = M_1_PIl + 0.0_iL; // 1 / pi 102 const long double _Complex _2_PI = M_2_PIl + 0.0_iL; // 2 / pi 103 const long double _Complex _2_SQRT_PI = M_2_SQRTPIl + 0.0_iL; // 2 / sqrt(pi) 104 104 105 float E = (float)M_E;// e106 float LOG2_E = (float)M_LOG2E;// log_2(e)107 float LOG10_E = (float)M_LOG10E;// log_10(e)108 float LN_2 = (float)M_LN2;// log_e(2)109 float LN_10 = (float)M_LN10;// log_e(10)110 float SQRT_2 = (float)M_SQRT2;// sqrt(2)111 float _1_SQRT_2 = (float)M_SQRT1_2;// 1 / sqrt(2)105 const float E = (float)M_E; // e 106 const float LOG2_E = (float)M_LOG2E; // log_2(e) 107 const float LOG10_E = (float)M_LOG10E; // log_10(e) 108 const float LN_2 = (float)M_LN2; // log_e(2) 109 const float LN_10 = (float)M_LN10; // log_e(10) 110 const float SQRT_2 = (float)M_SQRT2; // sqrt(2) 111 const float _1_SQRT_2 = (float)M_SQRT1_2; // 1 / sqrt(2) 112 112 113 double E = M_E;// e114 double LOG2_E = M_LOG2E;// log_2(e)115 double LOG10_E = M_LOG10E;// log_10(e)116 double LN_2 = M_LN2;// log_e(2)117 double LN_10 = M_LN10;// log_e(10)118 double SQRT_2 = M_SQRT2;// sqrt(2)119 double _1_SQRT_2 = M_SQRT1_2;// 1 / sqrt(2)113 const double E = M_E; // e 114 const double LOG2_E = M_LOG2E; // log_2(e) 115 const double LOG10_E = M_LOG10E; // log_10(e) 116 const double LN_2 = M_LN2; // log_e(2) 117 const double LN_10 = M_LN10; // log_e(10) 118 const double SQRT_2 = M_SQRT2; // sqrt(2) 119 const double _1_SQRT_2 = M_SQRT1_2; // 1 / sqrt(2) 120 120 121 long double E = M_El;// e122 long double LOG2_E = M_LOG2El;// log_2(e)123 long double LOG10_E = M_LOG10El;// log_10(e)124 long double LN_2 = M_LN2l;// log_e(2)125 long double LN_10 = M_LN10l;// log_e(10)126 long double SQRT_2 = M_SQRT2l;// sqrt(2)127 long double _1_SQRT_2 = M_SQRT1_2l;// 1 / sqrt(2)121 const long double E = M_El; // e 122 const long double LOG2_E = M_LOG2El; // log_2(e) 123 const long double LOG10_E = M_LOG10El; // log_10(e) 124 const long double LN_2 = M_LN2l; // log_e(2) 125 const long double LN_10 = M_LN10l; // log_e(10) 126 const long double SQRT_2 = M_SQRT2l; // sqrt(2) 127 const long double _1_SQRT_2 = M_SQRT1_2l; // 1 / sqrt(2) 128 128 129 float _Complex E = M_E + 0.0_iF;// e130 float _Complex LOG2_E = M_LOG2E + 0.0_iF;// log_2(e)131 float _Complex LOG10_E = M_LOG10E + 0.0_iF;// log_10(e)132 float _Complex LN_2 = M_LN2 + 0.0_iF;// log_e(2)133 float _Complex LN_10 = M_LN10 + 0.0_iF;// log_e(10)134 float _Complex SQRT_2 = M_SQRT2 + 0.0_iF;// sqrt(2)135 float _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iF;// 1 / sqrt(2)129 const float _Complex E = M_E + 0.0_iF; // e 130 const float _Complex LOG2_E = M_LOG2E + 0.0_iF; // log_2(e) 131 const float _Complex LOG10_E = M_LOG10E + 0.0_iF; // log_10(e) 132 const float _Complex LN_2 = M_LN2 + 0.0_iF; // log_e(2) 133 const float _Complex LN_10 = M_LN10 + 0.0_iF; // log_e(10) 134 const float _Complex SQRT_2 = M_SQRT2 + 0.0_iF; // sqrt(2) 135 const float _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iF; // 1 / sqrt(2) 136 136 137 double _Complex E = M_E + 0.0_iD;// e138 double _Complex LOG2_E = M_LOG2E + 0.0_iD;// log_2(e)139 double _Complex LOG10_E = M_LOG10E + 0.0_iD;// log_10(e)140 double _Complex LN_2 = M_LN2 + 0.0_iD;// log_e(2)141 double _Complex LN_10 = M_LN10 + 0.0_iD;// log_e(10)142 double _Complex SQRT_2 = M_SQRT2 + 0.0_iD;// sqrt(2)143 double _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iD;// 1 / sqrt(2)137 const double _Complex E = M_E + 0.0_iD; // e 138 const double _Complex LOG2_E = M_LOG2E + 0.0_iD; // log_2(e) 139 const double _Complex LOG10_E = M_LOG10E + 0.0_iD; // log_10(e) 140 const double _Complex LN_2 = M_LN2 + 0.0_iD; // log_e(2) 141 const double _Complex LN_10 = M_LN10 + 0.0_iD; // log_e(10) 142 const double _Complex SQRT_2 = M_SQRT2 + 0.0_iD; // sqrt(2) 143 const double _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iD; // 1 / sqrt(2) 144 144 145 long double _Complex E = M_El + 0.0_iL;// e146 long double _Complex LOG2_E = M_LOG2El + 0.0_iL;// log_2(e)147 long double _Complex LOG10_E = M_LOG10El + 0.0_iL;// log_10(e)148 long double _Complex LN_2 = M_LN2l + 0.0_iL;// log_e(2)149 long double _Complex LN_10 = M_LN10l + 0.0_iL;// log_e(10)150 long double _Complex SQRT_2 = M_SQRT2l + 0.0_iL;// sqrt(2)151 long double _Complex _1_SQRT_2 = M_SQRT1_2l + 0.0_iL;// 1 / sqrt(2)145 const long double _Complex E = M_El + 0.0_iL; // e 146 const long double _Complex LOG2_E = M_LOG2El + 0.0_iL; // log_2(e) 147 const long double _Complex LOG10_E = M_LOG10El + 0.0_iL; // log_10(e) 148 const long double _Complex LN_2 = M_LN2l + 0.0_iL; // log_e(2) 149 const long double _Complex LN_10 = M_LN10l + 0.0_iL; // log_e(10) 150 const long double _Complex SQRT_2 = M_SQRT2l + 0.0_iL; // sqrt(2) 151 const long double _Complex _1_SQRT_2 = M_SQRT1_2l + 0.0_iL; // 1 / sqrt(2) 152 152 153 153 // Local Variables: // -
libcfa/src/limits.hfa
r37b7d95 re7d6968 10 10 // Created On : Wed Apr 6 18:06:52 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Sep 30 22:56:35 202013 // Update Count : 1 512 // Last Modified On : Thu Mar 1 16:20:54 2018 13 // Update Count : 13 14 14 // 15 15 … … 18 18 // Integral Constants 19 19 20 extern signed char MIN;21 extern unsigned char MIN;22 extern short int MIN;23 extern unsigned short int MIN;24 extern int MIN;25 extern unsigned int MIN;26 extern long int MIN;27 extern unsigned long int MIN;28 extern long long int MIN;29 extern unsigned long long int MIN;20 extern const signed char MIN; 21 extern const unsigned char MIN; 22 extern const short int MIN; 23 extern const unsigned short int MIN; 24 extern const int MIN; 25 extern const unsigned int MIN; 26 extern const long int MIN; 27 extern const unsigned long int MIN; 28 extern const long long int MIN; 29 extern const unsigned long long int MIN; 30 30 31 extern signed char MAX;32 extern unsigned char MAX;33 extern short int MAX;34 extern unsigned short int MAX;35 extern int MAX;36 extern unsigned int MAX;37 extern long int MAX;38 extern unsigned long int MAX;39 extern long long int MAX;40 extern unsigned long long int MAX;31 extern const signed char MAX; 32 extern const unsigned char MAX; 33 extern const short int MAX; 34 extern const unsigned short int MAX; 35 extern const int MAX; 36 extern const unsigned int MAX; 37 extern const long int MAX; 38 extern const unsigned long int MAX; 39 extern const long long int MAX; 40 extern const unsigned long long int MAX; 41 41 42 42 // Floating-Point Constants 43 43 44 extern float MIN;45 extern double MIN;46 extern long double MIN;47 extern float _Complex MIN;48 extern double _Complex MIN;49 extern long double _Complex MIN;44 extern const float MIN; 45 extern const double MIN; 46 extern const long double MIN; 47 extern const float _Complex MIN; 48 extern const double _Complex MIN; 49 extern const long double _Complex MIN; 50 50 51 extern float MAX;52 extern double MAX;53 extern long double MAX;54 extern float _Complex MAX;55 extern double _Complex MAX;56 extern long double _Complex MAX;51 extern const float MAX; 52 extern const double MAX; 53 extern const long double MAX; 54 extern const float _Complex MAX; 55 extern const double _Complex MAX; 56 extern const long double _Complex MAX; 57 57 58 extern float PI;// pi59 extern float PI_2;// pi / 260 extern float PI_4;// pi / 461 extern float _1_PI;// 1 / pi62 extern float _2_PI;// 2 / pi63 extern float _2_SQRT_PI;// 2 / sqrt(pi)58 extern const float PI; // pi 59 extern const float PI_2; // pi / 2 60 extern const float PI_4; // pi / 4 61 extern const float _1_PI; // 1 / pi 62 extern const float _2_PI; // 2 / pi 63 extern const float _2_SQRT_PI; // 2 / sqrt(pi) 64 64 65 extern double PI;// pi66 extern double PI_2;// pi / 267 extern double PI_4;// pi / 468 extern double _1_PI;// 1 / pi69 extern double _2_PI;// 2 / pi70 extern double _2_SQRT_PI;// 2 / sqrt(pi)65 extern const double PI; // pi 66 extern const double PI_2; // pi / 2 67 extern const double PI_4; // pi / 4 68 extern const double _1_PI; // 1 / pi 69 extern const double _2_PI; // 2 / pi 70 extern const double _2_SQRT_PI; // 2 / sqrt(pi) 71 71 72 extern long double PI;// pi73 extern long double PI_2;// pi / 274 extern long double PI_4;// pi / 475 extern long double _1_PI;// 1 / pi76 extern long double _2_PI;// 2 / pi77 extern long double _2_SQRT_PI;// 2 / sqrt(pi)72 extern const long double PI; // pi 73 extern const long double PI_2; // pi / 2 74 extern const long double PI_4; // pi / 4 75 extern const long double _1_PI; // 1 / pi 76 extern const long double _2_PI; // 2 / pi 77 extern const long double _2_SQRT_PI; // 2 / sqrt(pi) 78 78 79 extern float _Complex PI;// pi80 extern float _Complex PI_2;// pi / 281 extern float _Complex PI_4;// pi / 482 extern float _Complex _1_PI;// 1 / pi83 extern float _Complex _2_PI;// 2 / pi84 extern float _Complex _2_SQRT_PI;// 2 / sqrt(pi)79 extern const float _Complex PI; // pi 80 extern const float _Complex PI_2; // pi / 2 81 extern const float _Complex PI_4; // pi / 4 82 extern const float _Complex _1_PI; // 1 / pi 83 extern const float _Complex _2_PI; // 2 / pi 84 extern const float _Complex _2_SQRT_PI; // 2 / sqrt(pi) 85 85 86 extern double _Complex PI;// pi87 extern double _Complex PI_2;// pi / 288 extern double _Complex PI_4;// pi / 489 extern double _Complex _1_PI;// 1 / pi90 extern double _Complex _2_PI;// 2 / pi91 extern double _Complex _2_SQRT_PI;// 2 / sqrt(pi)86 extern const double _Complex PI; // pi 87 extern const double _Complex PI_2; // pi / 2 88 extern const double _Complex PI_4; // pi / 4 89 extern const double _Complex _1_PI; // 1 / pi 90 extern const double _Complex _2_PI; // 2 / pi 91 extern const double _Complex _2_SQRT_PI; // 2 / sqrt(pi) 92 92 93 extern long double _Complex PI;// pi94 extern long double _Complex PI_2;// pi / 295 extern long double _Complex PI_4;// pi / 496 extern long double _Complex _1_PI;// 1 / pi97 extern long double _Complex _2_PI;// 2 / pi98 extern long double _Complex _2_SQRT_PI;// 2 / sqrt(pi)93 extern const long double _Complex PI; // pi 94 extern const long double _Complex PI_2; // pi / 2 95 extern const long double _Complex PI_4; // pi / 4 96 extern const long double _Complex _1_PI; // 1 / pi 97 extern const long double _Complex _2_PI; // 2 / pi 98 extern const long double _Complex _2_SQRT_PI; // 2 / sqrt(pi) 99 99 100 extern float E;// e101 extern float LOG2_E;// log_2(e)102 extern float LOG10_E;// log_10(e)103 extern float LN_2;// log_e(2)104 extern float LN_10;// log_e(10)105 extern float SQRT_2;// sqrt(2)106 extern float _1_SQRT_2;// 1 / sqrt(2)100 extern const float E; // e 101 extern const float LOG2_E; // log_2(e) 102 extern const float LOG10_E; // log_10(e) 103 extern const float LN_2; // log_e(2) 104 extern const float LN_10; // log_e(10) 105 extern const float SQRT_2; // sqrt(2) 106 extern const float _1_SQRT_2; // 1 / sqrt(2) 107 107 108 extern double E;// e109 extern double LOG2_E;// log_2(e)110 extern double LOG10_E;// log_10(e)111 extern double LN_2;// log_e(2)112 extern double LN_10;// log_e(10)113 extern double SQRT_2;// sqrt(2)114 extern double _1_SQRT_2;// 1 / sqrt(2)108 extern const double E; // e 109 extern const double LOG2_E; // log_2(e) 110 extern const double LOG10_E; // log_10(e) 111 extern const double LN_2; // log_e(2) 112 extern const double LN_10; // log_e(10) 113 extern const double SQRT_2; // sqrt(2) 114 extern const double _1_SQRT_2; // 1 / sqrt(2) 115 115 116 extern long double E;// e117 extern long double LOG2_E;// log_2(e)118 extern long double LOG10_E;// log_10(e)119 extern long double LN_2;// log_e(2)120 extern long double LN_10;// log_e(10)121 extern long double SQRT_2;// sqrt(2)122 extern long double _1_SQRT_2;// 1/sqrt(2)116 extern const long double E; // e 117 extern const long double LOG2_E; // log_2(e) 118 extern const long double LOG10_E; // log_10(e) 119 extern const long double LN_2; // log_e(2) 120 extern const long double LN_10; // log_e(10) 121 extern const long double SQRT_2; // sqrt(2) 122 extern const long double _1_SQRT_2; // 1/sqrt(2) 123 123 124 extern float _Complex E;// e125 extern float _Complex LOG2_E;// log_2(e)126 extern float _Complex LOG10_E;// log_10(e)127 extern float _Complex LN_2;// log_e(2)128 extern float _Complex LN_10;// log_e(10)129 extern float _Complex SQRT_2;// sqrt(2)130 extern float _Complex _1_SQRT_2;// 1 / sqrt(2)124 extern const float _Complex E; // e 125 extern const float _Complex LOG2_E; // log_2(e) 126 extern const float _Complex LOG10_E; // log_10(e) 127 extern const float _Complex LN_2; // log_e(2) 128 extern const float _Complex LN_10; // log_e(10) 129 extern const float _Complex SQRT_2; // sqrt(2) 130 extern const float _Complex _1_SQRT_2; // 1 / sqrt(2) 131 131 132 extern double _Complex E;// e133 extern double _Complex LOG2_E;// log_2(e)134 extern double _Complex LOG10_E;// log_10(e)135 extern double _Complex LN_2;// log_e(2)136 extern double _Complex LN_10;// log_e(10)137 extern double _Complex SQRT_2;// sqrt(2)138 extern double _Complex _1_SQRT_2;// 1 / sqrt(2)132 extern const double _Complex E; // e 133 extern const double _Complex LOG2_E; // log_2(e) 134 extern const double _Complex LOG10_E; // log_10(e) 135 extern const double _Complex LN_2; // log_e(2) 136 extern const double _Complex LN_10; // log_e(10) 137 extern const double _Complex SQRT_2; // sqrt(2) 138 extern const double _Complex _1_SQRT_2; // 1 / sqrt(2) 139 139 140 extern long double _Complex E;// e141 extern long double _Complex LOG2_E;// log_2(e)142 extern long double _Complex LOG10_E;// log_10(e)143 extern long double _Complex LN_2;// log_e(2)144 extern long double _Complex LN_10;// log_e(10)145 extern long double _Complex SQRT_2;// sqrt(2)146 extern long double _Complex _1_SQRT_2;// 1 / sqrt(2)140 extern const long double _Complex E; // e 141 extern const long double _Complex LOG2_E; // log_2(e) 142 extern const long double _Complex LOG10_E; // log_10(e) 143 extern const long double _Complex LN_2; // log_e(2) 144 extern const long double _Complex LN_10; // log_e(10) 145 extern const long double _Complex SQRT_2; // sqrt(2) 146 extern const long double _Complex _1_SQRT_2; // 1 / sqrt(2) 147 147 148 148 // Local Variables: //
Note:
See TracChangeset
for help on using the changeset viewer.