]> 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
23573244 1/* libgcc routines for the FR30.
fbd26352 2 Copyright (C) 1998-2019 Free Software Foundation, Inc.
4b15dc3c 3
187b36cf 4This file is part of GCC.
4b15dc3c 5
187b36cf 6GCC is free software; you can redistribute it and/or modify it
4b15dc3c 7under the terms of the GNU General Public License as published by the
6bc9506f 8Free Software Foundation; either version 3, or (at your option) any
4b15dc3c 9later version.
10
4b15dc3c 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
6bc9506f 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/>. */
4b15dc3c 24
4b15dc3c 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