annotate libquadmath/update-quadmath.py @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 #!/usr/bin/python3
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 # Update libquadmath code from glibc sources.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 # Copyright (C) 2018 Free Software Foundation, Inc.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 # This file is part of the libquadmath library.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 #
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 # Libquadmath is free software; you can redistribute it and/or
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 # modify it under the terms of the GNU Lesser General Public
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 # License as published by the Free Software Foundation; either
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 # version 2.1 of the License, or (at your option) any later version.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 #
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 # Libquadmath is distributed in the hope that it will be useful,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 # Lesser General Public License for more details.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 #
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 # You should have received a copy of the GNU Lesser General Public
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 # License along with libquadmath; if not, see
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 # <https://www.gnu.org/licenses/>.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 # Usage: update-quadmath.py glibc_srcdir quadmath_srcdir
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 import argparse
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 from collections import defaultdict
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 import os.path
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 import re
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 def replace_in_file(repl_map, extra_map, src, dest):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 """Apply the replacements in repl_map, then those in extra_map, to the
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 file src, producing dest."""
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 with open(src, 'r') as src_file:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 text = src_file.read()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 for re_src, re_repl in sorted(repl_map.items()):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 text = re.sub(re_src, re_repl, text)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 for re_src, re_repl in sorted(extra_map.items()):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 text = re.sub(re_src, re_repl, text)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 text = text.rstrip() + '\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 with open(dest, 'w') as dest_file:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 dest_file.write(text)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 def update_sources(glibc_srcdir, quadmath_srcdir):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 """Update libquadmath sources."""
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 glibc_ldbl128 = os.path.join(glibc_srcdir, 'sysdeps/ieee754/ldbl-128')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 glibc_math = os.path.join(glibc_srcdir, 'math')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 quadmath_math = os.path.join(quadmath_srcdir, 'math')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 float128_h = os.path.join(glibc_srcdir,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 'sysdeps/ieee754/float128/float128_private.h')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 repl_map = {}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 # Use float128_private.h to get an initial list of names to
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 # replace for libquadmath.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 repl_names = {}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 with open(float128_h, 'r') as header:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 for line in header:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 line = line.strip()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 if not line.startswith('#define '):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 continue
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 match = re.fullmatch('^#define[ \t]+([a-zA-Z0-9_]+)'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 '[ \t]+([a-zA-Z0-9_]+)', line)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 if not match:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 continue
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 macro = match.group(1)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 result = match.group(2)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 result = result.replace('f128', 'q')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 result = result.replace('__ieee754_', '')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 if result not in ('__expq_table', '__sincosq_table',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67 '__builtin_signbit'):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 result = result.replace('__', '')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 result = result.replace('_do_not_use', '')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70 if result in ('rem_pio2q', 'kernel_sincosq', 'kernel_sinq',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 'kernel_cosq', 'kernel_tanq', 'gammaq_r',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72 'gamma_productq', 'lgamma_negq', 'lgamma_productq',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 'lgammaq_r', 'x2y2m1q'):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 # Internal function names, for which the above removal
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75 # of leading '__' was inappropriate and a leading
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76 # '__quadmath_' needs adding instead. In the
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77 # libquadmath context, lgammaq_r is an internal name.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 result = '__quadmath_' + result
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 if result == 'ieee854_float128_shape_type':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80 result = 'ieee854_float128'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81 if result == 'HUGE_VAL_F128':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82 result = 'HUGE_VALQ'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 repl_names[macro] = result
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
84 # More such names that aren't simply defined as object-like macros
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
85 # in float128_private.h.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
86 repl_names['_Float128'] = '__float128'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87 repl_names['SET_RESTORE_ROUNDL'] = 'SET_RESTORE_ROUNDF128'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88 repl_names['parts32'] = 'words32'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
89 for macro in ('GET_LDOUBLE_LSW64', 'GET_LDOUBLE_MSW64',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
90 'GET_LDOUBLE_WORDS64', 'SET_LDOUBLE_LSW64',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
91 'SET_LDOUBLE_MSW64', 'SET_LDOUBLE_WORDS64'):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
92 repl_names[macro] = macro.replace('LDOUBLE', 'FLT128')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
93 # The classication macros are replaced.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
94 for macro in ('FP_NAN', 'FP_INFINITE', 'FP_ZERO', 'FP_SUBNORMAL',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
95 'FP_NORMAL'):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
96 repl_names[macro] = 'QUAD' + macro
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
97 for macro in ('fpclassify', 'signbit', 'isnan', 'isinf', 'issignaling'):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
98 repl_names[macro] = macro + 'q'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
99 repl_names['isfinite'] = 'finiteq'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
100 # Map comparison macros to the __builtin forms.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
101 for macro in ('isgreater', 'isgreaterequal', 'isless', 'islessequal',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
102 'islessgreater', 'isunordered'):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
103 repl_names[macro] = '__builtin_' + macro
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
104 # Replace macros used in type-generic templates in glibc.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
105 repl_names['FLOAT'] = '__float128'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
106 repl_names['CFLOAT'] = '__complex128'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
107 repl_names['M_NAN'] = 'nanq ("")'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
108 repl_names['M_HUGE_VAL'] = 'HUGE_VALQ'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
109 repl_names['INFINITY'] = '__builtin_inf ()'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
110 for macro in ('MIN_EXP', 'MAX_EXP', 'MIN', 'MAX', 'MANT_DIG', 'EPSILON'):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
111 repl_names['M_%s' % macro] = 'FLT128_%s' % macro
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
112 for macro in ('COPYSIGN', 'FABS', 'SINCOS', 'SCALBN', 'LOG1P', 'ATAN2',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
113 'COSH', 'EXP', 'HYPOT', 'LOG', 'SINH', 'SQRT'):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
114 repl_names['M_%s' % macro] = macro.lower() + 'q'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
115 # Each such name is replaced when it appears as a whole word.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
116 for macro in repl_names:
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
117 repl_map[r'\b%s\b' % macro] = repl_names[macro]
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
118 # Also replace the L macro for constants; likewise M_LIT and M_MLIT.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
119 repl_map[r'\bL *\((.*?)\)'] = r'\1Q'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
120 repl_map[r'\bM_LIT *\((.*?)\)'] = r'\1Q'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
121 repl_map[r'\bM_MLIT *\((.*?)\)'] = r'\1q'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
122 # M_DECL_FUNC and M_SUF need similar replacements.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
123 repl_map[r'\bM_DECL_FUNC *\((?:__)?(?:ieee754_)?(.*?)\)'] = r'\1q'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
124 repl_map[r'\bM_SUF *\((?:__)?(?:ieee754_)?(.*?)\)'] = r'\1q'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
125 # Further adjustments are then needed for certain internal
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
126 # functions called via M_SUF.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
127 repl_map[r'\bx2y2m1q\b'] = '__quadmath_x2y2m1q'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
128 repl_map[r'\bkernel_casinhq\b'] = '__quadmath_kernel_casinhq'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
129 # Replace calls to __set_errno.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
130 repl_map[r'\b__set_errno *\((.*?)\)'] = r'errno = \1'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
131 # Eliminate glibc diagnostic macros.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
132 repl_map[r' *\bDIAG_PUSH_NEEDS_COMMENT;'] = ''
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
133 repl_map[r' *\bDIAG_IGNORE_NEEDS_COMMENT *\(.*?\);'] = ''
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
134 repl_map[r' *\bDIAG_POP_NEEDS_COMMENT;'] = ''
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
135 # Different names used in union.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
136 repl_map[r'\.d\b'] = '.value'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
137 repl_map[r'\bunion ieee854_float128\b'] = 'ieee854_float128'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
138 # Calls to alias and hidden_def macros are all eliminated.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
139 for macro in ('strong_alias', 'weak_alias', 'libm_alias_ldouble',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
140 'declare_mgen_alias', 'declare_mgen_finite_alias',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
141 'libm_hidden_def', 'mathx_hidden_def'):
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
142 repl_map[r'\b%s *\(.*?\);?' % macro] = ''
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
143 # Replace all #includes with a single include of quadmath-imp.h.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
144 repl_map['(\n+#include[^\n]*)+\n+'] = '\n\n#include "quadmath-imp.h"\n\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
145 # Omitted from this list because code comes from more than one
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
146 # glibc source file: rem_pio2.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
147 ldbl_files = {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
148 'e_acoshl.c': 'acoshq.c', 'e_acosl.c': 'acosq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
149 's_asinhl.c': 'asinhq.c', 'e_asinl.c': 'asinq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
150 'e_atan2l.c': 'atan2q.c', 'e_atanhl.c': 'atanhq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
151 's_atanl.c': 'atanq.c', 's_cbrtl.c': 'cbrtq.c', 's_ceill.c': 'ceilq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
152 's_copysignl.c': 'copysignq.c', 'e_coshl.c': 'coshq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
153 's_cosl.c': 'cosq.c', 'k_cosl.c': 'cosq_kernel.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
154 's_erfl.c': 'erfq.c', 's_expm1l.c': 'expm1q.c', 'e_expl.c': 'expq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
155 't_expl.h': 'expq_table.h', 's_fabsl.c': 'fabsq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
156 's_finitel.c': 'finiteq.c', 's_floorl.c': 'floorq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
157 's_fmal.c': 'fmaq.c', 'e_fmodl.c': 'fmodq.c', 's_frexpl.c': 'frexpq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
158 'e_lgammal_r.c': 'lgammaq.c', 'lgamma_negl.c': 'lgammaq_neg.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
159 'lgamma_productl.c': 'lgammaq_product.c', 'e_hypotl.c': 'hypotq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
160 'e_ilogbl.c': 'ilogbq.c', 's_isinfl.c': 'isinfq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
161 's_isnanl.c': 'isnanq.c', 's_issignalingl.c': 'issignalingq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
162 'e_j0l.c': 'j0q.c', 'e_j1l.c': 'j1q.c', 'e_jnl.c': 'jnq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
163 's_llrintl.c': 'llrintq.c', 's_llroundl.c': 'llroundq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
164 'e_log10l.c': 'log10q.c', 's_log1pl.c': 'log1pq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
165 'e_log2l.c': 'log2q.c', 's_logbl.c': 'logbq.c', 'e_logl.c': 'logq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
166 's_lrintl.c': 'lrintq.c', 's_lroundl.c': 'lroundq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
167 's_modfl.c': 'modfq.c', 's_nearbyintl.c': 'nearbyintq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
168 's_nextafterl.c': 'nextafterq.c', 'e_powl.c': 'powq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
169 'e_remainderl.c': 'remainderq.c', 's_remquol.c': 'remquoq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
170 's_rintl.c': 'rintq.c', 's_roundl.c': 'roundq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
171 's_scalblnl.c': 'scalblnq.c', 's_scalbnl.c': 'scalbnq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
172 's_signbitl.c': 'signbitq.c', 't_sincosl.c': 'sincos_table.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
173 's_sincosl.c': 'sincosq.c', 'k_sincosl.c': 'sincosq_kernel.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
174 'e_sinhl.c': 'sinhq.c', 's_sinl.c': 'sinq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
175 'k_sinl.c': 'sinq_kernel.c', 's_tanhl.c': 'tanhq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
176 's_tanl.c': 'tanq.c', 'k_tanl.c': 'tanq_kernel.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
177 'e_gammal_r.c': 'tgammaq.c', 'gamma_productl.c': 'tgammaq_product.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
178 's_truncl.c': 'truncq.c', 'x2y2m1l.c': 'x2y2m1q.c'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
179 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
180 template_files = {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
181 's_cacosh_template.c': 'cacoshq.c', 's_cacos_template.c': 'cacosq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
182 's_casinh_template.c': 'casinhq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
183 'k_casinh_template.c': 'casinhq_kernel.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
184 's_casin_template.c': 'casinq.c', 's_catanh_template.c': 'catanhq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
185 's_catan_template.c': 'catanq.c', 's_ccosh_template.c': 'ccoshq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
186 's_cexp_template.c': 'cexpq.c', 'cimag_template.c': 'cimagq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
187 's_clog10_template.c': 'clog10q.c', 's_clog_template.c': 'clogq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
188 'conj_template.c': 'conjq.c', 's_cproj_template.c': 'cprojq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
189 'creal_template.c': 'crealq.c', 's_csinh_template.c': 'csinhq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
190 's_csin_template.c': 'csinq.c', 's_csqrt_template.c': 'csqrtq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
191 's_ctanh_template.c': 'ctanhq.c', 's_ctan_template.c': 'ctanq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
192 'e_exp2_template.c': 'exp2q.c', 's_fdim_template.c': 'fdimq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
193 's_fmax_template.c': 'fmaxq.c', 's_fmin_template.c': 'fminq.c',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
194 's_ldexp_template.c': 'ldexpq.c'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
195 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
196 # Some files have extra substitutions to apply.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
197 extra_maps = defaultdict(dict)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
198 extra_maps['expq.c'] = {r'#include "quadmath-imp\.h"\n':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
199 '#include "quadmath-imp.h"\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
200 '#include "expq_table.h"\n'}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
201 extra_maps['ilogbq.c'] = {r'#include "quadmath-imp\.h"\n':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
202 '#include <math.h>\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
203 '#include "quadmath-imp.h"\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
204 '#ifndef FP_ILOGB0\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
205 '# define FP_ILOGB0 INT_MIN\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
206 '#endif\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
207 '#ifndef FP_ILOGBNAN\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
208 '# define FP_ILOGBNAN INT_MAX\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
209 '#endif\n',
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
210 r'return ([A-Z0-9_]+);':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
211 r'{ errno = EDOM; feraiseexcept (FE_INVALID); '
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
212 r'return \1; }'}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
213 extra_maps['lgammaq.c'] = {r'#include "quadmath-imp\.h"\n':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
214 '#include "quadmath-imp.h"\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
215 '#ifdef HAVE_MATH_H_SIGNGAM\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
216 '# include <math.h>\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
217 '#endif\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
218 '__float128\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
219 'lgammaq (__float128 x)\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
220 '{\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
221 '#ifndef HAVE_MATH_H_SIGNGAM\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
222 ' int signgam;\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
223 '#endif\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
224 ' return __quadmath_lgammaq_r (x, &signgam);\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
225 '}\n'}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
226 extra_maps['tgammaq.c'] = {r'#include "quadmath-imp\.h"\n':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
227 '#include "quadmath-imp.h"\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
228 '__float128\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
229 'tgammaq (__float128 x)\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
230 '{\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
231 ' int sign;\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
232 ' __float128 ret;\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
233 ' ret = __quadmath_gammaq_r (x, &sign);\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
234 ' return sign < 0 ? -ret : ret;\n'
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
235 '}\n'}
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
236 for src, dest in ldbl_files.items():
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
237 replace_in_file(repl_map, extra_maps[dest],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
238 os.path.join(glibc_ldbl128, src),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
239 os.path.join(quadmath_math, dest))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
240 for src, dest in template_files.items():
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
241 replace_in_file(repl_map, extra_maps[dest],
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
242 os.path.join(glibc_math, src),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
243 os.path.join(quadmath_math, dest))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
244
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
245 def main():
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
246 parser = argparse.ArgumentParser(description='Update libquadmath code.')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
247 parser.add_argument('glibc_srcdir', help='glibc source directory')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
248 parser.add_argument('quadmath_srcdir', help='libquadmath source directory')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
249 args = parser.parse_args()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
250 update_sources(args.glibc_srcdir, args.quadmath_srcdir)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
251
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
252
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
253 if __name__ == '__main__':
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
254 main()