Age | Commit message (Collapse) | Author | Files | Lines |
|
2009-04-07 Ed Schonberg <schonberg@adacore.com>
* sem_ch8.adb (Restore_Scope_Stack): First_Private_Entity is only
relevant to packages.
2009-04-07 Robert Dewar <dewar@adacore.com>
* sem_attr.adb: Minor reformatting
* sem_ch6.adb: Minor reformatting
From-SVN: r145682
|
|
2009-04-07 Tristan Gingold <gingold@adacore.com>
* socket.c: Add more protections against S_resolvLib_ macros.
2009-04-07 Thomas Quinot <quinot@adacore.com>
* sem_attr.adb: Minor reformatting
2009-04-07 Ed Schonberg <schonberg@adacore.com>
* sem_ch6.adb (New_Overloaded_Entity): New predicate
Is_Overriding_Alias to handle properly types that inherit two homonym
operations that have distinct dispatch table entries.
From-SVN: r145681
|
|
2009-04-07 Emmanuel Briot <briot@adacore.com>
* s-regexp.adb (Create_Mapping): Ignore excaped open parenthesis when
looking for the end of a parenthesis group
2009-04-07 Tristan Gingold <gingold@adacore.com>
* gsocket.h Don't #include resolvLib.h if __RTP__ is defined.
* socket.c Don't use resolvLib_ macros if not defined.
From-SVN: r145680
|
|
2009-04-07 Robert Dewar <dewar@adacore.com>
* g-socket.adb: Minor reformatting.
* g-socthi-mingw.adb: Minor reformatting
* g-sothco.ads: Minor reformatting
* exp_ch4.adb:
(Expand_Concatenate_String): Complete rewrite to generate efficient code
inline instead of relying on external library routines.
* s-strops.ads, s-sopco5.ads, s-sopco5.adb, s-sopco4.ads, s-sopco4.adb,
s-sopco3.ads, s-sopco3.adb, s-strops.adb: Note that this unit is now
obsolescent
2009-04-07 Ed Schonberg <schonberg@adacore.com>
* sem_attr.adb:
(Eval_Attribute): for attributes of array objects that are not strings,
attributes are not static if nominal subtype of object is unconstrained.
2009-04-07 Ed Schonberg <schonberg@adacore.com>
* sem_ch6.adb (New_Overloaded_Entity): If two implicit homonym
operations for a type T in an instance do not override each other,
when T is derived from a formal private type, the corresponding
operations inherited by a type derived from T outside
of the instance do not override each other either.
From-SVN: r145679
|
|
2009-04-07 Robert Dewar <dewar@adacore.com>
(Osint.Fail): Change calling sequence to have one string arg
(Make.Make_Failed): Same change
All callers are adjusted to use concatenation
2009-04-07 Robert Dewar <dewar@adacore.com>
* exp_ch4.adb: Fix documentation typo
2009-04-07 Robert Dewar <dewar@adacore.com>
* tbuild.ads: Minor reformatting
2009-04-07 Javier Miranda <miranda@adacore.com>
* exp_disp.adb (Make_DT): Avoid the generation of the OSD_Table
when compiling under ZFP runtime.
2009-04-07 Robert Dewar <dewar@adacore.com>
* g-comlin.adb: Minor reformatting
2009-04-07 Thomas Quinot <quinot@adacore.com>
* socket.c, g-socthi-vms.adb, g-socthi-vms.ads, g-socthi-vxworks.adb,
g-socthi-vxworks.ads, g-socthi-mingw.adb, g-socthi-mingw.ads,
g-socthi.adb, g-socthi.ads, g-socket.adb, g-socket.ads, g-sothco.ads:
Remove dynamic allocation of Fd_Set in Socket_Set_Type objects.
From-SVN: r145678
|
|
2009-04-07 Robert Dewar <dewar@adacore.com>
* gnat_ugn.texi: Document -gnatDnn/-gnatGnn
* opt.ads (Sprint_Line_Limit): New parameter
* sprint.adb: Usa Sprint_Line_Limit instead of Line_Limit throughout
* switch-c.adb: Recognize -gnatDnnn and -gnatGnnn switches
* usage.adb: Output information for -gnatGnn -gnatDnn
* make.adb: Minor reformatting
* mlib-tgt-specific-vms-alpha.adb: Minor reformatting
* mlib-tgt-specific-vms-ia64.adb: Minor reformatting
From-SVN: r145677
|
|
used if passes as parameters or if...
2009-04-07 Richard Guenther <rguenther@suse.de>
* tree-ssa-alias.c (ref_maybe_used_by_call_p_1): Non-aliased
decls are only used if passes as parameters or if they are
local statics and the call is not to a builtin.
(call_may_clobber_ref_p_1): Likewise.
From-SVN: r145676
|
|
2009-04-07 Robert Dewar <dewar@adacore.com>
* checks.adb:
Remove Assume_Valid parameter from In_Subrange_Of calls
* sem_eval.adb:
(Is_Subrange_Of): Remove Assume_Valid parameter, not needed
(Is_In_Range): Remove incorrect use of Assume_Valid
(Is_Out_Of_Range): Remove incorrect use of Assume_Valid
* sem_eval.ads:
(Is_Subrange_Of): Remove Assume_Valid parameter, not needed
(Is_In_Range): Documentation cleanup
(Is_Out_Of_Range): Documentation cleanup
* gnat_rm.texi:
Add documentation for Assume_No_Invalid_Values pragma
* sem_ch12.adb: Minor reformatting
* sem_ch6.adb: (Check_Conformance): Avoid cascaded errors
* sem_prag.adb: Improve error message.
* gnatchop.adb, osint.ads, sinput.adb, sinput.ads, styleg.adb:
LF/CR no longer recognized as line terminator
* switch.ads: Minor documentation improvement
* vms_data.ads: Minor reformatting
From-SVN: r145675
|
|
From-SVN: r145674
|
|
2009-04-07 Robert Dewar <dewar@adacore.com>
* checks.adb (Determine_Range): Add Assume_Valid parameter
* checks.ads (Determine_Range): Add Assume_Valid parameter
* errout.adb (Error_Msg_NEL): Use Suppress_Loop_Warnings rather than
Is_Null_Loop to suppress warnings in a loop body.
* exp_ch4.adb:
(Rewrite_Comparison): Major rewrite to accomodate invalid values
* exp_ch5.adb:
(Expand_N_Loop_Statement): Delete loop known not to execute
* opt.ads:
(Assume_No_Invalid_Values): Now set to False, and as documented, this
fully enables the proper handling of invalid values.
* sem_attr.adb:
New calling sequence for Is_In_Range
* sem_ch5.adb:
(Analyze_Iteration_Scheme): Accomodate possible invalid values
in determining if a loop range is null.
* sem_eval.adb:
(Is_In_Range): Add Assume_Valid parameter
(Is_Out_Of_Range): Add Assume_Valid_Parameter
(Compile_Time_Compare): Major rewrite to accomodate invalid values and
also to do more accurate and complete range analysis, catching more
cases.
* sem_eval.ads:
(Is_In_Range): Add Assume_Valid parameter
(Is_Out_Of_Range): Add Assume_Valid_Parameter
* sem_util.adb:
New calling sequence for Is_In_Range
* sinfo.adb:
(Suppress_Loop_Warnings): New flag
* sinfo.ads:
(Is_Null_Loop): Update documentation
(Suppress_Loop_Warnings): New flag
* gnat_ugn.texi: Document -gnatB switch
From-SVN: r145672
|
|
From-SVN: r145671
|
|
2009-04-07 Thomas Quinot <quinot@adacore.com>
* exp_ch3.adb: Minor rewording (comments)
2009-04-07 Robert Dewar <dewar@adacore.com>
* exp_disp.adb: Minor reformatting
From-SVN: r145670
|
|
2009-04-07 Paolo Bonzini <bonzini@gnu.org>
* expr.c (do_store_flag): Remove last argument. Simplify code
to avoid duplication of tests already done by can_compare_p.
(expand_expr_real_1): Adjust caller.
From-SVN: r145668
|
|
2009-04-07 Paolo Bonzini <bonzini@gnu.org>
* optabs.c (can_compare_p): Test the predicate of a
cbranch and cstore pattern.
From-SVN: r145667
|
|
2009-04-07 Paolo Bonzini <bonzini@gnu.org>
* expr.c (convert_move): Use emit_store_flag instead of
"emulating" it.
From-SVN: r145666
|
|
2009-04-07 Paolo Bonzini <bonzini@gnu.org>
* config/i386/i386.c (ix86_compare_emitted): Remove.
(ix86_expand_compare, ix86_expand_branch): Handle MODE_CC
ix86_compare_op0 like ix86_compare_emitted used to be handled.
* config/i386/i386.h (ix86_compare_emitted): Remove.
* config/i386/i386.md (stack_protect_test): Set ix86_compare_op0
instead of ix86_compare_emitted.
* config/i386/sync.md (sync_compare_and_swap_cc): Likewise.
From-SVN: r145665
|
|
* gcc-interface/decl.c (gnat_to_gnu_entity) <object>: Test the
underlying type.
* gcc-interface/trans.c (lvalue_required_p): Likewise.
From-SVN: r145663
|
|
2009-04-07 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/trans.c (Attribute_to_gnu) <Max_Size_In_Storage_Elmts>:
Do not convert the result. Remove obsolete comment.
From-SVN: r145662
|
|
* gcc-interface/trans.c (establish_gnat_vms_condition_handler): Clear
DECL_CONTEXT.
(Subprogram_Body_to_gnu): Fix pasto.
From-SVN: r145661
|
|
* gcc-interface/gigi.h (standard_datatypes): Remove ADT_void_type_decl.
(void_type_decl_node): Remove.
(init_gigi_decls): Likewise.
(gnat_install_builtins): Declare.
(record_builtin_type): Likewise.
(create_type_stub_decl): Likewise.
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Void>: Use void_type.
(gnat_to_gnu_entity) <E_Array_Type>: Make fat and thin pointer types
artificial.
<E_Array_Subtype>: Use the index types, not only their name, in the
record giving the names of the bounds, if any.
For a packed array type, make it artificial only if the base type
was artificial as well. Remove redundant statement.
(gnat_to_gnu_entity) <E_Incomplete_Type>: Do not create TYPE_DECL for
dummy types.
Use create_type_stub_decl to build the TYPE_STUB_DECL of types.
(rest_of_type_decl_compilation_no_defer): Likewise.
* gcc-interface/misc.c (gnat_printable_name): Add missing guard.
* gcc-interface/utils.c (make_dummy_type): Always create TYPE_STUB_DECL
and use create_type_stub_decl to build it.
(gnat_pushdecl): Rewrite condition.
(gnat_install_builtins): Remove bogus declaration.
(record_builtin_type): New function.
(finish_record_type): Use create_type_stub_decl to build TYPE_STUB_DECL
of types.
(create_type_stub_decl): New function.
(create_type_decl): Assert that the type is not dummy. If the type
hasn't been named yet, equate the TYPE_STUB_DECL to the created node.
(build_vms_descriptor32): Do not create TYPE_DECL for the descriptor.
(build_vms_descriptor): Likewise.
(init_gigi_decls): Delete and move bulk of code to...
* gcc-interface/trans.c (gigi): ...here. Use record_builtin_type.
(emit_range_check): Add gnat_node parameter.
(emit_index_check): Likewise.
(emit_check): Likewise.
(build_unary_op_trapv): Likewise.
(build_binary_op_trapv): Likewise.
(convert_with_check): Likewise.
(Attribute_to_gnu): Adjust calls for above changes.
(call_to_gnu): Likewise.
(gnat_to_gnu): Likewise.
(assoc_to_constructor): Likewise.
(pos_to_constructor): Likewise.
(Sloc_to_locus): Set BUILTINS_LOCATION for Standard_Location nodes.
(process_type): Do not create TYPE_DECL for dummy types.
From-SVN: r145660
|
|
* gcc-interface/decl.c (gnat_to_gnu_entity): Reorder local variables.
* gcc-interface/trans.c: Fix formatting throughout. Fix comments.
* gcc-interface/utils.c: Fix comments.
From-SVN: r145658
|
|
* decl.c (compile_time_known_address_p): Rewrite and move around.
(gnat_to_gnu_type): Move around.
(get_unpadded_type): Likewise.
* utils.c (update_pointer_to): Use synthetic macro. Tidy comments.
From-SVN: r145654
|
|
From-SVN: r145653
|
|
* gcc-interface/trans.c (check_for_eliminated_entity): New function.
(Attribute_to_gnu): Invoke it for Access- and Address-like attributes.
(call_to_gnu): Invoke it instead of manually checking.
From-SVN: r145652
|
|
2009-04-07 Janus Weil <janus@gcc.gnu.org>
PR fortran/38920
* expr.c (gfc_check_pointer_assign): Enable interface check for
procedure pointers.
* gfortran.h: Add copy_formal_args_intr.
* interface.c (gfc_compare_interfaces): Call gfc_compare_intr_interfaces
if second argument is an intrinsic.
(compare_intr_interfaces): Correctly set attr.function, attr.subroutine
and ts.
(compare_parameter): Call gfc_compare_interfaces also for intrinsics.
* resolve.c (resolve_specific_f0,resolve_specific_s0): Don't resolve
intrinsic interfaces here. Must happen earlier.
(resolve_symbol): Resolution of intrinsic interfaces moved here from
resolve_specific_..., and formal args are now copied from intrinsic
interfaces.
* symbol.c (copy_formal_args_intr): New function to copy the formal
arguments from an intinsic procedure.
2009-04-07 Janus Weil <janus@gcc.gnu.org>
PR fortran/38920
* gfortran.dg/proc_decl_1.f90: Modified.
* gfortran.dg/proc_ptr_11.f90: Extended.
* gfortran.dg/proc_ptr_13.f90: Modified.
From-SVN: r145651
|
|
2009-04-07 Andrew Stubbs <ams@codesourcery.com>
* config.gcc (sh-*-*): Add sysroot-suffix.h to tm_file.
Add t-sysroot-suffix to tmake_file.
* config/print-sysroot-suffix.sh: New file.
* config/t-sysroot-suffix: New file.
From-SVN: r145650
|
|
* libgcc2.c (INFINITY): Use __builtin_huge_val, not __builtin_inf,
as the latter produces a warning when the target does not support
infinity.
From-SVN: r145646
|
|
* dfp.c: Replace type punning assignments with memcpy throughout.
* Makefile.in (dfp.o-warn): Remove.
From-SVN: r145644
|
|
PR target/39634
* config.gcc: Merge powerpc-*-linux* and powerpc64-*-linux*.
Include soft-fp/t-softfp after rs6000/t-linux64.
* config.host: Reorder and merge to match config.gcc change.
From-SVN: r145641
|
|
From-SVN: r145640
|
|
for bitsize types.
* stor-layout.c (set_sizetype): Use the full precision of their
machine mode for bitsize types.
From-SVN: r145631
|
|
2009-04-06 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.md: Revert 2 accidental checkins.
From-SVN: r145630
|
|
PR c++/35146
* pt.c (fn_type_unification): For DEDUCE_EXACT check that
the deduced template arguments give us the parameter types
we're looking for.
From-SVN: r145625
|
|
2009-04-06 Joey Ye <joey.ye@intel.com>
Xuepeng Guo <xuepeng.guo@intel.com>
H.J. Lu <hongjiu.lu@intel.com>
Atom pipeline model, tuning and insn selection.
* config.gcc (atom): Add atom config options and target.
* config/i386/atom.md: New.
* config/i386/i386.c (atom_cost): New cost.
(m_ATOM): New macro flag.
(initial_ix86_tune_features): Set m_ATOM.
(x86_accumulate_outgoing_args): Likewise.
(x86_arch_always_fancy_math_387): Likewise.
(processor_target): Add Atom cost.
(cpu_names): Add Atom cpu name.
(override_options): Set Atom ISA.
(ix86_issue_rate): New case PROCESSOR_ATOM.
(ix86_adjust_cost): Likewise.
* config/i386/i386.h (TARGET_ATOM): New target macro.
(ix86_tune_indices): Add X86_TUNE_OPT_AGU.
(TARGET_OPT_AGU): New target option.
(target_cpu_default): Add TARGET_CPU_DEFAULT_atom.
(processor_type): Add PROCESSOR_ATOM.
* config/i386/i386.md (cpu): Add new value "atom".
(use_carry, movu): New attr.
(atom.md): Include atom.md.
(adddi3_carry_rex64): Set attr "use_carry".
(addqi3_carry): Likewise.
(addhi3_carry): Likewise.
(addsi3_carry): Likewise.
(*addsi3_carry_zext): Likewise.
(subdi3_carry_rex64): Likewise.
(subqi3_carry): Likewise.
(subhi3_carry): Likewise.
(subsi3_carry): Likewise.
(x86_movdicc_0_m1_rex64): Likewise.
(*x86_movdicc_0_m1_se): Likewise.
(x86_movsicc_0_m1): Likewise.
(*x86_movsicc_0_m1_se): Likewise.
(*adddi_1_rex64): Emit add insn as much as possible.
(*addsi_1): Likewise.
(return_internal): Set atom_unit.
(return_internal_long): Likewise.
(return_pop_internal): Likewise.
(*rcpsf2_sse): Set atom_sse_attr attr.
(*qrt<mode>2_sse): Likewise.
(*prefetch_sse): Likewise.
* config/i386/i386-c.c (ix86_target_macros_internal): New case
PROCESSOR_ATOM.
(ix86_target_macros_internal): Likewise.
* config/i386/sse.md (cpu): Set attr "atom_sse_attr".
(*prefetch_sse_rex): Likewise.
(sse_rcpv4sf2): Likewise.
(sse_vmrcpv4sf2): Likewise.
(sse_sqrtv4sf2): Likewise.
(<sse>_vmsqrt<mode>2): Likewise.
(sse_ldmxcsr): Likewise.
(sse_stmxcsr): Likewise.
(*sse_sfence): Likewise.
(sse2_clflush): Likewise.
(*sse2_mfence): Likewise.
(*sse2_lfence): Likewise.
(avx_movup<avxmodesuffixf2c><avxmodesuffix>): Set attr "movu".
(<sse>_movup<ssemodesuffixf2c>): Likewise.
(avx_movdqu<avxmodesuffix>): Likewise.
(avx_lddqu<avxmodesuffix>): Likewise.
(sse2_movntv2di): Change attr "type" to "ssemov".
(sse2_movntsi): Likewise.
(rsqrtv8sf2): Change attr "type" to "sseadd".
(sse3_addsubv2df3): Set attr "atom_unit".
(sse3_h<plusminus_insn>v4sf3): Likewise.
(*sse2_pmaddwd): Likewise.
(*vec_extractv2di_1_rex64): Likewise.
(*vec_extractv2di_1_avx): Likewise.
(sse2_psadbw): Likewise.
(ssse3_phaddwv8hi3): Likewise.
(ssse3_phaddwv4hi3): Likewise.
(ssse3_phadddv4si3): Likewise.
(ssse3_phadddv2si3): Likewise.
(ssse3_phaddswv8hi3): Likewise.
(ssse3_phaddswv4hi3): Likewise.
(ssse3_phsubwv8hi3): Likewise.
(ssse3_phsubwv4hi3): Likewise.
(ssse3_phsubdv4si3): Likewise.
(ssse3_phsubdv2si3): Likewise.
(ssse3_phsubswv8hi3): Likewise.
(ssse3_phsubswv4hi3): Likewise.
(ssse3_pmaddubsw128): Likewise.
(sse3_pmaddubsw: Likewise.
(ssse3_palignrti): Likewise.
(ssse3_palignrdi): Likewise.
Co-Authored-By: H.J. Lu <hongjiu.lu@intel.com>
Co-Authored-By: Xuepeng Guo <xuepeng.guo@intel.com>
From-SVN: r145624
|
|
testsuite/
2009-04-06 Laurent GUERBY <laurent@guerby.net>
* lib/gnat.exp: Handle multilib.
libada/
2009-04-06 Laurent GUERBY <laurent@guerby.net>
* Makefile.in (ADA_RTS_DIR): Define.
* Makefile.in (gnatlib-*): Link adainclude and adalib to it.
From-SVN: r145622
|
|
wrong answer)
2009-04-06 Paul Thomas <pault@gcc.gnu.org>
PR fortran/38863
* dependency.c (ref_same_as_full_array): New function.
(gfc_dep_resolver): Call it.
2009-04-06 Paul Thomas <pault@gcc.gnu.org>
PR fortran/38863
* gfortran.dg/dependency_23.f90: New test.
From-SVN: r145621
|
|
From-SVN: r145619
|
|
arguments)
2009-04-06 Richard Guenther <rguenther@suse.de>
PR tree-optimization/28868
* tree-ssa-pre.c (inserted_phi_names): New bitmap to keep track
of which PHI results we inserted.
(insert_into_preds_of_block): Record inserted PHIs.
(eliminate): Eliminate redundant PHI nodes.
(init_pre): Init inserted_phi_names.
* gcc.dg/tree-ssa/ssa-fre-21.c: New testcase.
* gcc.dg/tree-ssa/ssa-sccvn-1.c: Adjust.
* gcc.dg/tree-ssa/ssa-sccvn-2.c: Likewise.
* gcc.dg/tree-ssa/ssa-sccvn-4.c: Likewise.
From-SVN: r145607
|
|
and -Os sincos one)
2009-04-06 Richard Guenther <rguenther@suse.de>
PR tree-optimization/39643
* tree-ssa-ccp.c (ccp_fold): Fold REALPART_EXPRs and
IMAGPART_EXPRs of complex constants.
(execute_fold_all_builtins): If we folded a call queue
TODO_update_address_taken.
From-SVN: r145604
|
|
2009-04-06 Andrew Stubbs <ams@codesourcery.com>
gcc/testsuite/
* gcc.dg/pragma-isr-trapa2.c: Skip test for FPU-less architectures.
From-SVN: r145590
|
|
PR middle-end/39659
* except.c (remove_unreachable_regions): Propagate may_contain_throw
flag.
From-SVN: r145589
|
|
2009-04-06 Andrew Stubbs <ams@codesourcery.com>
* config/sh/lib1funcs.asm (ic_invalidate): Move ICBI out of the
delay slot.
(ic_invalidate_array): Likewise.
From-SVN: r145588
|
|
2009-04-06 Andrew Stubbs <ams@codesourcery.com>
* gcc.target/sh/sh4a-memmovua.c: Include string.h instead of stdlib.h.
2009-04-06 Andrew Stubbs <ams@codesourcery.com>
* gcc.target/sh/sh4a-bitmovua.c (y0): Rename to y_0 to avoid a clash
with the built-in y0, and the subsequent warning.
(y1): Likewise, rename to y_1.
From-SVN: r145587
|
|
for library calls.
* calls.c (emit_library_call_value_1): Fix a problem with parameter
alignment for library calls.
From-SVN: r145586
|
|
2009-04-06 Janus Weil <janus@gcc.gnu.org>
PR fortran/39414
* decl.c (match_procedure_decl): Fix double declaration problems with
PROCEDURE statements.
* symbol.c (gfc_add_type): Ditto.
2009-04-06 Janus Weil <janus@gcc.gnu.org>
PR fortran/39414
* gfortran.dg/proc_decl_21.f90: New.
From-SVN: r145583
|
|
* config.gcc (mingw32 tm_file): Add mingw-stdint.h.
(mingw32 tm clause use_gcc_stdint): Set to wrap.
* config/i386/mingw-stdint.h: New file.
From-SVN: r145582
|
|
2009-04-06 Paul Thomas <pault@gcc.gnu.org>
PR fortran/36091
* trans-array.c (gfc_conv_array_ref): If the symbol has the
temporary attribute use the array_spec for the bounds.
* gfortran.h : Add the temporary field to the structure
'symbol_attribute'.
* trans-stmt.c (forall_make_variable_temp): Set the symbol's
temporary attribute.
2009-04-06 Paul Thomas <pault@gcc.gnu.org
PR fortran/36091
* gfortran.dg/forall_13.f90: Add -fbounds-check option.
From-SVN: r145581
|
|
* gfortran.dg/namelist_51.f90, gfortran.dg/utf8_2.f03,
gfortran.dg/namelist_48.f90, gfortran.dg/read_repeat.f90,
gfortran.dg/streamio_9.f90, gfortran.dg/widechar_IO_1.f90,
gfortran.dg/namelist_50.f90, gfortran.dg/namelist_52.f90,
gfortran.dg/utf8_1.f03, gfortran.dg/namelist_56.f90,
gfortran.dg/namelist_49.f90: Gate test on effective_target
fd_truncate.
* gfortran.dg/widechar_IO_3.f90: Ditto. Fix typo in comment.
From-SVN: r145580
|
|
From-SVN: r145579
|
|
From-SVN: r145578
|