ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/libecb/ecb.pod
(Generate patch)

Comparing cvsroot/libecb/ecb.pod (file contents):
Revision 1.61 by sf-exg, Thu Feb 12 12:37:33 2015 UTC vs.
Revision 1.70 by root, Tue Sep 1 16:14:42 2015 UTC

68platform (currently C<4> or C<8>) and can be used in preprocessor 68platform (currently C<4> or C<8>) and can be used in preprocessor
69expressions. 69expressions.
70 70
71For C<ptrdiff_t> and C<size_t> use C<stddef.h>. 71For C<ptrdiff_t> and C<size_t> use C<stddef.h>.
72 72
73=head2 LANGUAGE/COMPILER VERSIONS 73=head2 LANGUAGE/ENVIRONMENT/COMPILER VERSIONS
74 74
75All the following symbols expand to an expression that can be tested in 75All the following symbols expand to an expression that can be tested in
76preprocessor instructions as well as treated as a boolean (use C<!!> to 76preprocessor instructions as well as treated as a boolean (use C<!!> to
77ensure it's either C<0> or C<1> if you need that). 77ensure it's either C<0> or C<1> if you need that).
78 78
160The designers of the new X32 ABI for some inexplicable reason decided to 160The designers of the new X32 ABI for some inexplicable reason decided to
161make it look exactly like amd64, even though it's completely incompatible 161make it look exactly like amd64, even though it's completely incompatible
162to that ABI, breaking about every piece of software that assumed that 162to that ABI, breaking about every piece of software that assumed that
163C<__x86_64> stands for, well, the x86-64 ABI, making these macros 163C<__x86_64> stands for, well, the x86-64 ABI, making these macros
164necessary. 164necessary.
165
166=back
167
168=head2 MACRO TRICKERY
169
170=over 4
171
172=item ECB_CONCAT (a, b)
173
174Expands any macros in C<a> and C<b>, then concatenates the result to form
175a single token. This is mainly useful to form identifiers from components,
176e.g.:
177
178 #define S1 str
179 #define S2 cpy
180
181 ECB_CONCAT (S1, S2)(dst, src); // == strcpy (dst, src);
182
183=item ECB_STRINGIFY (arg)
184
185Expands any macros in C<arg> and returns the stringified version of
186it. This is mainly useful to get the contents of a macro in string form,
187e.g.:
188
189 #define SQL_LIMIT 100
190 sql_exec ("select * from table limit " ECB_STRINGIFY (SQL_LIMIT));
191
192=item ECB_STRINGIFY_EXPR (expr)
193
194Like C<ECB_STRINGIFY>, but additionally evaluates C<expr> to make sure it
195is a valid expression. This is useful to catch typos or cases where the
196macro isn't available:
197
198 #include <errno.h>
199
200 ECB_STRINGIFY (EDOM); // "33" (on my system at least)
201 ECB_STRINGIFY_EXPR (EDOM); // "33"
202
203 // now imagine we had a typo:
204
205 ECB_STRINGIFY (EDAM); // "EDAM"
206 ECB_STRINGIFY_EXPR (EDAM); // error: EDAM undefined
165 207
166=back 208=back
167 209
168=head2 ATTRIBUTES 210=head2 ATTRIBUTES
169 211
198=item ecb_deprecated 240=item ecb_deprecated
199 241
200Similar to C<ecb_unused>, but marks a function, variable or type as 242Similar to C<ecb_unused>, but marks a function, variable or type as
201deprecated. This makes some compilers warn when the type is used. 243deprecated. This makes some compilers warn when the type is used.
202 244
245=item ecb_deprecated_message (message)
246
247Same as C<ecb_deprecated>, but if possible, the specified diagnostic is
248used instead of a generic depreciation message when the object is being
249used.
250
203=item ecb_inline 251=item ecb_inline
204 252
205Expands either to C<static inline> or to just C<static>, if inline 253Expands either to C<static inline> or to just C<static>, if inline
206isn't supported. It should be used to declare functions that should be 254isn't supported. It should be used to declare functions that should be
207inlined, for code size or speed reasons. 255inlined, for code size or speed reasons.
214 return - (a * b); 262 return - (a * b);
215 } 263 }
216 264
217=item ecb_noinline 265=item ecb_noinline
218 266
219Prevent a function from being inlined - it might be optimised away, but 267Prevents a function from being inlined - it might be optimised away, but
220not inlined into other functions. This is useful if you know your function 268not inlined into other functions. This is useful if you know your function
221is rarely called and large enough for inlining not to be helpful. 269is rarely called and large enough for inlining not to be helpful.
222 270
223=item ecb_noreturn 271=item ecb_noreturn
224 272
382 return is_constant (n) && !(n & (n - 1)) 430 return is_constant (n) && !(n & (n - 1))
383 ? rndm16 () & (num - 1) 431 ? rndm16 () & (num - 1)
384 : (n * (uint32_t)rndm16 ()) >> 16; 432 : (n * (uint32_t)rndm16 ()) >> 16;
385 } 433 }
386 434
387=item bool ecb_expect (expr, value) 435=item ecb_expect (expr, value)
388 436
389Evaluates C<expr> and returns it. In addition, it tells the compiler that 437Evaluates C<expr> and returns it. In addition, it tells the compiler that
390the C<expr> evaluates to C<value> a lot, which can be used for static 438the C<expr> evaluates to C<value> a lot, which can be used for static
391branch optimisations. 439branch optimisations.
392 440
439 { 487 {
440 if (ecb_expect_false (current + size > end)) 488 if (ecb_expect_false (current + size > end))
441 real_reserve_method (size); /* presumably noinline */ 489 real_reserve_method (size); /* presumably noinline */
442 } 490 }
443 491
444=item bool ecb_assume (cond) 492=item ecb_assume (cond)
445 493
446Try to tell the compiler that some condition is true, even if it's not 494Tries to tell the compiler that some condition is true, even if it's not
447obvious. 495obvious. This is not a function, but a statement: it cannot be used in
496another expression.
448 497
449This can be used to teach the compiler about invariants or other 498This can be used to teach the compiler about invariants or other
450conditions that might improve code generation, but which are impossible to 499conditions that might improve code generation, but which are impossible to
451deduce form the code itself. 500deduce form the code itself.
452 501
469 518
470Then the compiler I<might> be able to optimise out the second call 519Then the compiler I<might> be able to optimise out the second call
471completely, as it knows that C<< current + 1 > end >> is false and the 520completely, as it knows that C<< current + 1 > end >> is false and the
472call will never be executed. 521call will never be executed.
473 522
474=item bool ecb_unreachable () 523=item ecb_unreachable ()
475 524
476This function does nothing itself, except tell the compiler that it will 525This function does nothing itself, except tell the compiler that it will
477never be executed. Apart from suppressing a warning in some cases, this 526never be executed. Apart from suppressing a warning in some cases, this
478function can be used to implement C<ecb_assume> or similar functions. 527function can be used to implement C<ecb_assume> or similar functionality.
479 528
480=item bool ecb_prefetch (addr, rw, locality) 529=item ecb_prefetch (addr, rw, locality)
481 530
482Tells the compiler to try to prefetch memory at the given C<addr>ess 531Tells the compiler to try to prefetch memory at the given C<addr>ess
483for either reading (C<rw> = 0) or writing (C<rw> = 1). A C<locality> of 532for either reading (C<rw> = 0) or writing (C<rw> = 1). A C<locality> of
484C<0> means that there will only be one access later, C<3> means that 533C<0> means that there will only be one access later, C<3> means that
485the data will likely be accessed very often, and values in between mean 534the data will likely be accessed very often, and values in between mean
486something... in between. The memory pointed to by the address does not 535something... in between. The memory pointed to by the address does not
487need to be accessible (it could be a null pointer for example), but C<rw> 536need to be accessible (it could be a null pointer for example), but C<rw>
488and C<locality> must be compile-time constants. 537and C<locality> must be compile-time constants.
489 538
539This is a statement, not a function: you cannot use it as part of an
540expression.
541
490An obvious way to use this is to prefetch some data far away, in a big 542An obvious way to use this is to prefetch some data far away, in a big
491array you loop over. This prefetches memory some 128 array elements later, 543array you loop over. This prefetches memory some 128 array elements later,
492in the hope that it will be ready when the CPU arrives at that location. 544in the hope that it will be ready when the CPU arrives at that location.
493 545
494 int sum = 0; 546 int sum = 0;
546 598
547=item bool ecb_is_pot32 (uint32_t x) 599=item bool ecb_is_pot32 (uint32_t x)
548 600
549=item bool ecb_is_pot64 (uint32_t x) 601=item bool ecb_is_pot64 (uint32_t x)
550 602
551Return true iff C<x> is a power of two or C<x == 0>. 603Returns true iff C<x> is a power of two or C<x == 0>.
552 604
553For smaller types then C<uint32_t> you can safely use C<ecb_is_pot32>. 605For smaller types than C<uint32_t> you can safely use C<ecb_is_pot32>.
554 606
555=item int ecb_ld32 (uint32_t x) 607=item int ecb_ld32 (uint32_t x)
556 608
557=item int ecb_ld64 (uint64_t x) 609=item int ecb_ld64 (uint64_t x)
558 610
634 686
635=head2 FLOATING POINT FIDDLING 687=head2 FLOATING POINT FIDDLING
636 688
637=over 4 689=over 4
638 690
691=item ECB_INFINITY
692
693Evaluates to positive infinity if supported by the platform, otherwise to
694a truly huge number.
695
696=item ECB_NAN
697
698Evaluates to a quiet NAN if supported by the platform, otherwise to
699C<ECB_INFINITY>.
700
701=item float ecb_ldexpf (float x, int exp)
702
703Same as C<ldexpf>, but always available.
704
639=item uint32_t ecb_float_to_binary32 (float x) [-UECB_NO_LIBM] 705=item uint32_t ecb_float_to_binary32 (float x) [-UECB_NO_LIBM]
640 706
641=item uint64_t ecb_double_to_binary64 (double x) [-UECB_NO_LIBM] 707=item uint64_t ecb_double_to_binary64 (double x) [-UECB_NO_LIBM]
642 708
643These functions each take an argument in the native C<float> or C<double> 709These functions each take an argument in the native C<float> or C<double>
670 736
671=item float ecb_binary16_to_float (uint16_t x) [-UECB_NO_LIBM] 737=item float ecb_binary16_to_float (uint16_t x) [-UECB_NO_LIBM]
672 738
673=item float ecb_binary32_to_float (uint32_t x) [-UECB_NO_LIBM] 739=item float ecb_binary32_to_float (uint32_t x) [-UECB_NO_LIBM]
674 740
675=item double ecb_binary32_to_double (uint64_t x) [-UECB_NO_LIBM] 741=item double ecb_binary64_to_double (uint64_t x) [-UECB_NO_LIBM]
676 742
677The reverse operation of the previous function - takes the bit 743The reverse operation of the previous function - takes the bit
678representation of an IEEE binary16, binary32 or binary64 number and 744representation of an IEEE binary16, binary32 or binary64 number and
679converts it to the native C<float> or C<double> format. 745converts it to the native C<float> or C<double> format.
680 746
774dependencies on the math library (usually called F<-lm>) - these are 840dependencies on the math library (usually called F<-lm>) - these are
775marked with [-UECB_NO_LIBM]. 841marked with [-UECB_NO_LIBM].
776 842
777=back 843=back
778 844
845=head1 UNDOCUMENTED FUNCTIONALITY
779 846
847F<ecb.h> is full of undocumented functionality as well, some of which is
848intended to be internal-use only, some of which we forgot to document, and
849some of which we hide because we are not sure we will keep the interface
850stable.
851
852While you are welcome to rummage around and use whatever you find useful
853(we can't stop you), keep in mind that we will change undocumented
854functionality in incompatible ways without thinking twice, while we are
855considerably more conservative with documented things.
856
857=head1 AUTHORS
858
859C<libecb> is designed and maintained by:
860
861 Emanuele Giaquinta <e.giaquinta@glauco.it>
862 Marc Alexander Lehmann <schmorp@schmorp.de>
863
864

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines