next up previous contents index
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 up previous contents index
Next: 3.16 Floating Point Support Up: 3. Using SDCC Previous: 3.14.4 Assembler Routine (reentrant)   Contents   Index
2008-12-05