[PATCH] Delay splitting addti3/subti3 until first split pass.

2022-05-13 Thread Michael Meissner via Gcc-patches
Add zero_extendditi2. Improve lxvr*x code generation. This pattern adds zero_extendditi2 so that if we are extending DImode that is in a GPR register to TImode in a vector register, the compiler can generate MTVSRDDD. In addition the patterns for generating lxvr{b,h,w,d}x were tuned to allow loa

[COMMITTED] Move VREL values to their own enumerated type.

2022-05-13 Thread Andrew MacLeod via Gcc-patches
When i first wrote the relation code, it seemed like reusing some commonly understood tree codes, like EQ_EXPR, NE_EXPR, LE_EXPR, etc made sense. Fore additional values like VREL_NONE and VREL_EMPTY  (VREL is Value RELation, fwiw)  I used nearby tree odes such that they formed a contiguous ra

Re: [PATCH] OpenMP, C++: Add template support for the has_device_addr clause.

2022-05-13 Thread Jakub Jelinek via Gcc-patches
On Tue, May 10, 2022 at 05:41:38PM +0200, Marcel Vollweiler wrote: > I removed all the NON_LVALUE_EXPR changes again. > > The new version of the patch was tested again on x86_64-linux with nvptx and > amdgcn offloading. All with no regressions. Ok, thanks. > gcc/cp/ChangeLog: > > * pt.cc

Re: [PATCH] aarch64: Fix pac-ret with unusual dwarf in libgcc unwinder [PR104689]

2022-05-13 Thread Richard Sandiford via Gcc-patches
Szabolcs Nagy via Gcc-patches writes: > The RA_SIGN_STATE dwarf pseudo-register is normally only set using the > DW_CFA_AARCH64_negate_ra_state (== DW_CFA_window_save) operation which > toggles the return address signedness state (the default state is 0). > (It may be set by remember/restore_state

Re: [AArch64] PR105162: emit barrier for __sync and __atomic builtins on CPUs without LSE

2022-05-13 Thread Wilco Dijkstra via Gcc-patches
Hi Sebastian, >> Note the patch still needs an appropriate commit message. > > Added the following ChangeLog entry to the commit message. > > * config/aarch64/aarch64-protos.h (atomic_ool_names): Increase >dimension > of str array. > * config/aarch64/aarch64.cc (aarch64_at

Re: [x86 PATCH take 2] Improved V1TI (and V2DI) mode equality/inequality.

2022-05-13 Thread Uros Bizjak via Gcc-patches
On Fri, May 13, 2022 at 11:46 AM Roger Sayle wrote: > > > Hi Uros, > Now that we're back in stage 1, here's the revised version of the patch I > submitted here: > https://gcc.gnu.org/pipermail/gcc-patches/2022-April/593434.html > incorporating all the suggested improvements from your review here:

[PATCH v2 02/10] aarch64: Add backend support for DFP

2022-05-13 Thread Christophe Lyon via Gcc-patches
This patch updates the aarch64 backend as needed to support DFP modes (SD, DD and TD). 2022-03-31 Christophe Lyon gcc/ * config/aarch64/aarch64.cc (aarch64_split_128bit_move): Handle DFP modes. (aarch64_mode_valid_for_sched_fusion_p): Likewise. (aarch64_

[PATCH] Add zero_extendditi2. Improve lxvr*x code generation.

2022-05-13 Thread Michael Meissner via Gcc-patches
Add zero_extendditi2. Improve lxvr*x code generation. This pattern adds zero_extendditi2 so that if we are extending DImode that is in a GPR register to TImode in a vector register, the compiler can generate MTVSRDDD. In addition the patterns for generating lxvr{b,h,w,d}x were tuned to allow loa

[PATCH] Optimize multiply/add of DImode extended to TImode, PR target/103109.

2022-05-13 Thread Michael Meissner via Gcc-patches
Optimize multiply/add of DImode extended to TImode, PR target/103109. On power9 and power10 systems, we have instructions that support doing 64-bit integers converted to 128-bit integers and producing 128-bit results. This patch adds support to generate these instructions. Previously GCC had def

[PATCH] Generate vadduqm and vsubuqm for TImode add/subtract

2022-05-13 Thread Michael Meissner via Gcc-patches
Generate vadduqm and vsubuqm for TImode add/subtract If the TImode variable is in an Altivec register instead of a GPR register, then generate vadduqm and vsubuqm instead of having to move the value to the GPR registers and doing the add and subtract with carry instructions. To do this, we have t

[PATCH v2 09/10] libgcc: Add support for HF mode (aka __fp16) in libbid

2022-05-13 Thread Christophe Lyon via Gcc-patches
This patch adds support for trunc and extend operations between HF mode (__fp16) and Decimal Floating Point formats (_Decimal32, _Decimal64 and _Decimal128). For simplicity we rely on the implicit conversions inserted by the compiler between HF and SD/DF/TF modes. The existing bid*_to_binary* and

Re: [PATCH v2 02/10] aarch64: Add backend support for DFP

2022-05-13 Thread Richard Sandiford via Gcc-patches
Christophe Lyon via Gcc-patches writes: > @@ -19352,7 +19363,9 @@ aarch64_legitimate_constant_p (machine_mode mode, rtx > x) > { >/* Support CSE and rematerialization of common constants. */ >if (CONST_INT_P (x) > - || (CONST_DOUBLE_P (x) && GET_MODE_CLASS (mode) == MODE_FLOAT)) >

[PATCH v2 08/10] testsuite: Add C++ unwinding tests with Decimal Floating-Point

2022-05-13 Thread Christophe Lyon via Gcc-patches
These tests exercise exception handling with Decimal Floating-Point type. dfp-1.C and dfp-2.C check that thrown objects of such types are properly caught, whether when using C++ classes (decimalXX) or via GCC mode attributes. dfp-saves-aarch64.C checks that such objects are properly restored, and

Re: [PATCH] testsuite: opt: Fix const7.C for RISC-V.

2022-05-13 Thread Palmer Dabbelt
On Thu, 12 May 2022 18:55:45 PDT (-0700), jia...@iscas.ac.cn wrote: Similar to patch 593993, RISC-V needs to limit symbols send in sdata. Thanks for Palmer's help. gcc/testsuite/ChangeLog: * g++.dg/opt/const7.C: Don't use small data on RISC-V. --- gcc/testsuite/g++.dg/opt/const7.C | 1

Re: [RESEND][committed v4] RISC-V: Provide `fmin'/`fmax' RTL patterns

2022-05-13 Thread Palmer Dabbelt
On Tue, 10 May 2022 08:48:33 PDT (-0700), gcc-patches@gcc.gnu.org wrote: Thanks Maciej! Yep. We should have a NEWS entry, though, as this one is user-visible and may be tricky to sort out if it turns out there is some HW lurking around that has the old behavior. On Tue, May 10, 2022 at 10

Re: [PATCH] testsuite: btf: Fix btf-datasec-1.c for RISC-V

2022-05-13 Thread Palmer Dabbelt
On Tue, 10 May 2022 18:31:37 PDT (-0700), Kito Cheng wrote: LGTM, that's only added a new option for RISC-V and won't affect all other targets, so I assume I can approve that. I always forget what the rules are, but someone recently reminded me and yes that's the case. I committed this. Tha

Re: [PATCH] Optimize vec_splats of constant V2DI/V2DF vec_extract, PR target/99293

2022-05-13 Thread will schmidt via Gcc-patches
On Fri, 2022-05-13 at 10:49 -0400, Michael Meissner wrote: > Optimize vec_splats of constant V2DI/V2DF vec_extract, PR target/99293. > > This patch has been previously posted, but it seemed to get lost.: > > > Date: Tue, 29 Mar 2022 23:25:31 -0400 > > Subject: [PATCH, V2] Optimize vec_splats of c

Re: [wwwdocs] gcc-12/changes.html: Document the RISC-V libstdc++ -latomic detection

2022-05-13 Thread Palmer Dabbelt
On Tue, 10 May 2022 18:34:33 PDT (-0700), Kito Cheng wrote: LGTM, I think document what we really did in GCC 12 is never too late :P OK, committed. On Fri, Apr 29, 2022 at 2:23 AM Palmer Dabbelt wrote: --- IMO this one is worth documenting too, not sure if it's too late for gcc-12's doc

[PATCH 1/3]middle-end: Add the ability to let the target decide the method of argument promotions.

2022-05-13 Thread Tamar Christina via Gcc-patches
Hi All, Some targets require function parameters to be promoted to a different type on expand time because the target may not have native instructions to work on such types. As an example the AArch64 port does not have native instructions working on integer 8- or 16-bit values. As such it promot

[PATCH 2/3]AArch64 Promote function arguments using a paradoxical subreg when beneficial.

2022-05-13 Thread Tamar Christina via Gcc-patches
Hi All, The PROMOTE_MODE always promotes 8 and 16-bit parameters to 32-bits. This promotion is not required for the ABI which states: ``` C.9 If the argument is an Integral or Pointer Type, the size of the argument is less than or equal to 8 bytes and the NGRN is less than 8, the argument i

[PATCH 3/3]AArch64 Update the testsuite to remove xfails.

2022-05-13 Thread Tamar Christina via Gcc-patches
Hi All, This removes the xfails from the below tests which now all pass. Bootstrapped Regtested on aarch64-none-linux-gnu and no issues and fixes 209 SVE xfails. Ok for master? Thanks, Tamar gcc/testsuite/ChangeLog: * gcc.target/aarch64/sve/acle/asm/abd_s16.c: Remove xfail. *

[Patch] OpenMP/Fortran: Use firstprivat not alloc for ptr attach for arrays

2022-05-13 Thread Tobias Burnus
Based on sollve_vv's tests/4.5/target_teams_distribute/test_target_teams_distribute_nowait.F90 As discussed, for simple pointers – like here with nondescriptor array, instead of alloc:a + pointer assign, a firstprivate + pointer assign makes more sense. It also avoids the race exposed by the so

Re: [PATCH v2] Disable tests that require fesetround() on platforms without it

2022-05-13 Thread Palmer Dabbelt
On Tue, 03 May 2022 08:21:45 PDT (-0700), gcc-patches@gcc.gnu.org wrote: On 4/29/2022 5:44 PM, Palmer Dabbelt wrote: Some tests check for fenv and then proceed to use fesetround() directly, but some platforms (at least RISC-V soft-float) have fenv but don't support rounding modes. This adds a

[PATCH v3] Disable tests that require fesetround() on platforms without it

2022-05-13 Thread Palmer Dabbelt
Some tests check for fenv and then proceed to use fesetround() directly, but some platforms (at least RISC-V soft-float) have fenv but don't support rounding modes. This adds a DG check that fesetround() actually functions, which is then used by all the tests that call fesetround() explicitly. gc

Re: [PATCH] Replace UNSPEC with RTL code for extendditi2.

2022-05-13 Thread will schmidt via Gcc-patches
On Fri, 2022-05-13 at 10:52 -0400, Michael Meissner wrote: > Replace UNSPEC with RTL code for extendditi2. > Hi, > When I submitted my patch on March 12th for extendditi2, Segher > wished I > had removed the use of the UNSPEC for the vextsd2q instruction. This > patch rewrites extendditi2_vect

Re: [PATCH] Delay splitting addti3/subti3 until first split pass.

2022-05-13 Thread Segher Boessenkool
On Fri, May 13, 2022 at 11:08:48AM -0400, Michael Meissner wrote: > Add zero_extendditi2. Improve lxvr*x code generation. Nothing in this pass haas anything to do with the subject. Which is a good thing, because not expanding addti3 etc. to RTL that mimics the machine insns is not acceptable a

Re: [Patch] OpenMP/Fortran: Use firstprivat not alloc for ptr attach for arrays

2022-05-13 Thread Jakub Jelinek via Gcc-patches
On Fri, May 13, 2022 at 07:21:02PM +0200, Tobias Burnus wrote: > gcc/fortran/ChangeLog: > > * trans-openmp.cc (gfc_trans_omp_clauses): When mapping nondescriptor > array sections, use GOMP_MAP_FIRSTPRIVATE_POINTER instead of > GOMP_MAP_POINTER for the pointer attachment. > > lib

[PATCH v2 08/10] testsuite: Add C++ unwinding tests with Decimal Floating-Point

2022-05-13 Thread Christophe Lyon via Gcc-patches
These tests exercise exception handling with Decimal Floating-Point type. dfp-1.C and dfp-2.C check that thrown objects of such types are properly caught, whether when using C++ classes (decimalXX) or via GCC mode attributes. dfp-saves-aarch64.C checks that such objects are properly restored, and

[PATCH v2 09/10] libgcc: Add support for HF mode (aka __fp16) in libbid

2022-05-13 Thread Christophe Lyon via Gcc-patches
This patch adds support for trunc and extend operations between HF mode (__fp16) and Decimal Floating Point formats (_Decimal32, _Decimal64 and _Decimal128). For simplicity we rely on the implicit conversions inserted by the compiler between HF and SD/DF/TF modes. The existing bid*_to_binary* and

Re: [PATCH] Delay splitting addti3/subti3 until first split pass.

2022-05-13 Thread will schmidt via Gcc-patches
On Fri, 2022-05-13 at 11:08 -0400, Michael Meissner wrote: > Add zero_extendditi2. Improve lxvr*x code generation. > Hi, > Subject: Re: [PATCH] Delay splitting addti3/subti3 until first split pass. Subject does not seem to match contents? > This pattern adds zero_extendditi2 so that if w

Re: [PATCH] Add zero_extendditi2. Improve lxvr*x code generation.

2022-05-13 Thread will schmidt via Gcc-patches
On Fri, 2022-05-13 at 12:13 -0400, Michael Meissner wrote: > Add zero_extendditi2. Improve lxvr*x code generation. > Content here matches what I commented on in the prior email with subject "Delay splitting addti3...". > This pattern adds zero_extendditi2 so that if we are extending DIm

Re: [PATCH] Optimize multiply/add of DImode extended to TImode, PR target/103109.

2022-05-13 Thread will schmidt via Gcc-patches
On Fri, 2022-05-13 at 12:17 -0400, Michael Meissner wrote: > Optimize multiply/add of DImode extended to TImode, PR target/103109. > > On power9 and power10 systems, we have instructions that support doing > 64-bit integers converted to 128-bit integers and producing 128-bit > results. This patch

Re: libgompd: ADD OMPD support and global ICV functions

2022-05-13 Thread Mohamed Atef via Gcc-patches
في الجمعة، ١٣ مايو، ٢٠٢٢ ٣:١٤ م Jakub Jelinek كتب: > On Tue, May 10, 2022 at 07:40:41AM +0200, Mohamed Atef wrote: > > --- a/libgomp/env.c > > +++ b/libgomp/env.c > > @@ -33,6 +33,7 @@ > > #ifndef LIBGOMP_OFFLOADED_ONLY > > #include "libgomp_f.h" > > #include "oacc-int.h" > > +#include "ompd-s

Re: [PATCH v2 09/10] libgcc: Add support for HF mode (aka __fp16) in libbid

2022-05-13 Thread Joseph Myers
On Fri, 13 May 2022, Christophe Lyon via Gcc-patches wrote: > diff --git a/gcc/testsuite/gcc.target/aarch64/convert-dfp-2.c > b/gcc/testsuite/gcc.target/aarch64/convert-dfp-2.c I still think the tests should run for x86 as well - that is, for any target supporting both DFP and _Float16 (with ap

Re: libgompd: ADD OMPD support and global ICV functions

2022-05-13 Thread Jakub Jelinek via Gcc-patches
On Fri, May 13, 2022 at 08:22:41PM +0200, Mohamed Atef wrote: > > As I've tried to explain, this #ifdef __ELF__ doesn't belong > > to the public header, which should contain just > > extern void ompd_dll_locations_valid (void) __GOMPD_NOTHROW; > > The #define should be in some internal header that

Re: [PATCH v2 09/10] libgcc: Add support for HF mode (aka __fp16) in libbid

2022-05-13 Thread Christophe Lyon via Gcc-patches
On 5/13/22 20:23, Joseph Myers wrote: On Fri, 13 May 2022, Christophe Lyon via Gcc-patches wrote: diff --git a/gcc/testsuite/gcc.target/aarch64/convert-dfp-2.c b/gcc/testsuite/gcc.target/aarch64/convert-dfp-2.c I still think the tests should run for x86 as well - that is, for any target s

[COMMITTED] PR tree-optimization/105597 - Check operand for type, not LHS.

2022-05-13 Thread Andrew MacLeod via Gcc-patches
Earlier patch was picking the type of the expression in a minus operation from the LHS.   When we are folding, the LHS may not be defined yet. Instead, pick up the type from operand 1, and ensure it isn't undefined while we're at it. Bootstrapped on x86_64-pc-linux-gnu with no regressions. 

Re: [PATCH] Generate vadduqm and vsubuqm for TImode add/subtract

2022-05-13 Thread will schmidt via Gcc-patches
On Fri, 2022-05-13 at 12:19 -0400, Michael Meissner wrote: > Generate vadduqm and vsubuqm for TImode add/subtract > > If the TImode variable is in an Altivec register instead of a GPR > register, then generate vadduqm and vsubuqm instead of having to move the > value to the GPR registers and doing

Re: libgompd: ADD OMPD support and global ICV functions

2022-05-13 Thread Mohamed Atef via Gcc-patches
Hello Jakub, I am sorry, but should #ifdef __ELF__ put and separate file and also the actual functions (e.g. extern ompd_dll_location_valid (void)) I mean both in the same files or the functions should be in the omp-tools.h but with #ifndef __ELF__ Mohamed On Fri, May 13, 2022 at 8:27 PM Jaku

Re: [RESEND][committed v4] RISC-V: Provide `fmin'/`fmax' RTL patterns

2022-05-13 Thread Maciej W. Rozycki
On Fri, 13 May 2022, Palmer Dabbelt wrote: > Yep. We should have a NEWS entry, though, as this one is user-visible and may > be tricky to sort out if it turns out there is some HW lurking around that has > the old behavior. Hmm, should we? We only support `-misa-spec=<2.2|20190608|20191213>'

[committed] libstdc++: Make std::rethrow_if_nested work without RTTI

2022-05-13 Thread Jonathan Wakely via Gcc-patches
Tested powerpc64l4-linux, pushed to trunk. -- >8 -- This allows std::rethrow_if_nested to work with -fno-rtti by not attempting the dynamic_cast if it requires RTTI, since that's ill-formed with -fno-rtti. The cast will still work if a static upcast to std::nested_exception is allowed. Also use

[committed] libstdc++: Allow std::swap to find overload for std::exception_ptr

2022-05-13 Thread Jonathan Wakely via Gcc-patches
Tested powerpc64l4-linux, pushed to trunk. -- >8 -- The non-member swap for std::exception_ptr is in a nested namespace and so can only be found by ADL currently. Add a using-declaration so that qualified std::swap calls will use the std::exception_ptr::swap member, instead of the generic std::sw

[committed] libstdc++: Add noexcept to std::launch operators

2022-05-13 Thread Jonathan Wakely via Gcc-patches
Tested powerpc64l4-linux, pushed to trunk. -- >8 -- libstdc++-v3/ChangeLog: * include/std/future (launch): Make operators noexcept. --- libstdc++-v3/include/std/future | 14 +++--- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libstdc++-v3/include/std/future b/li

[committed] libstdc++: Make std::thread::_State private

2022-05-13 Thread Jonathan Wakely via Gcc-patches
Tested powerpc64l4-linux, pushed to trunk. -- >8 -- * include/bits/std_thread.h (thread::_State, thread::_State_ptr): Declare as private unless _GLIBCXX_THREAD_IMPL is defined. * src/c++11/thread.cc (_GLIBCXX_THREAD_IMPL): Define. --- libstdc++-v3/include/bits/std_thread.

[PATCH v3] RISC-V: Implement C[LT]Z_DEFINED_VALUE_AT_ZERO

2022-05-13 Thread Philipp Tomsich
The Zbb support has introduced ctz and clz to the backend, but some transformations in GCC need to know what the value of c[lt]z at zero is. This affects how the optab is generated and may suppress use of CLZ/CTZ in tree passes. Among other things, this is needed for the transformation of table-ba

Re: [PATCH v3] RISC-V: Implement C[LT]Z_DEFINED_VALUE_AT_ZERO

2022-05-13 Thread Philipp Tomsich
Added the two nits from Kito's review and … Applied to trunk! On Fri, 13 May 2022 at 22:16, Philipp Tomsich wrote: > > The Zbb support has introduced ctz and clz to the backend, but some > transformations in GCC need to know what the value of c[lt]z at zero > is. This affects how the optab is ge

Re: [AArch64] PR105162: emit barrier for __sync and __atomic builtins on CPUs without LSE

2022-05-13 Thread Pop, Sebastian via Gcc-patches
Please see attached the patch back-ported to branches 12, 11, 10, and 9. Tested on aarch64-linux with bootstrap and regression test. Ok to commit to the GCC active branches? Thanks, SebastianFrom bba8d09284f3478f7d542ca4e7812d4c55e25bd4 Mon Sep 17 00:00:00 2001 From: Sebastian Pop Date: Mon, 18 A

[Patch] OpenMP: Add omp_all_memory support to Fortran

2022-05-13 Thread Tobias Burnus
This adds omp_all_memory handling to Fortran, following C/C++ and shamelessly coping the C testcases and adapting them to Fortran. OK? Tobias - Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäft

Go patch committed: Always sort interface parse methods

2022-05-13 Thread Ian Lance Taylor via Gcc-patches
This patch to the Go frontend always sorts interface parse methods. The exporter relies on sorting interface parse methods. It would sort them as it encountered interface types. However, when an interface type is an element of a struct or array type, the exporter might encounter that interface t

Re: [PATCH] [wwwdocs] Added LoongArch support to the gcc12 changes.

2022-05-13 Thread Gerald Pfeifer
On Sat, 7 May 2022, Gerald Pfeifer wrote: >> +LoongArch > Okay, thanks. And here is a markup fix on top, which I just pushed. Gerald commit 01a1afc13afd0e2b981262b0a1bf9ba1d7d19f79 Author: Gerald Pfeifer Date: Sat May 14 00:27:52 2022 +0200 gcc-12: Fix markup in the Loongson section di

Re: [COMMITTED] rs6000: Move g++.dg powerpc PR tests to g++.target

2022-05-13 Thread Paul A. Clarke via Gcc-patches
> On 12 May 2022, at 23:38, Segher Boessenkool > wrote: > On Mon, Apr 18, 2022 at 12:15:34PM -0500, Paul A. Clarke wrote: >> -/* { dg-skip-if "" { powerpc*-*-darwin* } } */ >> +/* Never tested on darwin, so skip there. */ >> +/* { dg-skip-if "" { *-*-darwin* } } */ > > That is probably the reas

Re: [COMMITTED] rs6000: Remove a few needless 'lp64' contraints.

2022-05-13 Thread Paul A. Clarke via Gcc-patches
On Thu, May 12, 2022 at 05:30:16PM -0500, Segher Boessenkool wrote: > On Mon, Apr 18, 2022 at 12:15:35PM -0500, Paul A. Clarke wrote: > > A few tests need not be restricted to 'lp64', so remove the restriction. > > > > A few of those need a simple change to the DejaGnu directives to suppress > > '

[PATCH v4] c++: ICE with temporary of class type in DMI [PR100252]

2022-05-13 Thread Marek Polacek via Gcc-patches
On Sat, May 07, 2022 at 06:02:13PM -0400, Jason Merrill wrote: > On 5/7/22 15:11, Marek Polacek wrote: > > On Tue, May 03, 2022 at 04:59:38PM -0400, Jason Merrill wrote: > > > Does this testcase still work with this patch? > > > > > > struct A { > > >const A* p = this; > > > }; > > > > > > st

[pushed] c++: Add fixed test [PR81952]

2022-05-13 Thread Marek Polacek via Gcc-patches
This was fixed by r258755: PR c++/81311 - wrong C++17 overload resolution. Tested x86_64-pc-linux-gnu, applying to trunk. PR c++/81952 gcc/testsuite/ChangeLog: * g++.dg/overload/conv-op4.C: New test. --- gcc/testsuite/g++.dg/overload/conv-op4.C | 22 ++ 1 fi

Re: [PATCH V2] powerpc: properly check for feenableexcept() on FreeBSD

2022-05-13 Thread Piotr Kubaj via Gcc-patches
I'm abandoning this patch. It was fixed in FreeBSD instead to have feenableexcept() in libm in https://cgit.freebsd.org/src/commit/?id=448c505c33cc334193590f3844406d6a74f26e2a Thanks for your insight! On 22-05-13 10:59:59, Kewen.Lin wrote: > on 2022/5/13 04:16, Segher Boessenkool wrote: > > Hi

<    1   2