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.33 by root, Fri Jun 17 18:46:19 2011 UTC vs.
Revision 1.37 by sf-exg, Wed Aug 24 23:28:47 2011 UTC

396After processing the node, (part of) the next node might already be in 396After processing the node, (part of) the next node might already be in
397cache. 397cache.
398 398
399=back 399=back
400 400
401=head2 BIT FIDDLING / BITSTUFFS 401=head2 BIT FIDDLING / BIT WIZARDRY
402 402
403=over 4 403=over 4
404 404
405=item bool ecb_big_endian () 405=item bool ecb_big_endian ()
406 406
412 412
413On systems that are neither, their return values are unspecified. 413On systems that are neither, their return values are unspecified.
414 414
415=item int ecb_ctz32 (uint32_t x) 415=item int ecb_ctz32 (uint32_t x)
416 416
417=item int ecb_ctz64 (uint64_t x)
418
417Returns the index of the least significant bit set in C<x> (or 419Returns the index of the least significant bit set in C<x> (or
418equivalently the number of bits set to 0 before the least significant bit 420equivalently the number of bits set to 0 before the least significant bit
419set), starting from 0. If C<x> is 0 the result is undefined. For example: 421set), starting from 0. If C<x> is 0 the result is undefined.
422
423For smaller types than C<uint32_t> you can safely use C<ecb_ctz32>.
424
425For example:
420 426
421 ecb_ctz32 (3) = 0 427 ecb_ctz32 (3) = 0
422 ecb_ctz32 (6) = 1 428 ecb_ctz32 (6) = 1
423 429
430=item int ecb_ld32 (uint32_t x)
431
432=item int ecb_ld64 (uint64_t x)
433
434Returns the index of the most significant bit set in C<x>, or the number
435of digits the number requires in binary (so that C<< 2**ld <= x <
4362**(ld+1) >>). If C<x> is 0 the result is undefined. A common use case is
437to compute the integer binary logarithm, i.e. C<floor (log2 (n))>, for
438example to see how many bits a certain number requires to be encoded.
439
440This function is similar to the "count leading zero bits" function, except
441that that one returns how many zero bits are "in front" of the number (in
442the given data type), while C<ecb_ld> returns how many bits the number
443itself requires.
444
445For smaller types than C<uint32_t> you can safely use C<ecb_ld32>.
446
424=item int ecb_popcount32 (uint32_t x) 447=item int ecb_popcount32 (uint32_t x)
425 448
449=item int ecb_popcount64 (uint64_t x)
450
426Returns the number of bits set to 1 in C<x>. For example: 451Returns the number of bits set to 1 in C<x>.
452
453For smaller types than C<uint32_t> you can safely use C<ecb_popcount32>.
454
455For example:
427 456
428 ecb_popcount32 (7) = 3 457 ecb_popcount32 (7) = 3
429 ecb_popcount32 (255) = 8 458 ecb_popcount32 (255) = 8
430 459
431=item uint32_t ecb_bswap16 (uint32_t x) 460=item uint32_t ecb_bswap16 (uint32_t x)
432 461
433=item uint32_t ecb_bswap32 (uint32_t x) 462=item uint32_t ecb_bswap32 (uint32_t x)
434 463
464=item uint64_t ecb_bswap64 (uint64_t x)
465
435These two functions return the value of the 16-bit (32-bit) value C<x> 466These functions return the value of the 16-bit (32-bit, 64-bit) value
436after reversing the order of bytes (0x11223344 becomes 0x44332211). 467C<x> after reversing the order of bytes (0x11223344 becomes 0x44332211 in
468C<ecb_bswap32>).
469
470=item uint8_t ecb_rotl8 (uint8_t x, unsigned int count)
471
472=item uint16_t ecb_rotl16 (uint16_t x, unsigned int count)
473
474=item uint32_t ecb_rotl32 (uint32_t x, unsigned int count)
475
476=item uint64_t ecb_rotl64 (uint64_t x, unsigned int count)
477
478=item uint8_t ecb_rotr8 (uint8_t x, unsigned int count)
479
480=item uint16_t ecb_rotr16 (uint16_t x, unsigned int count)
437 481
438=item uint32_t ecb_rotr32 (uint32_t x, unsigned int count) 482=item uint32_t ecb_rotr32 (uint32_t x, unsigned int count)
439 483
440=item uint32_t ecb_rotl32 (uint32_t x, unsigned int count)
441
442=item uint64_t ecb_rotr64 (uint64_t x, unsigned int count) 484=item uint64_t ecb_rotr64 (uint64_t x, unsigned int count)
443 485
444=item uint64_t ecb_rotl64 (uint64_t x, unsigned int count)
445
446These two functions return the value of C<x> after rotating all the bits 486These two families of functions return the value of C<x> after rotating
447by C<count> positions to the right or left respectively. 487all the bits by C<count> positions to the right (C<ecb_rotr>) or left
488(C<ecb_rotl>).
448 489
449Current GCC versions understand these functions and usually compile them 490Current GCC versions understand these functions and usually compile them
450to "optimal" code (e.g. a single C<roll> on x86). 491to "optimal" code (e.g. a single C<rol> or a combination of C<shld> on
492x86).
451 493
452=back 494=back
453 495
454=head2 ARITHMETIC 496=head2 ARITHMETIC
455 497
479change direction for negative values: 521change direction for negative values:
480 522
481 for (m = -100; m <= 100; ++m) 523 for (m = -100; m <= 100; ++m)
482 int elem = myarray [ecb_mod (m, ecb_array_length (myarray))]; 524 int elem = myarray [ecb_mod (m, ecb_array_length (myarray))];
483 525
526=item x = ecb_div_rd (val, div)
527
528=item x = ecb_div_ru (val, div)
529
530Returns C<val> divided by C<div> rounded down or up, respectively.
531C<val> and C<div> must have integer types and C<div> must be strictly
532positive.
533
484=back 534=back
485 535
486=head2 UTILITY 536=head2 UTILITY
487 537
488=over 4 538=over 4

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines