Supplementing Generated C : Referencing Model Elements : Assigning Values to Rational Statemate Elements : Bit Arrays

Bit Arrays

Bit-arrays are stored in unsigned ints. Since unsigned ints can hold a maximum of 32 bits, bit-arrays larger than 32 bits are stored in arrays of unsigned ints. Arrays of bit-arrays are stored in two dimensional arrays of unsigned ints; The following table lists the available structures. Notice that multiple bit-arrays smaller than 32 bits are NOT packed into the unsigned int.

 

Note: In $STM_ROOT/etc/prt/c/types.h you find the statement: type def unsigned int bit_array.

Bit Array Functions

bit_array *AND(ba1, l_ba1, from1, to1, ba2, l_ba2,
from2, to2)
bit_array *ba1;
int l_ba1;
int from1;
int to1;
bit_array *ba2;
int l_ba2;
int from2;
int to2;

bit_array *NOT (ba1, l_ba1, from1, to1)
bit_array *ba1;
int l_ba1;
int from1;
int to1;

bit_array *OR(ba1, l_ba1, from1, to1, ba2, l_ba2,
from2, to2)
bit_array *ba1;
int l_ba1;
int from1;
int to1;
bit_array *ba2;
int l_ba2;
int from2;
int to2;

bit_array *XOR(ba1, l_ba1, from1, to1, ba2, l_ba2,
from2, to2)
bit_array *ba1;
int l_ba1;
int from1;
int to1;
bit_array *ba2;
int l_ba2;
int from2;
int to2;

 

 

The following bit array function names are mapped through macros to their internal names, because these names are used by Ada runtime libraries, therefore they cannot be defined as functions in the intrinsics. (These same intrinsics are used by C and Ada environment.) It is important to include the types.h header containing these macros.

#define ASHR ashr
#define LSHL lshl
#define LSHR lshr
#define BITS_OF bits_of
#define CONCAT_BA concat_ba
#define EXPAND_BIT expand_bit
#define SIGNED signed_b
#define MINUS minus_b
#define NAND nand_b
#define NOR nor_b
#define NXOR nxor

 

The functions are:

bit_array *concat_ba(ba1,l_ba1, from1, to1, ba2,
l_ba2, from2,to2)
bit_array *ba1;
int l_ba1;
int from1;
int to1;
bit_array *ba2;
int l_ba2;
int from2;
int to2;

bit_array *lshr(ba, len_ba, from, to, shift)
bit_array *ba;
int len_ba;
int from;
int to;
int shift;

bit_array *lshl(ba, len_ba, from, to, shift)
bit_array *ba;
int len_ba;
int from;
int to;
int shift;

int signed_b(ba_val, len, from, to)
bit_array *ba_val;
int len;
int from;
int to;

bit_array *ashr(ba, len_ba, from, to, shift)
bit_array *ba;
int len_ba;
int from;
int to;
int shift;

bit_array *nand_b(ba1, l_ba1, from1, to1, ba2, l_ba2,
from2, to2)
bit_array *ba1;
int l_ba1;
int from1;
int to1;
bit_array *ba2;
int l_ba2;
int from2;
int to2;

bit_array *nor_b(ba1, l_ba1, from1, to1, ba2, l_ba2,
from2, to2)
bit_array *ba1;
int l_ba1;
int from1;
int to1;
bit_array *ba2;
int l_ba2;
int from2;
int to2;

bit_array *nxor(ba1, l_ba1, from1, to1, ba2, l_ba2,
from2, to2)
bit_array *ba1;
int l_ba1;
int from1;
int to1;
bit_array *ba2;
int l_ba2;
int from2;
int to2;

 

Use the following functions to convert between integer and bit-array types:

bit_array *int2ba(int_val)
int int_val;

int ba2int(ba, len, from, to)
bit_array *ba;
int len;
int from;
int to;