… | |
… | |
490 | } |
490 | } |
491 | |
491 | |
492 | =item ecb_assume (cond) |
492 | =item ecb_assume (cond) |
493 | |
493 | |
494 | Try to tell the compiler that some condition is true, even if it's not |
494 | Try to tell the compiler that some condition is true, even if it's not |
495 | obvious. |
495 | obvious. This is not a function, but a statement: it cannot be used in |
|
|
496 | another expression. |
496 | |
497 | |
497 | This can be used to teach the compiler about invariants or other |
498 | This can be used to teach the compiler about invariants or other |
498 | conditions that might improve code generation, but which are impossible to |
499 | conditions that might improve code generation, but which are impossible to |
499 | deduce form the code itself. |
500 | deduce form the code itself. |
500 | |
501 | |
… | |
… | |
521 | |
522 | |
522 | =item ecb_unreachable () |
523 | =item ecb_unreachable () |
523 | |
524 | |
524 | This function does nothing itself, except tell the compiler that it will |
525 | This function does nothing itself, except tell the compiler that it will |
525 | never be executed. Apart from suppressing a warning in some cases, this |
526 | never be executed. Apart from suppressing a warning in some cases, this |
526 | function can be used to implement C<ecb_assume> or similar functions. |
527 | function can be used to implement C<ecb_assume> or similar functionality. |
527 | |
528 | |
528 | =item ecb_prefetch (addr, rw, locality) |
529 | =item ecb_prefetch (addr, rw, locality) |
529 | |
530 | |
530 | Tells the compiler to try to prefetch memory at the given C<addr>ess |
531 | Tells the compiler to try to prefetch memory at the given C<addr>ess |
531 | for either reading (C<rw> = 0) or writing (C<rw> = 1). A C<locality> of |
532 | for either reading (C<rw> = 0) or writing (C<rw> = 1). A C<locality> of |
… | |
… | |
533 | the data will likely be accessed very often, and values in between mean |
534 | the data will likely be accessed very often, and values in between mean |
534 | something... in between. The memory pointed to by the address does not |
535 | something... in between. The memory pointed to by the address does not |
535 | need to be accessible (it could be a null pointer for example), but C<rw> |
536 | need to be accessible (it could be a null pointer for example), but C<rw> |
536 | and C<locality> must be compile-time constants. |
537 | and C<locality> must be compile-time constants. |
537 | |
538 | |
|
|
539 | This is a statement, not a function: you cannot use it as part of an |
|
|
540 | expression. |
|
|
541 | |
538 | An obvious way to use this is to prefetch some data far away, in a big |
542 | An obvious way to use this is to prefetch some data far away, in a big |
539 | array you loop over. This prefetches memory some 128 array elements later, |
543 | array you loop over. This prefetches memory some 128 array elements later, |
540 | in the hope that it will be ready when the CPU arrives at that location. |
544 | in the hope that it will be ready when the CPU arrives at that location. |
541 | |
545 | |
542 | int sum = 0; |
546 | int sum = 0; |