/* * divide.h * * [Generated from divide, 25 September 1996] */ #if !defined(__CC_NORCROFT) || !defined(__arm) #error You must use the Norcroft ARM Compiler for Sapphire programs #endif #pragma include_only_once #pragma force_top_level #ifndef __divide_h #define __divide_h #ifndef __sapphire_h #include "sapphire.h" #endif /*----- Overview ----------------------------------------------------------* * * Functions provided: * * divide * div_unsigned * div10 * div_round * div_u64x32 */ /* --- divide --- * * * On entry: R0 == dividend * R1 == divisor * * On exit: R0 == quotient * R1 == remainder * * Use: A standard divide routine. Fairly speedy, hopefully. * The results are always such that * * |quotient| <= |(divisor/dividend)|, * * |remainder| < |divisor| * * and * * quotient * divisor + remainder == dividend */ extern routine divide; /* --- div_unsigned --- * * * On entry: R0 == dividend * R1 == divisor * * On exit: R0 == quotient * R1 == remainder * * Use: As for divide, except that it considers its operands to be * unsigned. */ extern routine div_unsigned; /* --- div10 --- * * * On entry: R0 == integer to divide * * On exit: R0 == quotient after division by 10 * R1 == remainder after division by 10 * * Use: Divides an integer very quickly by 10. * * [Generated by Straylight divc] */ extern routine div10; /* --- div_round --- * * * On entry: R0 == dividend * R1 == divisor * * On exit: R0 == quotient, rounded to nearest integer * R1 == remainder * * Use: Calculates a rounded-to-nearest quotient, rather than one * rounded towards zero, which is what divide returns you. * * The remainder is fiddled during this process, so that the * properties * * quotient * divisor + remainder == dividend * * and * * |remainder| < |divisor| * * still hold (so the remainder's sign may well change). */ extern routine div_round; /* --- div_u64x32 --- * * * On entry: R0,R1 == dividend (high word in R1) * R2 == divisor * * On exit: R0 == quotient * R1 == remainder * * Use: Divides a 64-bit unsigned value by a 32-bit unsigned value * yielding 32-bit unsigned quotient and remainder. If there * are more than 32 bits of quotient, the return values are * undefined. */ extern routine div_u64x32; /*----- That's all, folks -------------------------------------------------*/ #endif