]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgcc/config/libbid/bid128_2_str_macros.h
Update copyright years.
[thirdparty/gcc.git] / libgcc / config / libbid / bid128_2_str_macros.h
CommitLineData
99dee823 1/* Copyright (C) 2007-2021 Free Software Foundation, Inc.
200359e8
L
2
3This file is part of GCC.
4
5GCC is free software; you can redistribute it and/or modify it under
6the terms of the GNU General Public License as published by the Free
748086b7 7Software Foundation; either version 3, or (at your option) any later
200359e8
L
8version.
9
200359e8
L
10GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11WARRANTY; without even the implied warranty of MERCHANTABILITY or
12FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13for more details.
14
748086b7
JJ
15Under Section 7 of GPL version 3, you are granted additional
16permissions described in the GCC Runtime Library Exception, version
173.1, as published by the Free Software Foundation.
18
19You should have received a copy of the GNU General Public License and
20a copy of the GCC Runtime Library Exception along with this program;
21see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22<http://www.gnu.org/licenses/>. */
200359e8
L
23
24#define __L0_Normalize_10to18( X_hi, X_lo ) \
25{ \
26UINT64 L0_tmp; \
b2a00c89
L
27L0_tmp = (X_lo) + Twoto60_m_10to18; \
28if (L0_tmp & Twoto60) \
200359e8
L
29 {(X_hi)=(X_hi)+1;(X_lo)=((L0_tmp<<4)>>4);} \
30}
31
32
33#define __L0_Normalize_10to9( X_hi, X_lo ) \
34{ \
35UINT32 L0_tmp; \
b2a00c89 36L0_tmp = (X_lo) + Twoto30_m_10to9; \
200359e8
L
37if (L0_tmp & 0x40000000) \
38 {(X_hi)=(X_hi)+1;(X_lo)=((L0_tmp<<2)>>2);} \
39}
40
41
42#define __L0_Split_MiDi_2( X, ptr ) \
43{ \
44UINT32 L0_head, L0_tail, L0_tmp; \
45 L0_head = (X) >> 10; \
46 L0_tail = ((X)&(0x03FF))+(L0_head<<5)-(L0_head<<3); \
47 L0_tmp = (L0_tail)>>10; L0_head += L0_tmp; \
48 L0_tail = (L0_tail&(0x03FF))+(L0_tmp<<5)-(L0_tmp<<3); \
49 if (L0_tail > 999){L0_tail -= 1000; L0_head += 1;} \
50 *((ptr)++) = L0_head; *((ptr)++) = L0_tail; \
51}
52
53
54#define __L0_Split_MiDi_3( X, ptr ) \
55{ \
56UINT32 L0_X, L0_head, L0_mid, L0_tail, L0_tmp; \
57 L0_X = (UINT32)((X)); \
58 L0_head = ((L0_X>>17)*34359)>>18; \
59 L0_X -= L0_head*1000000; \
60 if (L0_X >= 1000000){L0_X -= 1000000;L0_head+=1;} \
61 L0_mid = L0_X >> 10; \
62 L0_tail = (L0_X & (0x03FF))+(L0_mid<<5)-(L0_mid<<3); \
63 L0_tmp = (L0_tail)>>10; L0_mid += L0_tmp; \
64 L0_tail = (L0_tail&(0x3FF))+(L0_tmp<<5)-(L0_tmp<<3); \
65 if (L0_tail>999){L0_tail-=1000;L0_mid+=1;} \
66 *((ptr)++)=L0_head;*((ptr)++)=L0_mid; \
67 *((ptr)++)=L0_tail; \
68}
69
70#define __L1_Split_MiDi_6( X, ptr ) \
71{ \
72UINT32 L1_X_hi, L1_X_lo; \
73UINT64 L1_Xhi_64, L1_Xlo_64; \
b2a00c89
L
74L1_Xhi_64 = ( ((X)>>28)*Inv_Tento9 ) >> 33; \
75L1_Xlo_64 = (X) - L1_Xhi_64*(UINT64)Tento9; \
76if (L1_Xlo_64 >= (UINT64)Tento9) \
77 {L1_Xlo_64-=(UINT64)Tento9;L1_Xhi_64+=1;} \
200359e8
L
78L1_X_hi=(UINT32)L1_Xhi_64; L1_X_lo=(UINT32)L1_Xlo_64; \
79__L0_Split_MiDi_3(L1_X_hi,(ptr)); \
80__L0_Split_MiDi_3(L1_X_lo,(ptr)); \
81}
82
83#define __L1_Split_MiDi_6_Lead( X, ptr ) \
84{ \
85UINT32 L1_X_hi, L1_X_lo; \
86UINT64 L1_Xhi_64, L1_Xlo_64; \
b2a00c89
L
87if ((X)>=(UINT64)Tento9){ \
88 L1_Xhi_64 = ( ((X)>>28)*Inv_Tento9 ) >> 33; \
89 L1_Xlo_64 = (X) - L1_Xhi_64*(UINT64)Tento9; \
90 if (L1_Xlo_64 >= (UINT64)Tento9) \
91 {L1_Xlo_64-=(UINT64)Tento9;L1_Xhi_64+=1;} \
200359e8
L
92 L1_X_hi=(UINT32)L1_Xhi_64; \
93 L1_X_lo=(UINT32)L1_Xlo_64; \
b2a00c89 94 if (L1_X_hi>=Tento6){ \
200359e8
L
95 __L0_Split_MiDi_3(L1_X_hi,(ptr)); \
96 __L0_Split_MiDi_3(L1_X_lo,(ptr)); \
97 } \
b2a00c89 98 else if (L1_X_hi>=Tento3){ \
200359e8
L
99 __L0_Split_MiDi_2(L1_X_hi,(ptr)); \
100 __L0_Split_MiDi_3(L1_X_lo,(ptr)); \
101 } \
102 else { \
103 *((ptr)++) = L1_X_hi; \
104 __L0_Split_MiDi_3(L1_X_lo,(ptr)); \
105 } \
106} \
107else { \
108 L1_X_lo = (UINT32)(X); \
b2a00c89 109 if (L1_X_lo>=Tento6){ \
200359e8
L
110 __L0_Split_MiDi_3(L1_X_lo,(ptr)); \
111 } \
b2a00c89 112 else if (L1_X_lo>=Tento3){ \
200359e8
L
113 __L0_Split_MiDi_2(L1_X_lo,(ptr)); \
114 } \
115 else { \
116 *((ptr)++) = L1_X_lo; \
117 } \
118} \
119}
120
121
122#define __L0_MiDi2Str( X, c_ptr ) \
123{ \
124char *L0_src; \
b2a00c89 125 L0_src = midi_tbl[(X)]; \
200359e8
L
126 *((c_ptr)++) = *(L0_src++); \
127 *((c_ptr)++) = *(L0_src++); \
128 *((c_ptr)++) = *(L0_src); \
129}
130
131#define __L0_MiDi2Str_Lead( X, c_ptr ) \
132{ \
133char *L0_src; \
b2a00c89 134 L0_src = midi_tbl[(X)]; \
200359e8
L
135 if ((X)>=100){ \
136 *((c_ptr)++) = *(L0_src++); \
137 *((c_ptr)++) = *(L0_src++); \
138 *((c_ptr)++) = *(L0_src); \
139 } \
140 else if ((X)>=10){ \
141 L0_src++; \
142 *((c_ptr)++) = *(L0_src++); \
143 *((c_ptr)++) = *(L0_src); \
144 } \
145 else { \
146 L0_src++;L0_src++; \
147 *((c_ptr)++) = *(L0_src); \
148} \
149}