Initial revision
[ssr] / StraySrc / Libraries / Sapphire / csapph / h / divide
CommitLineData
2ee739cc 1/*
2 * divide.h
3 *
4 * [Generated from divide, 25 September 1996]
5 */
6
7#if !defined(__CC_NORCROFT) || !defined(__arm)
8 #error You must use the Norcroft ARM Compiler for Sapphire programs
9#endif
10
11#pragma include_only_once
12#pragma force_top_level
13
14#ifndef __divide_h
15#define __divide_h
16
17#ifndef __sapphire_h
18 #include "sapphire.h"
19#endif
20
21/*----- Overview ----------------------------------------------------------*
22 *
23 * Functions provided:
24 *
25 * divide
26 * div_unsigned
27 * div10
28 * div_round
29 * div_u64x32
30 */
31
32/* --- divide --- *
33 *
34 * On entry: R0 == dividend
35 * R1 == divisor
36 *
37 * On exit: R0 == quotient
38 * R1 == remainder
39 *
40 * Use: A standard divide routine. Fairly speedy, hopefully.
41 * The results are always such that
42 *
43 * |quotient| <= |(divisor/dividend)|,
44 *
45 * |remainder| < |divisor|
46 *
47 * and
48 *
49 * quotient * divisor + remainder == dividend
50 */
51
52extern routine divide;
53
54/* --- div_unsigned --- *
55 *
56 * On entry: R0 == dividend
57 * R1 == divisor
58 *
59 * On exit: R0 == quotient
60 * R1 == remainder
61 *
62 * Use: As for divide, except that it considers its operands to be
63 * unsigned.
64 */
65
66extern routine div_unsigned;
67
68/* --- div10 --- *
69 *
70 * On entry: R0 == integer to divide
71 *
72 * On exit: R0 == quotient after division by 10
73 * R1 == remainder after division by 10
74 *
75 * Use: Divides an integer very quickly by 10.
76 *
77 * [Generated by Straylight divc]
78 */
79
80extern routine div10;
81
82/* --- div_round --- *
83 *
84 * On entry: R0 == dividend
85 * R1 == divisor
86 *
87 * On exit: R0 == quotient, rounded to nearest integer
88 * R1 == remainder
89 *
90 * Use: Calculates a rounded-to-nearest quotient, rather than one
91 * rounded towards zero, which is what divide returns you.
92 *
93 * The remainder is fiddled during this process, so that the
94 * properties
95 *
96 * quotient * divisor + remainder == dividend
97 *
98 * and
99 *
100 * |remainder| < |divisor|
101 *
102 * still hold (so the remainder's sign may well change).
103 */
104
105extern routine div_round;
106
107/* --- div_u64x32 --- *
108 *
109 * On entry: R0,R1 == dividend (high word in R1)
110 * R2 == divisor
111 *
112 * On exit: R0 == quotient
113 * R1 == remainder
114 *
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
118 * undefined.
119 */
120
121extern routine div_u64x32;
122
123/*----- That's all, folks -------------------------------------------------*/
124
125#endif