]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgcc/config/fr30/lib1funcs.S
Update copyright years.
[thirdparty/gcc.git] / libgcc / config / fr30 / lib1funcs.S
CommitLineData
7857f134 1/* libgcc routines for the FR30.
a5544970 2 Copyright (C) 1998-2019 Free Software Foundation, Inc.
309dd885 3
7ec022b2 4This file is part of GCC.
309dd885 5
7ec022b2 6GCC is free software; you can redistribute it and/or modify it
309dd885 7under the terms of the GNU General Public License as published by the
748086b7 8Free Software Foundation; either version 3, or (at your option) any
309dd885
NC
9later version.
10
309dd885
NC
11This file is distributed in the hope that it will be useful, but
12WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14General Public License for more details.
15
748086b7
JJ
16Under Section 7 of GPL version 3, you are granted additional
17permissions described in the GCC Runtime Library Exception, version
183.1, as published by the Free Software Foundation.
19
20You should have received a copy of the GNU General Public License and
21a copy of the GCC Runtime Library Exception along with this program;
22see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23<http://www.gnu.org/licenses/>. */
309dd885 24
309dd885
NC
25 .macro FUNC_START name
26 .text
27 .globl __\name
28 .type __\name, @function
29__\name:
30 .endm
31
32 .macro FUNC_END name
33 .size __\name, . - __\name
34 .endm
35
36 .macro DIV_BODY reg number
37 .if \number
38 DIV_BODY \reg, "\number - 1"
39 div1 \reg
40 .endif
41 .endm
42
43#ifdef L_udivsi3
44FUNC_START udivsi3
45 ;; Perform an unsiged division of r4 / r5 and place the result in r4.
46 ;; Does not handle overflow yet...
47 mov r4, mdl
48 div0u r5
49 DIV_BODY r5 32
50 mov mdl, r4
51 ret
52FUNC_END udivsi3
53#endif /* L_udivsi3 */
54
55#ifdef L_divsi3
56FUNC_START divsi3
57 ;; Perform a siged division of r4 / r5 and place the result in r4.
58 ;; Does not handle overflow yet...
59 mov r4, mdl
60 div0s r5
61 DIV_BODY r5 32
62 div2 r5
63 div3
64 div4s
65 mov mdl, r4
66 ret
67FUNC_END divsi3
68#endif /* L_divsi3 */
69
70#ifdef L_umodsi3
71FUNC_START umodsi3
72 ;; Perform an unsiged division of r4 / r5 and places the remainder in r4.
73 ;; Does not handle overflow yet...
74 mov r4, mdl
75 div0u r5
76 DIV_BODY r5 32
77 mov mdh, r4
78 ret
79FUNC_END umodsi3
80#endif /* L_umodsi3 */
81
82#ifdef L_modsi3
83FUNC_START modsi3
84 ;; Perform a siged division of r4 / r5 and place the remainder in r4.
85 ;; Does not handle overflow yet...
86 mov r4, mdl
87 div0s r5
88 DIV_BODY r5 32
89 div2 r5
90 div3
91 div4s
92 mov mdh, r4
93 ret
94FUNC_END modsi3
95#endif /* L_modsi3 */
96
97#ifdef L_negsi2
98FUNC_START negsi2
99 ldi:8 #0, r0
100 sub r4, r0
101 mov r0, r4
102 ret
103FUNC_END negsi2
104#endif /* L_negsi2 */
105
106#ifdef L_one_cmplsi2
107FUNC_START one_cmplsi2
108 ldi:8 #0xff, r0
109 extsb r0
110 eor r0, r4
111 ret
112FUNC_END one_cmplsi2
113#endif /* L_one_cmplsi2 */
114
115