]>
Commit | Line | Data |
---|---|---|
750930c1 MN |
1 | Sat Sep 19 23:58:07 1998 Melissa O'Neill <oneill@cs.sfu.ca> |
2 | ||
3 | * configure.in: Disable collect2 for nextstep. Instead use | |
4 | crtbegin/crtend. | |
5 | * configure: Rebuilt. | |
6 | * config/nextstep.h (STARTFILE_SPEC): Add crtbegin. | |
7 | (ENDFILE_SPEC): Define. | |
8 | (OBJECT_FORMAT_MACHO): Define. | |
9 | (EH_FRAME_SECTION_ASM_OP): Define. | |
10 | * crtstuff.c: Handle MACHO. | |
11 | ||
655d03a8 RL |
12 | Sun Sep 20 00:24:24 1998 Robert Lipe <robertl@dgii.com> |
13 | ||
14 | * config/i386/sco5.h (TARGET_MEM_FUNCTIONS): Define. | |
15 | ||
b567319f TG |
16 | 1998-09-19 Torbjorn Granlund <tege@matematik.su.se> |
17 | ||
18 | * fp-bit.c (pack_d): Do not clear SIGN when fraction is 0. | |
19 | (_fpadd_parts): Get sign right for 0. | |
20 | ||
9949a9f2 MH |
21 | 1998-09-19 Michael Hayes <m.hayes@elec.canterbury.ac.nz> |
22 | ||
23 | * ginclude/varargs.h: Add support for C4x target. | |
24 | * ginclude/stdargs.h: Likewise. | |
25 | ||
3fe5612d RH |
26 | Sat Sep 19 12:05:09 1998 Richard Henderson <rth@cygnus.com> |
27 | ||
28 | * alpha.c (alpha_return_addr): SET should be VOIDmode. | |
29 | (alpha_emit_set_long_const): Rewrite to be callable from reload | |
30 | and 32-bit hosts. | |
31 | (alpha_expand_epilogue): Update for alpha_emit_set_long_const. | |
32 | * alpha.md (movdi): Likewise. | |
33 | ||
332072db RE |
34 | Sat Sep 19 07:33:36 1998 Richard Earnshaw (rearnsha@arm.com) |
35 | ||
36 | * arm.c (add_constant): New parameter address_only, change caller. | |
37 | Set it non-zero if taking the address of an item in the pool. | |
38 | (arm_reorg): Handle cases where we need the address of an item in | |
39 | the pool. | |
40 | ||
9c8cc54f RE |
41 | * arm.c (bad_signed_byte_operand): Check both arms of a sum in |
42 | a memory address. | |
43 | * arm.md (splits for *extendqihi_insn and *extendqisi_insn): Handle | |
44 | memory addresses that are not in standard canonical form. | |
45 | ||
cb0ca284 MH |
46 | Sat Sep 19 01:00:32 1998 Michael Hayes (mph@elec.canterbury.ac.nz) |
47 | ||
48 | * README.C4X: New file with information about the c4x ports. | |
49 | * ginclude/va-c4x.h: New file for c4x varargs support. | |
50 | * config/c4x: New directory with c4x port files. | |
51 | ||
f10df53c JL |
52 | Fri Sep 18 22:52:05 1998 Jeffrey A Law (law@cygnus.com) |
53 | ||
54 | * reload.c (find_reloads): Do not replace a pseudo with | |
55 | (MEM (reg_equiv_addr)) in the initializing insn for the | |
56 | pseudo. | |
57 | ||
5accd822 DE |
58 | Fri Sep 18 23:50:56 1998 David Edelsohn <edelsohn@mhpcc.edu> |
59 | ||
60 | * toplev.c (rest_of_compilation): Set bct_p on second call to | |
61 | loop_optimize. | |
62 | * loop.c (loop_optimize, scan_loop, strength_reduce): New argument | |
63 | bct_p. | |
64 | (strength_reduce): Only call analyze_loop_iterations and | |
65 | insert_bct if bct_p set. | |
66 | (check_dbra_loop): Fix typo. | |
67 | (insert_bct): Use word_mode instead of SImode. | |
68 | (instrument_loop_bct): Likewise. Do not delete iteration count | |
69 | condition code generation insn. Initialize iteration count before | |
70 | loop start. | |
71 | * rtl.h (loop_optimize): Update prototype. | |
72 | ||
73 | * ginclude/va-ppc.h (va_arg): longlong types in overflow area are | |
74 | not doubleword aligned. | |
75 | ||
76 | * rs6000.c (optimization_options): New function. | |
77 | (secondary_reload_class): Only call true_regnum for PSEUDO_REGs. | |
78 | * rs6000.h (OPTIMIZATION_OPTIONS): Define. | |
79 | (REG_ALLOC_ORDER): Allocate highest numbered condition regsiters | |
80 | first; cr1 can be used for FP record condition insns. | |
81 | ||
d2a73f8e NC |
82 | Fri Sep 18 09:44:55 1998 Nick Clifton <nickc@cygnus.com> |
83 | ||
84 | * config/m32r/m32r.h (m32r_block_immediate_operand): Add to | |
85 | PREDICATE_CODES. | |
86 | ||
87 | * config/m32r/m32r.md: Add "movstrsi" and "movstrsi_internal" | |
88 | patterns. | |
89 | ||
90 | * config/m32r/m32r.c (m32r_print_operand): Add 's' and 'p' | |
91 | operators. | |
92 | (block_move_call): New function: Call a library routine to copy a | |
93 | block of memory. | |
94 | (m32r_expand_block_move): New function: Expand a "movstrsi" | |
95 | pattern into a sequence of insns. | |
96 | (m32r_output_block_move): New function: Expand a | |
97 | "movstrsi_internal" pattern into a sequence of assembler opcodes. | |
98 | (m32r_block_immediate_operand): New function: Return true if the | |
99 | RTL is an integer constant, less than or equal to MAX_MOVE_BYTES. | |
100 | ||
7ac2148b AM |
101 | Thu Sep 17 16:42:16 EDT 1998 Andrew MacLeod <amacleod@cygnus.com> |
102 | ||
103 | * except.c (start_catch_handler): Issue 'fatal' instead of 'error' and | |
104 | re-align some code. | |
105 | * libgcc2.c (__eh_rtime_match): fprintf a runtime error. Use <stdio.h>. | |
106 | ||
9d2106a4 R |
107 | Thu Sep 17 12:24:33 1998 J"orn Rennecke <amylaar@cygnus.co.uk> |
108 | ||
109 | * regmove.c (copy_src_to_dest): Check that modes match. | |
110 | ||
086afc19 RL |
111 | Wed Sep 16 22:10:42 1998 Robert Lipe <robertl@dgii.com> |
112 | ||
113 | * config/i386/sco5.h (SUPPORTS_WEAK): True only if targeting ELF. | |
114 | ||
b66a3ac1 RH |
115 | Wed Sep 16 15:24:54 1998 Richard Henderson <rth@cygnus.com> |
116 | ||
117 | * i386.h (PREFERRED_RELOAD_CLASS): Respect an existing class | |
118 | narrower than FLOAT_REGS. | |
119 | ||
0d7138a1 AO |
120 | Wed Sep 16 17:51:00 1998 Alexandre Oliva <oliva@dcc.unicamp.br> |
121 | ||
122 | * cpplib.c: removed OLD_GPLUSPLUS_INCLUDE_DIR | |
123 | * cccp.c: ditto | |
124 | * Makefile.in (old_gxx_include_dir): removed | |
125 | ||
f43a85ca NC |
126 | Wed Sep 16 12:29:22 1998 Nick Clifton <nickc@cygnus.com> |
127 | ||
128 | * config/sh/sh.h: Update definition of HANDLE_PRAGMA to match | |
129 | new specification. | |
130 | ||
131 | * config/sh/sh.c (handle_pragma): Rename to sh_handle_pragma(). | |
132 | (sh_handle_pragma): Change function arguments to match new | |
133 | specification for HANDLE_PRAGMA. | |
134 | ||
88dab4f6 KG |
135 | Wed Sep 16 12:43:19 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> |
136 | ||
137 | * gen-protos.c (parse_fn_proto): Cast argument of ISALNUM to | |
138 | `unsigned char'. | |
139 | (main): Mark parameter `argc' with ATTRIBUTE_UNUSED. | |
140 | When generating output, initialize missing struct member to zero. | |
141 | ||
1a8fca8a R |
142 | Wed Sep 16 14:47:43 1998 J"orn Rennecke <amylaar@cygnus.co.uk> |
143 | ||
144 | * regmove.c (copy_src_to_dest): Don't copy if that requires | |
145 | (a) new register(s). | |
146 | ||
f15ebf65 BS |
147 | Wed Sep 16 01:29:12 1998 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de> |
148 | ||
149 | * global.c (reg_allocno): Now static. | |
150 | * reload1.c (reg_allocno): Delete declaration. | |
151 | (order_regs_for_reload): Take no arguments. Don't treat regs | |
152 | allocated by global differently than those allocated by local-alloc. | |
153 | ||
3dbf3a22 KI |
154 | Wed Sep 16 01:09:01 1998 Kamil Iskra <iskra@student.uci.agh.edu.pl> |
155 | ||
b0e982be KI |
156 | * m68k/m68k.c (output_function_prologue): Reverse NO_ADDSUB_Q |
157 | condition, fix format strings. | |
158 | (output_function_epilogue): Likewise. | |
159 | ||
3dbf3a22 KI |
160 | * m68k/m68k.c: Don't include <stdlib.h> directly. |
161 | ||
b86ba9c8 GK |
162 | Wed Sep 16 00:30:56 1998 Geoff Keating <geoffk@ozemail.com.au> |
163 | ||
164 | * gcse.c: New definition NEVER_SET for reg_first_set, reg_last_set, | |
165 | mem_first_set, mem_last_set; because 0 can be a CUID. | |
166 | (oprs_unchanged_p): Use new definition. | |
167 | (record_last_reg_set_info): Likewise. | |
168 | (record_last_mem_set_info): Likewise. | |
169 | (compute_hash_table): Likewise. | |
170 | ||
54d65918 JL |
171 | Tue Sep 15 22:59:52 1998 Jeffrey A Law (law@cygnus.com) |
172 | ||
6f573ff9 JL |
173 | * rs6000.c (output_epilogue): Handle Chill. |
174 | ||
fa88e837 JL |
175 | * mn10200.h (ASM_OUTPUT_DWARF2_ADDR_CONST): Define. |
176 | * mn10300.h (ASM_OUTPUT_DWARF2_ADDR_CONST): Define. | |
177 | ||
0d8e55d8 JL |
178 | * combine.c (make_extraction): If no mode is specified for |
179 | an operand of insv, extv, or extzv, default it to word_mode. | |
180 | (simplify_comparison): Similarly. | |
181 | * expmed.c (store_bit_field): Similarly. | |
182 | (extract_bit_field): Similarly. | |
183 | * function.c (fixup_var_regs_1): Similarly. | |
184 | * recog.c (validate_replace_rtx_1): Similarly. | |
185 | * mips.md (extv, extzv, insv expanders): Default modes for most | |
186 | operands. Handle TARGET_64BIT. | |
187 | (movdi_uld, movdi_usd): New patterns. | |
188 | ||
54d65918 JL |
189 | * pa.c (emit_move_sequence): Do not replace a pseudo with its |
190 | equivalent memory location unless we have been provided a scratch | |
191 | register. Similarly do not call find_replacement unless a | |
192 | scratch register has been provided. | |
193 | ||
c09a3c2e BS |
194 | Tue Sep 15 19:23:01 1998 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de> |
195 | ||
196 | * i386.h (PREFERRED_RELOAD_CLASS): For standard 387 constants, | |
197 | return FLOAT_REGS. | |
198 | ||
71038426 RH |
199 | Tue Sep 15 19:09:06 1998 Richard Henderson <rth@cygnus.com> |
200 | ||
201 | * tree.h (BUILT_IN_CALLER_RETURN_ADDRESS): Unused. Kill. | |
202 | (BUILT_IN_FP, BUILT_IN_SP, BUILT_IN_SET_RETURN_ADDR_REG): Kill. | |
203 | (BUILT_IN_EH_STUB_OLD, BUILT_IN_EH_STUB, BUILT_IN_SET_EH_REGS): Kill. | |
204 | (BUILT_IN_EH_RETURN, BUILT_IN_DWARF_CFA): New. | |
205 | * c-decl.c (init_decl_processing): Update accordingly. | |
206 | * expr.c (expand_builtin): Likewise. | |
207 | ||
208 | * rtl.h (global_rtl): Add cfa entry. | |
209 | (virtual_cfa_rtx, VIRTUAL_CFA_REGNUM): New. | |
210 | (LAST_VIRTUAL_REGISTER): Update. | |
211 | * emit-rtl.c (global_rtl): Add cfa entry. | |
212 | (init_emit): Initialize it. | |
213 | * function.c (cfa_offset): New. | |
214 | (instantiate_virtual_regs): Initialize it. | |
215 | (instantiate_virtual_regs_1): Instantiate virtual_cfa_rtx. | |
216 | (expand_function_end): Call expand_eh_return. | |
217 | * tm.texi (ARG_POINTER_CFA_OFFSET): New. | |
218 | ||
219 | * except.c (current_function_eh_stub_label): Kill. | |
220 | (current_function_eh_old_stub_label): Likwise; update all references. | |
221 | (expand_builtin_set_return_addr_reg): Kill. | |
222 | (expand_builtin_eh_stub_old, expand_builtin_eh_stub): Kill. | |
223 | (expand_builtin_set_eh_regs): Kill. | |
224 | (eh_regs): Produce a third reg for the actual handler address. | |
225 | (eh_return_context, eh_return_stack_adjust): New. | |
226 | (eh_return_handler, eh_return_stub_label): New. | |
227 | (init_eh_for_function): Initialize them. | |
228 | (expand_builtin_eh_return, expand_eh_return): New. | |
229 | * except.h: Update prototypes. | |
230 | * flow.c (find_basic_blocks_1): Update references to the stub label. | |
231 | * function.h (struct function): Kill stub label elements. | |
232 | ||
233 | * libgcc2.c (in_reg_window): For REG_SAVED_REG, check that the | |
234 | register number is one that would be in the previous window. | |
235 | Provide a dummy definition for non-windowed targets. | |
236 | (get_reg_addr): New function. | |
237 | (get_reg, put_reg, copy_reg): Use it. | |
238 | (__throw): Rely on in_reg_window, not INCOMING_REGNO. Kill stub | |
239 | generating code and use __builtin_eh_return. Use __builtin_dwarf_cfa. | |
240 | ||
241 | * alpha.c (alpha_eh_epilogue_sp_ofs): New. | |
242 | (alpha_init_expanders): Initialize it. | |
243 | (alpha_expand_epilogue): Use it. | |
244 | * alpha.h: Declare it. | |
245 | * alpha.md (eh_epilogue): New. | |
246 | ||
247 | * m68h.h (ARG_POINTER_CFA_OFFSET): New. | |
248 | * sparc.h (ARG_POINTER_CFA_OFFSET): New. | |
249 | ||
bb210aaf MM |
250 | Tue Sep 15 19:31:58 1998 Michael Meissner <meissner@cygnus.com> |
251 | ||
252 | * i960.h (CONST_COSTS): Fix thinko. Test flag, not the constant | |
253 | flag bit mask. | |
254 | ||
bf71cd2e AM |
255 | Tue Sep 15 14:10:54 EDT 1998 Andrew MacLeod <amacleod@cygnus.com> |
256 | ||
257 | * except.h (struct eh_entry): Add false_label field. | |
258 | (end_catch_handler): Add prototype. | |
259 | * except.c (push_eh_entry): Set false_label field to NULL_RTX. | |
260 | (start_catch_handler): When using old style exceptions, issue | |
261 | runtime typematch code before continuing with the handler. | |
262 | (end_catch_handler): New function, generates label after handler | |
263 | if needed by older style exceptions. | |
264 | (expand_start_all_catch): No need to check for new style exceptions. | |
265 | (output_exception_table_entry): Only output the first handler label | |
266 | for old style exceptions. | |
267 | * libgcc2.c (__eh_rtime_match): New routine to lump runtime matching | |
268 | mechanism into one function, if a runtime matcher is provided. | |
269 | ||
8a21007c AM |
270 | Tue Sep 15 13:53:59 EDT 1998 Andrew MacLeod <amacleod@cygnus.com> |
271 | ||
272 | * config/i960/i960.h (SLOW_BYTE_ACCESS): Change definition to 1. | |
273 | ||
11d09c08 MM |
274 | Tue Sep 15 09:59:01 1998 Mark Mitchell <mark@markmitchell.com> |
275 | ||
276 | * integrate.c (copy_decl_list): Fix typo. | |
277 | ||
2d81c9bf DM |
278 | Tue Sep 15 04:18:52 1998 David S. Miller <davem@pierdol.cobaltmicro.com> |
279 | ||
280 | * config/sparc/sparc.md (movdf_const_intreg_sp32): Fix length | |
281 | attribute. | |
282 | ||
e12994ab JL |
283 | Mon Sep 14 14:02:53 PDT 1998 Jeff Law (law@cygnus.com) |
284 | ||
285 | * version.c: Bump for snapshot. | |
286 | ||
028d0b2a JL |
287 | Mon Sep 14 10:33:56 PDT 1998 Jeff Law (law@cygnus.com) |
288 | ||
289 | * version.c: Bump for snapshot. | |
290 | ||
466973ed JL |
291 | Mon Sep 14 09:51:05 PDT 1998 Jeff Law (law@cygnus.com) |
292 | ||
293 | * version.c: Bump for snapshot. | |
294 | ||
ad299d9b DM |
295 | Sun Sep 13 22:10:18 1998 David S. Miller <davem@pierdol.cobaltmicro.com> |
296 | ||
297 | * invoke.texi (C Dialect Options): Put back missing @end itemize. | |
298 | ||
1b015bec AO |
299 | Mon Sep 14 02:33:46 1998 Alexandre Oliva <oliva@dcc.unicamp.br> |
300 | ||
301 | * configure.in: remove usage of `!' to negate the result of a | |
302 | command; some common shells do not support it | |
303 | ||
d7496fbb DM |
304 | Sun Sep 13 19:17:35 1998 David S. Miller <davem@pierdol.cobaltmicro.com> |
305 | ||
306 | * configure.in: in sparc9-sol2 config, use 'if test' not | |
307 | brackets. | |
308 | * configure: Rebuilt. | |
309 | ||
310 | * config/sparc/sol2-sld-64.h (SPARC_DEFAULT_CMODEL): Change to | |
311 | CM_MEDANY. | |
312 | (CPP_CPU_SPEC): Do not define _LP64, header files do this. | |
313 | (CPP_CPU_DEFAULT_SPEC): Likewise. | |
314 | * config/sparc/sol2.h (INIT_SUBTARGET_OPTABS): Get the names right | |
315 | for arch64 libfuncs. | |
316 | ||
073149a2 DM |
317 | * config/sparc/sparc.md (goto_handler_and_restore): Allow any mode |
318 | for operand zero. | |
319 | ||
007e8d2a KG |
320 | Sun Sep 13 09:11:59 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> |
321 | ||
322 | * acconfig.h (NEED_DECLARATION_STRSIGNAL): Provide a stub. | |
323 | ||
324 | * collect2.c: Don't declare `sys_siglist' here. | |
325 | (my_strsignal): Prototype and define new function. Use it in | |
326 | place of `sys_siglist' hacks. | |
327 | ||
328 | * mips_tfile.c: Likewise. | |
329 | ||
330 | * configure.in (AC_CHECK_FUNCS): Check for strsignal. | |
331 | (GCC_NEED_DECLARATIONS): Likewise. | |
332 | ||
333 | * system.h (strsignal): Prototype it, if necessary. | |
334 | (sys_siglist): Declare it, if necessary. | |
335 | ||
9655bf95 DM |
336 | Sun Sep 13 04:37:28 1998 David S. Miller <davem@pierdol.cobaltmicro.com> |
337 | ||
338 | * loop.c (move_movables): While removing insn sequences, preserve | |
339 | the next pointer of the most recently deleted insn when we skip | |
340 | over a NOTE. | |
341 | ||
fbe39e48 BE |
342 | Sun Sep 13 08:13:39 1998 Ben Elliston <bje@cygnus.com> |
343 | ||
344 | * objc/config-lang.in: Do not output the name of the selected | |
345 | thread file when building the front-end. The Makefile for the | |
346 | runtime library will do this. | |
347 | ||
348 | * objc/Make-lang.in: Do not build the runtime library or install | |
349 | the Objective C header files. The Makefile for the runtime | |
350 | library will do this. | |
351 | ||
352 | * objc/Makefile.in (all.indirect): Only build the front-end. | |
353 | (compiler): Rename to `frontend'. | |
354 | (obj-runtime): Remove target. | |
355 | (copy-headers): Likewise. | |
356 | (clean): No need to remove `libobjc.a' any longer. | |
357 | ||
b91d2c10 MM |
358 | Sat Sep 12 11:37:19 1998 Michael Meissner <meissner@cygnus.com> |
359 | ||
360 | * rs6000.h ({ASM,CPP}_CPU_SPEC): Add support for all machines | |
361 | supported with -mcpu=xxx. | |
362 | ||
86465af7 DM |
363 | Fri Sep 11 23:55:54 1998 David S. Miller <davem@pierdol.cobaltmicro.com> |
364 | ||
365 | * flow.c (mark_set_1): Recognize multi-register structure return | |
366 | values in CALL insns. | |
367 | (mark_used_regs): Likewise. | |
368 | (count_reg_sets_1): Likewise. | |
369 | (count_reg_references): Likewise. | |
370 | * rtlanal.c (note_stores): Likewise. | |
c0222c21 DM |
371 | (reg_overlap_mentioned_p): Likewise. |
372 | * haifa-sched.c (check_live_1): Likewise. | |
373 | (update_live_1): Likewise. | |
374 | (sched_analyze_1): Likewise. | |
375 | (sched_note_set): Likewise. | |
376 | (birthing_insn_p): Likewise. | |
377 | (attach_deaths): Likewise. | |
378 | ||
379 | * config/sparc/sparc.md (movdf_const_intreg_sp64): Disable. | |
380 | ||
86465af7 | 381 | |
37a29ee7 ED |
382 | Fri Sep 11 22:57:55 1998 Eric Dumazet <dumazet@cosmosbay.com> |
383 | ||
45259482 | 384 | * config/i386/sco5.h (ASM_WEAKEN_LABEL): Defined as in svr4.h. |
37a29ee7 | 385 | |
75bba2a6 DM |
386 | Thu Sep 10 22:02:04 1998 David S. Miller <davem@pierdol.cobaltmicro.com> |
387 | ||
388 | * glimits.h (__LONG_MAX__): Recognize __sparcv9 too. | |
389 | ||
d1accaa3 JJ |
390 | Thu Sep 10 21:19:10 1998 Jakub Jelinek <jj@sunsite.ms.mff.cuni.cz> |
391 | ||
392 | * configure.in: Add check for GAS subsection -1 support. | |
393 | * acconfig.h (HAVE_GAS_SUBSECTION_ORDERING): Add. | |
394 | * configure config.in: Rebuilt. | |
395 | * config/sparc/sparc.h (CASE_VECTOR_MODE): For V9 flag_pic, use | |
396 | SImode is subsection -1 works, else use DImode. | |
397 | (ASM_OUTPUT_ADDR_VEC_START, ASM_OUTPUT_ADDR_VEC_END): Define if | |
398 | subsection -1 works. | |
399 | * config/sparc/sparc.c (sparc_output_addr_vec, | |
400 | sparc_output_addr_diff_vec): Use them if defined. | |
401 | ||
02e24c7a MM |
402 | Thu Sep 10 10:46:01 1998 Mark Mitchell <mark@markmitchell.com> |
403 | ||
404 | * tree.h (DECL_ORIGIN): New macro. | |
405 | * integrate.c (copy_and_set_decl_abstract_origin): New function. | |
406 | (copy_decl_list): Use it. | |
407 | (integrate_parm_decls): Likewise. | |
408 | (integrate_decl_tree): Likewise. | |
409 | * dwarf2out.c (decl_ultimate_origin): Simplify. | |
410 | * dwarfout.c (decl_ultimate_origin): Likewise. | |
411 | * c-decl.c (duplicate_decls): Use DECL_ORIGIN. | |
412 | (pushdecl): Likewise. | |
413 | ||
9517ead8 AG |
414 | Thu Sep 10 08:01:31 1998 Anthony Green <green@cygnus.com> |
415 | ||
416 | * config/rs6000/rs6000.c (output_epilog): Add Java support. | |
417 | ||
95c81fb8 ML |
418 |