]> git.ipfire.org Git - thirdparty/kernel/linux.git/blame - arch/h8300/lib/moddivsi3.S
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[thirdparty/kernel/linux.git] / arch / h8300 / lib / moddivsi3.S
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
a71a29de
YS
2#include "libgcc.h"
3
4; numerator in A0/A1
5; denominator in A2/A3
6 .global __modsi3
7__modsi3:
8 PUSHP S2P
9 bsr modnorm
10 bsr __divsi3
11 mov.l er3,er0
12 bra exitdiv
13
14 .global __umodsi3
15__umodsi3:
16 bsr __udivsi3:16
17 mov.l er3,er0
18 rts
19
20 .global __divsi3
21__divsi3:
22 PUSHP S2P
23 bsr divnorm
24 bsr __udivsi3:16
25
26 ; examine what the sign should be
27exitdiv:
28 btst #3,S2L
29 beq reti
30
31 ; should be -ve
32 neg.l A0P
33
34reti:
35 POPP S2P
36 rts
37
38divnorm:
39 mov.l A0P,A0P ; is the numerator -ve
40 stc ccr,S2L ; keep the sign in bit 3 of S2L
41 bge postive
42
43 neg.l A0P ; negate arg
44
45postive:
46 mov.l A1P,A1P ; is the denominator -ve
47 bge postive2
48
49 neg.l A1P ; negate arg
50 xor.b #0x08,S2L ; toggle the result sign
51
52postive2:
53 rts
54
55;; Basically the same, except that the sign of the divisor determines
56;; the sign.
57modnorm:
58 mov.l A0P,A0P ; is the numerator -ve
59 stc ccr,S2L ; keep the sign in bit 3 of S2L
60 bge mpostive
61
62 neg.l A0P ; negate arg
63
64mpostive:
65 mov.l A1P,A1P ; is the denominator -ve
66 bge mpostive2
67
68 neg.l A1P ; negate arg
69
70mpostive2:
71 rts
72
73 .end