3.15 int (16 bit) and long (32 bit) Support

Next: 3.16 Floating Point Support Up: 3. Using SDCC Previous: 3.14.4 Assembler Routine (reentrant) Contents Index

#
3.15 int (16 bit) and long (32 bit) Support

For signed & unsigned int (16 bit) and long (32 bit) variables, division, multiplication and modulus operations are implemented by support routines. These support routines are all developed in ANSI-C to facilitate porting to other MCUs, although some model specific assembler optimizations are used. The following files contain the described routines, all of them can be found in <installdir>/share/sdcc/lib.

Function | Description
--- | ---
_mulint.c | 16 bit multiplication
_divsint.c | signed 16 bit division (calls _divuint)
_divuint.c | unsigned 16 bit division
_modsint.c | signed 16 bit modulus (calls _moduint)
_moduint.c | unsigned 16 bit modulus
_mullong.c | 32 bit multiplication
_divslong.c | signed 32 division (calls _divulong)
_divulong.c | unsigned 32 division
_modslong.c | signed 32 bit modulus (calls _modulong)
_modulong.c | unsigned 32 bit modulus

Since they are compiled as non-reentrant, interrupt service routines should not do any of the above operations. If this is unavoidable then the above routines will need to be compiled with the --stack-auto option, after which the source program will have to be compiled with --int-long-reent option. Notice that you don't have to call these routines directly. The compiler will use them automatically every time an integer operation is required.

Next: 3.16 Floating Point Support Up: 3. Using SDCC Previous: 3.14.4 Assembler Routine (reentrant) Contents Index