4 * [Generated from divide, 25 September 1996]
7 #if !defined(__CC_NORCROFT) || !defined(__arm)
8 #error You must use the Norcroft ARM Compiler for Sapphire programs
11 #pragma include_only_once
12 #pragma force_top_level
21 /*----- Overview ----------------------------------------------------------*
34 * On entry: R0 == dividend
37 * On exit: R0 == quotient
40 * Use: A standard divide routine. Fairly speedy, hopefully.
41 * The results are always such that
43 * |quotient| <= |(divisor/dividend)|,
45 * |remainder| < |divisor|
49 * quotient * divisor + remainder == dividend
52 extern routine divide;
54 /* --- div_unsigned --- *
56 * On entry: R0 == dividend
59 * On exit: R0 == quotient
62 * Use: As for divide, except that it considers its operands to be
66 extern routine div_unsigned;
70 * On entry: R0 == integer to divide
72 * On exit: R0 == quotient after division by 10
73 * R1 == remainder after division by 10
75 * Use: Divides an integer very quickly by 10.
77 * [Generated by Straylight divc]
82 /* --- div_round --- *
84 * On entry: R0 == dividend
87 * On exit: R0 == quotient, rounded to nearest integer
90 * Use: Calculates a rounded-to-nearest quotient, rather than one
91 * rounded towards zero, which is what divide returns you.
93 * The remainder is fiddled during this process, so that the
96 * quotient * divisor + remainder == dividend
100 * |remainder| < |divisor|
102 * still hold (so the remainder's sign may well change).
105 extern routine div_round;
107 /* --- div_u64x32 --- *
109 * On entry: R0,R1 == dividend (high word in R1)
112 * On exit: R0 == quotient
115 * Use: Divides a 64-bit unsigned value by a 32-bit unsigned value
116 * yielding 32-bit unsigned quotient and remainder. If there
117 * are more than 32 bits of quotient, the return values are
121 extern routine div_u64x32;
123 /*----- That's all, folks -------------------------------------------------*/