]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgcc/config/nios2/lib2-divmod-hi.c
Update copyright years.
[thirdparty/gcc.git] / libgcc / config / nios2 / lib2-divmod-hi.c
CommitLineData
fbd26352 1/* Copyright (C) 2012-2019 Free Software Foundation, Inc.
de65406d 2 Contributed by Altera and Mentor Graphics, Inc.
3
4This file is free software; you can redistribute it and/or modify it
5under the terms of the GNU General Public License as published by the
6Free Software Foundation; either version 3, or (at your option) any
7later version.
8
9This file is distributed in the hope that it will be useful, but
10WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12General Public License for more details.
13
14Under Section 7 of GPL version 3, you are granted additional
15permissions described in the GCC Runtime Library Exception, version
163.1, as published by the Free Software Foundation.
17
18You should have received a copy of the GNU General Public License and
19a copy of the GCC Runtime Library Exception along with this program;
20see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
21<http://www.gnu.org/licenses/>. */
22
23#include "lib2-nios2.h"
24
25/* 16-bit HI divide and modulo as used in Nios II. */
26
27static UHItype
28udivmodhi4 (UHItype num, UHItype den, word_type modwanted)
29{
30 UHItype bit = 1;
31 UHItype res = 0;
32
33 while (den < num && bit && !(den & (1L<<15)))
34 {
35 den <<=1;
36 bit <<=1;
37 }
38 while (bit)
39 {
40 if (num >= den)
41 {
42 num -= den;
43 res |= bit;
44 }
45 bit >>=1;
46 den >>=1;
47 }
48 if (modwanted)
49 return num;
50 return res;
51}
52
53
54HItype
55__divhi3 (HItype a, HItype b)
56{
57 word_type neg = 0;
58 HItype res;
59
60 if (a < 0)
61 {
62 a = -a;
63 neg = !neg;
64 }
65
66 if (b < 0)
67 {
68 b = -b;
69 neg = !neg;
70 }
71
72 res = udivmodhi4 (a, b, 0);
73
74 if (neg)
75 res = -res;
76
77 return res;
78}
79
80
81HItype
82__modhi3 (HItype a, HItype b)
83{
84 word_type neg = 0;
85 HItype res;
86
87 if (a < 0)
88 {
89 a = -a;
90 neg = 1;
91 }
92
93 if (b < 0)
94 b = -b;
95
96 res = udivmodhi4 (a, b, 1);
97
98 if (neg)
99 res = -res;
100
101 return res;
102}
103
104
105UHItype
106__udivhi3 (UHItype a, UHItype b)
107{
108 return udivmodhi4 (a, b, 0);
109}
110
111
112UHItype
113__umodhi3 (UHItype a, UHItype b)
114{
115 return udivmodhi4 (a, b, 1);
116}
117