c4e_algo32.h File Reference

(Version 551)

Functions and declarations for 32-bit variables, based on digits. More...

#include "c4e_sys.h"
Include dependency graph for c4e_algo32.h:

Go to the source code of this file.

Data Structures

struct  C4eAlgo32Uint
 A 32-bit unsigned integer composed from digits. More...

Defines

#define C4E_ALGO32_DIGIT_SIZE
 Size of type C4eAlgo32Digit.
#define C4E_ALGO32_DIGITS_PTR(pvar32)
 Return a C4eArchDigit pointer from a C4eAlgo32Uint pointer, referencing the same memory location.
#define C4E_ALGO32_NUM_DIGITS
 This define indicates how many digits are used to emulate a 32-bit unsigned integer.
#define C4E_ALGO32_CAST_DIGITS(p)
 Return a C4eArchDigit pointer from a C4eAlgo32Digit pointer, referencing the same memory location.
#define C4E_ALGO32_CAST_UINT(p)
 Return a C4eAlgo32Uint pointer from a C4eAlgo32Digit pointer, referencing the same memory location.
#define C4E_ALGO32_DIGITS_NUM(size)
 Helper macro which calculates the number of C4eAlgo32Digit elements equivalent to a number of bytes.

Typedefs

typedef C4eAlgo32Uint C4eAlgo32Digit
 Mixed type of C4eAlgo32Uint (a 32-bit unsigned integer, possibly emulated by digits) and C4eArchDigit, which allows safe casting to one of both using macros C4E_ALGO32_CAST_DIGITS() and C4E_ALGO32_CAST_UINT().

Functions

C4eAlgo32Uint c4e_algo32_not (C4eAlgo32Uint var32)
 Bitwise logical negation of an emulated 32-bit number.
C4eAlgo32Uint c4e_algo32_xor (C4eAlgo32Uint a, C4eAlgo32Uint b)
 Bitwise logical XOR (exclusive-or) of two emulated 32-bit numbers.
C4eAlgo32Uint c4e_algo32_or (C4eAlgo32Uint a, C4eAlgo32Uint b)
 Bitwise logical OR of two emulated 32-bit numbers.
C4eAlgo32Uint c4e_algo32_and (C4eAlgo32Uint a, C4eAlgo32Uint b)
 Bitwise logical AND of two emulated 32-bit numbers.
void c4e_algo32_inc (C4eAlgo32Uint *var32)
 Increments an emulated 32-bit number (by one).
C4eAlgo32Uint c4e_algo32_add (C4eAlgo32Uint a, C4eAlgo32Uint b)
 Sum of two emulated 32-bit numbers.
C4eAlgo32Uint c4e_algo32_shl (C4eAlgo32Uint var32, C4eArchUint shift, C4eArchUint8 lsb)
 Shift-left of an emulated 32-bit number by a number of bits.
C4eAlgo32Uint c4e_algo32_shr (C4eAlgo32Uint var32, C4eArchUint shift)
 Shift-right of an emulated 32-bit number by a number of bits.
C4eAlgo32Uint c4e_algo32_rol (C4eAlgo32Uint var32, C4eArchUint shift)
 Rotate-left of an emulated 32-bit number by a number of bits.
C4eAlgo32Uint c4e_algo32_ror (C4eAlgo32Uint var32, C4eArchUint shift)
 Rotate-right of an emulated 32-bit number by a number of bits.

Detailed Description

Functions and declarations for 32-bit variables, based on digits.

Author:
Copyright (C) 2010-2015 Ralf Hoppe <ralf.hoppe@ieee.org>
Version:
Id
c4e_algo32.h 551 2015-03-01 12:37:45Z ralf

Definition in file c4e_algo32.h.


Define Documentation

#define C4E_ALGO32_DIGIT_SIZE

Size of type C4eAlgo32Digit.

Note:
This value is 4U in case the size of C4eArchDigit is less/equal than 4 (typically for 8/16/32-bit machines).

Definition at line 36 of file c4e_algo32.h.

#define C4E_ALGO32_DIGITS_PTR ( pvar32   ) 

Return a C4eArchDigit pointer from a C4eAlgo32Uint pointer, referencing the same memory location.

Note:
If this macro is defined, then the cast from a C4eArchDigit pointer to a C4eAlgo32Uint pointer (using the macro) is safe. If it is not defined then a C4eAlgo32Uint is based on a C4eArchUint32, which typically is the case when the size of C4eArchDigit is greater than 4 bytes (32-bit).
Parameters:
[in] pvar32 A C4eAlgo32Uint pointer.
Returns:
Associated C4eArchDigit pointer.

Definition at line 59 of file c4e_algo32.h.

#define C4E_ALGO32_NUM_DIGITS

This define indicates how many digits are used to emulate a 32-bit unsigned integer.

Note:
If it is not defined, then a native 32-bit unsigned integer is used for type C4eAlgo32Uint (else this type is composed from multiple digits).

Definition at line 69 of file c4e_algo32.h.

#define C4E_ALGO32_CAST_DIGITS (  ) 

Return a C4eArchDigit pointer from a C4eAlgo32Digit pointer, referencing the same memory location.

Parameters:
[in] p A C4eAlgo32Digit pointer
Returns:
Associated C4eArchDigit pointer.

Definition at line 154 of file c4e_algo32.h.

#define C4E_ALGO32_CAST_UINT (  ) 

Return a C4eAlgo32Uint pointer from a C4eAlgo32Digit pointer, referencing the same memory location.

Parameters:
[in] p A C4eAlgo32Digit pointer
Returns:
Associated C4eAlgo32Uint pointer.

Definition at line 155 of file c4e_algo32.h.

#define C4E_ALGO32_DIGITS_NUM ( size   ) 

Helper macro which calculates the number of C4eAlgo32Digit elements equivalent to a number of bytes.

Parameters:
[in] size Number of bytes.
Returns:
Equivalent number of elements of type C4eAlgo32Digit.

Definition at line 172 of file c4e_algo32.h.


Function Documentation

C4eAlgo32Uint c4e_algo32_not ( C4eAlgo32Uint  var32  ) 

Bitwise logical negation of an emulated 32-bit number.

Parameters:
[in] var32 The number to invert bitwise.
Returns:
Result ~ var32.
C4eAlgo32Uint c4e_algo32_xor ( C4eAlgo32Uint  a,
C4eAlgo32Uint  b 
)

Bitwise logical XOR (exclusive-or) of two emulated 32-bit numbers.

Parameters:
[in] a First operand.
[in] b Second operand.
Returns:
Result of a ^ b.
C4eAlgo32Uint c4e_algo32_or ( C4eAlgo32Uint  a,
C4eAlgo32Uint  b 
)

Bitwise logical OR of two emulated 32-bit numbers.

Parameters:
[in] a First operand.
[in] b Second operand.
Returns:
Result of a | b.
C4eAlgo32Uint c4e_algo32_and ( C4eAlgo32Uint  a,
C4eAlgo32Uint  b 
)

Bitwise logical AND of two emulated 32-bit numbers.

Parameters:
[in] a First operand.
[in] b Second operand.
Returns:
Result of a & b.
void c4e_algo32_inc ( C4eAlgo32Uint var32  ) 

Increments an emulated 32-bit number (by one).

Parameters:
[in,out] var32 The number to increment modulo $ 2^{32} $.
C4eAlgo32Uint c4e_algo32_add ( C4eAlgo32Uint  a,
C4eAlgo32Uint  b 
)

Sum of two emulated 32-bit numbers.

Parameters:
[in] a First summand.
[in] b Second summand.
Returns:
Result of $ a + b \bmod 2^{32} $.
C4eAlgo32Uint c4e_algo32_shl ( C4eAlgo32Uint  var32,
C4eArchUint  shift,
C4eArchUint8  lsb 
)

Shift-left of an emulated 32-bit number by a number of bits.

Precondition:
The value lsb must fit into the least significant bits, which are cleared while left-shifting var32.
Parameters:
[in] var32 32-bit variable to be shifted left.
[in] shift The number of bits x shall be shifted left.
[in] lsb Least significant byte, which is or'ed in to the return value (after the left-shift).
Returns:
32-bit variable var32 shifted left by shift bits.
C4eAlgo32Uint c4e_algo32_shr ( C4eAlgo32Uint  var32,
C4eArchUint  shift 
)

Shift-right of an emulated 32-bit number by a number of bits.

Parameters:
[in] var32 32-bit variable to be shifted right.
[in] shift The number of bits x shall be shifted right.
Returns:
32-bit variable var32 shifted right by shift bits.
C4eAlgo32Uint c4e_algo32_rol ( C4eAlgo32Uint  var32,
C4eArchUint  shift 
)

Rotate-left of an emulated 32-bit number by a number of bits.

Parameters:
[in] var32 32-bit variable to be rotated left.
[in] shift The number of bits x shall be rotated left.
Returns:
32-bit variable var32 rotated left by shift bits.
C4eAlgo32Uint c4e_algo32_ror ( C4eAlgo32Uint  var32,
C4eArchUint  shift 
)

Rotate-right of an emulated 32-bit number by a number of bits.

Parameters:
[in] var32 32-bit variable to be rotated right.
[in] shift The number of bits x shall be rotated right.
Returns:
32-bit variable var32 rotated right by shift bits.