public inbox for overseers@sourceware.org
 help / color / mirror / Atom feed
* Email problems
@ 2010-10-26  5:17 Joseph S. Myers
  2010-10-26 17:03 ` Christopher Faylor
  0 siblings, 1 reply; 4+ messages in thread
From: Joseph S. Myers @ 2010-10-26  5:17 UTC (permalink / raw)
  To: overseers

[-- Attachment #1: Type: TEXT/PLAIN, Size: 301 bytes --]

It appears there are some problems with emails to gcc.gnu.org lists not 
reaching the lists - for example, I received a personal copy of the 
attached message but it did not reach the mailing list.  Could someone 
look into what happened with this message?

-- 
Joseph S. Myers
joseph@codesourcery.com

[-- Attachment #2: Re: Vector shifting patch (fwd) --]
[-- Type: MESSAGE/RFC822, Size: 27611 bytes --]

Return-Path: <artyom.shinkaroff@gmail.com>
Delivered-To: joseph@codesourcery.com
Received: (qmail 324 invoked from network); 25 Oct 2010 17:16:06 -0000
Received: from lax-gw04.mailroute.net (HELO mail.mroute.net) (199.89.0.104)
  by mail.codesourcery.com with SMTP; 25 Oct 2010 17:16:06 -0000
Received: from localhost (lax-gw01 [127.0.0.1])
	by lax-gw04.mroute.net (Postfix) with ESMTP id E96EA13B874;
	Mon, 25 Oct 2010 17:16:05 +0000 (GMT)
X-Virus-Scanned: by MailRoute
X-Spam-Flag: NO
X-Spam-Score: 0
X-Spam-Score-Int: 0
X-Spam-Score-Float: -0.946
X-Spam-Level: 
X-Spam-Status: No, score=-0.946 tagged_above=-999 tests=[AM:BOOST=-2,
	DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VERIFIED=-0.3,
	FREEMAIL_FROM=0.001, J_CHICKENPOX_12=0.6, J_CHICKENPOX_26=0.6,
	J_CHICKENPOX_31=0.6, J_CHICKENPOX_44=0.6, J_CHICKENPOX_46=0.6,
	L_P0F_Linux=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001,
	TW_BJ=0.077, TW_VF=0.077, USER_IN_DEF_DKIM_WL=-1.5] autolearn=disabled
X-Amavis-OS-Fingerprint: Linux 2.6 (newer, 2) (firewall!) (up: 4673 hrs),
	(distance 9, link: (Google 2)), [209.85.216.48:59900]
Received: from mail-qw0-f48.google.com (mail-qw0-f48.google.com [209.85.216.48])
	by lax-gw04.mroute.net (Postfix) with ESMTP id AF3B313B796;
	Mon, 25 Oct 2010 17:16:01 +0000 (GMT)
Received: by qwb8 with SMTP id 8so213089qwb.35
        for <multiple recipients>; Mon, 25 Oct 2010 10:16:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=gamma;
        h=domainkey-signature:received:mime-version:received:in-reply-to
         :references:from:date:message-id:subject:to:cc:content-type;
        bh=M9s7gwRqS3Lc7WDPTvkrH16rH64/lsK+uUAc31Ka9Mc=;
        b=DoBAfUNdvNhrkC+SHhN3DxOrYzanUVtFyH9GeLu+BP0FVMYFMRui+WGhLH0LP6BeEt
         7fuzpOEphTTiO98sjAGKoaH1mIcVGUk0WAkZftehwqtpgAZy07cF+dhw+VAluUUu9BoR
         MdHxLPehcF/P2ezJY3qlrYWAl2H8LEwSJLCKg=
DomainKey-Signature: a=rsa-sha1; c=nofws;
        d=gmail.com; s=gamma;
        h=mime-version:in-reply-to:references:from:date:message-id:subject:to
         :cc:content-type;
        b=FmxvLej/XAFwKorZDFqMLsppJGKb79I5KY+EQmKlINI6bgB0Y5LAoXaYfOgoCdRvKL
         wiX+GgHlrC99GoQSPYHiy/SJFoFRiDQ+7048ko/Xl4uUvyNidYqStULpLalf3DQVfFQQ
         YienQPQaZaZm7MdCHAnvKye7O54dNWrxgg+jg=
Received: by 10.229.213.212 with SMTP id gx20mr6249994qcb.60.1288026960670;
 Mon, 25 Oct 2010 10:16:00 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.229.182.207 with HTTP; Mon, 25 Oct 2010 10:15:40 -0700 (PDT)
In-Reply-To: <20101025152737.GD2806@nightcrawler>
References: <AANLkTimj-zZQTyTRW3nrCpEX5dA2rCFo-wbQs5yWwRn0@mail.gmail.com>
 <AANLkTinJ0_zBu9g_qAv5G0dXAH2GYaarMHnp2YzjmyCe@mail.gmail.com>
 <AANLkTil_5aYZQqs8JUuWc7FJJtiN9ZAFCvEZXEpddE2E@mail.gmail.com>
 <AANLkTilRWnsbx94JC-Hpzh-6AJnLEBgCCHufsWgMofY6@mail.gmail.com>
 <AANLkTimZKcE3WiJdrbhoVwvytAKIPAkUrfS8dAeLqgEL@mail.gmail.com>
 <AANLkTi=0OS6S+40mdxZW2H7bOdxgh6VQRODLCcvYYQee@mail.gmail.com>
 <20101025144714.GZ2806@nightcrawler> <AANLkTimSreYz+u_OWREKk6bKM=bFHH8ivZ27u7V-VJ_O@mail.gmail.com>
 <20101025150704.GC2806@nightcrawler> <AANLkTi=df-K4R166OA=QfvYMVNe5M6-3Z1T2HYe47GJA@mail.gmail.com>
 <20101025152737.GD2806@nightcrawler>
From: Artem Shinkarov <artyom.shinkaroff@gmail.com>
Date: Mon, 25 Oct 2010 18:15:40 +0100
Message-ID: <AANLkTi=FFVHrHtft0H_+U-qR86tG4TMEFRDL7ojzN1-J@mail.gmail.com>
Subject: Re: Vector shifting patch
To: Nathan Froyd <froydnj@codesourcery.com>
Cc: gcc-patches@gcc.gnu.org, Richard Guenther <richard.guenther@gmail.com>, 
	"Joseph S. Myers" <joseph@codesourcery.com>
Content-Type: multipart/mixed; boundary=0016362844f273c0e0049374256a


--0016362844f273c0e0049374256a
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-length: 2021

Here is a version with improved build_vector_from val.

ChangeLog:

2010-10-25  Artjoms Sinkarovs <artyom.shinakroff@gmail.com>
  Andrew Pinski <pinskia@gmail.com>

  gcc/
  * tree.h (build_vector_from_val): Declare.
  * tree.c (build_vector_from_val): New function.
  * c-typeck.c (build_binary_op): Handle vector shifting.

  gcc/testsuite/
  * gcc.c-torture/execute/vector-shift.c: Likewise.
  * gcc.c-torture/execute/vector-shift1.c: New testcase.
  * gcc.c-torture/execute/vector-shift2.c: New testcase.
  * gcc.dg/vector-shift.c: New testcase.
  * gcc.dg/vector-shift1.c: New testcase.
  * gcc.dg/vector-shift2.c: New testcase.
  * gcc.dg/vector-shift3.c: New testcase.
  * gcc.dg/vector-shift4.c: New testcase.

bootstrapped and tested on x86_64_unknown-linux

OK?


On Mon, Oct 25, 2010 at 4:27 PM, Nathan Froyd <froydnj@codesourcery.com> wr=
ote:
> On Mon, Oct 25, 2010 at 04:21:47PM +0100, Artem Shinkarov wrote:
>> Does it look better now:
>>
>> tree
>> build_vector_from_val (const tree sc, const tree vectype)
>> {
>> =A0 int i, nunits =3D TYPE_VECTOR_SUBPARTS (vectype);
>> =A0 VEC(constructor_elt, gc) *v;
>>
>> =A0 if (sc =3D=3D error_mark_node)
>> =A0 =A0 return sc;
>>
>> =A0 gcc_assert (TREE_TYPE (sc) =3D=3D TREE_TYPE (vectype));
>>
>> =A0 v =3D VEC_alloc (constructor_elt, gc, nunits);
>> =A0 for (i =3D 0; i < nunits; ++i)
>> =A0 =A0 CONSTRUCTOR_APPEND_ELT (v, size_int (i), sc);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ^^^^^^^^^=
^^^
>
> You can just pass NULL_TREE here and the Right Thing will happen.
>
> I think the logic looks fine. =A0For consistency's sake, it would probably
> be good to have the argument order reversed, i.e.:
>
> tree
> build_vector_from_val (const_tree vectype, const_tree sc)
>
> as that would more closely match the existing build_vector* functions.
>
> Please also note that you want const_tree instead of 'const tree' (note
> underscore). =A0If there are other instances of that in your patch, you'll
> want to fix those too.
>
> -Nathan
>

--0016362844f273c0e0049374256a
Content-Type: text/x-diff; charset=US-ASCII; name="vectorshift.c.v7.diff"
Content-Disposition: attachment; filename="vectorshift.c.v7.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gfplz0cs0
Content-length: 21570

SW5kZXg6IGdjYy9kb2MvZXh0ZW5kLnRleGkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gZ2NjL2RvYy9leHRlbmQudGV4aQkocmV2aXNpb24gMTY1OTEz
KQorKysgZ2NjL2RvYy9leHRlbmQudGV4aQkod29ya2luZyBjb3B5KQpAQCAt
NjMwOSw2ICs2MzA5LDIzIEBAIHY0c2kgYSwgYiwgYzsKIGMgPSBhICsgYjsK
IEBlbmQgc21hbGxleGFtcGxlCiAKK0luIEMgaXQgaXMgcG9zc2libGUgdG8g
dXNlIHNoaWZ0aW5nIG9wZXJhdG9ycyBAY29kZXs8PCwgPj59IG9uIGludGVn
ZXItdHlwZQordmVjdG9ycy4gVGhlIG9wZXJhdGlvbiBpcyBkZWZpbmVkIGFz
IGZvbGxvd2luZzogQGNvZGV7QHthMCwgYTEsIC4uLiwgYW5AfSA+PiBAe2Iw
LCBiMSwKKy4uLiwgYm5AfSA9PSBAe2EwID4+IGIwLCBhMSA+PiBiMSwgLi4u
LCBhbiA+PiBibkB9fUAuICBBZGRpdGlvbmFsbHkgb25lIG9mIHRoZQorb3Bl
cmFuZHMgY2FuIGJlIGEgc2NhbGFyIGludGVnZXIgaW4gd2hpY2ggY2FzZSB0
aGUgc2NhbGFyIGlzIGNvbnZlcnRlZCB0byB0aGUKK3R5cGUgdXNlZCBieSB0
aGUgdmVjdG9yIG9wZXJhbmQgYW5kIGVhY2ggZWxlbWVudCBvZiB0aGlzIG5l
dyB2ZWN0b3IgaXMgdGhlCitzY2FsYXIncyB2YWx1ZS4gIENvbnNpZGVyIHRo
ZSBmb2xsb3dpbmcgY29kZS4KKworQHNtYWxsZXhhbXBsZQordHlwZWRlZiBp
bnQgdjRzaSBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDE2KSkpOwor
Cit2NHNpIGEsIGIsIGM7CitpbnQgaSA9IDE7CisKK2IgPSBhID4+IDE7ICAg
ICAvKiBiID0gYSA+PiBAezEsMSwxLDFAfTsgKi8KK2MgPSAxIDw8IGE7ICAg
ICAvKiBjID0gQHsxLDEsMSwxQH0gPDwgYTsgKi8KK0BlbmQgc21hbGxleGFt
cGxlCisKIFN1YnRyYWN0aW9uLCBtdWx0aXBsaWNhdGlvbiwgZGl2aXNpb24s
IGFuZCB0aGUgbG9naWNhbCBvcGVyYXRpb25zCiBvcGVyYXRlIGluIGEgc2lt
aWxhciBtYW5uZXIuICBMaWtld2lzZSwgdGhlIHJlc3VsdCBvZiB1c2luZyB0
aGUgdW5hcnkKIG1pbnVzIG9yIGNvbXBsZW1lbnQgb3BlcmF0b3JzIG9uIGEg
dmVjdG9yIHR5cGUgaXMgYSB2ZWN0b3Igd2hvc2UKSW5kZXg6IGdjYy90cmVl
LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3RyZWUuYwkocmV2
aXNpb24gMTY1OTEzKQorKysgZ2NjL3RyZWUuYwkod29ya2luZyBjb3B5KQpA
QCAtMTM2Niw2ICsxMzY2LDI4IEBAIGJ1aWxkX3ZlY3Rvcl9mcm9tX2N0b3Ig
KHRyZWUgdHlwZSwgVkVDKGMKICAgcmV0dXJuIGJ1aWxkX3ZlY3RvciAodHlw
ZSwgbnJldmVyc2UgKGxpc3QpKTsKIH0KIAorLyogQnVpbGQgYSB2ZWN0b3Ig
b2YgdHlwZSBWRUNUWVBFIHdoZXJlIGFsbCB0aGUgZWxlbWVudHMgYXJlIFND
cy4gICovCit0cmVlCitidWlsZF92ZWN0b3JfZnJvbV92YWwgKHRyZWUgdmVj
dHlwZSwgdHJlZSBzYykgCit7CisgIGludCBpLCBudW5pdHMgPSBUWVBFX1ZF
Q1RPUl9TVUJQQVJUUyAodmVjdHlwZSk7CisgIFZFQyhjb25zdHJ1Y3Rvcl9l
bHQsIGdjKSAqdiA9IE5VTEw7CisKKyAgaWYgKHNjID09IGVycm9yX21hcmtf
bm9kZSkKKyAgICByZXR1cm4gc2M7CisKKyAgZ2NjX2Fzc2VydCAoVFJFRV9U
WVBFIChzYykgPT0gVFJFRV9UWVBFICh2ZWN0eXBlKSk7CisKKyAgdiA9IFZF
Q19hbGxvYyAoY29uc3RydWN0b3JfZWx0LCBnYywgbnVuaXRzKTsKKyAgZm9y
IChpID0gMDsgaSA8IG51bml0czsgKytpKQorICAgIENPTlNUUlVDVE9SX0FQ
UEVORF9FTFQgKHYsIHNpemVfaW50IChpKSwgc2MpOworCisgIGlmIChDT05T
VEFOVF9DTEFTU19QIChzYykpCisgICAgcmV0dXJuIGJ1aWxkX3ZlY3Rvcl9m
cm9tX2N0b3IgKHZlY3R5cGUsIHYpOworICBlbHNlIAorICAgIHJldHVybiBi
dWlsZF9jb25zdHJ1Y3RvciAodmVjdHlwZSwgdik7Cit9CisKIC8qIFJldHVy
biBhIG5ldyBDT05TVFJVQ1RPUiBub2RlIHdob3NlIHR5cGUgaXMgVFlQRSBh
bmQgd2hvc2UgdmFsdWVzCiAgICBhcmUgaW4gdGhlIFZFQyBwb2ludGVkIHRv
IGJ5IFZBTFMuICAqLwogdHJlZQpJbmRleDogZ2NjL3RyZWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBnY2MvdHJlZS5oCShyZXZpc2lvbiAxNjU5
MTMpCisrKyBnY2MvdHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDM0LDYg
KzQwMzQsNyBAQCBleHRlcm4gdHJlZSBidWlsZF9pbnRfY3N0X3R5cGUgKHRy
ZWUsIEhPCiBleHRlcm4gdHJlZSBidWlsZF9pbnRfY3N0X3dpZGUgKHRyZWUs
IHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsIEhPU1RfV0lERV9JTlQpOwogZXh0
ZXJuIHRyZWUgYnVpbGRfdmVjdG9yICh0cmVlLCB0cmVlKTsKIGV4dGVybiB0
cmVlIGJ1aWxkX3ZlY3Rvcl9mcm9tX2N0b3IgKHRyZWUsIFZFQyhjb25zdHJ1
Y3Rvcl9lbHQsZ2MpICopOworZXh0ZXJuIHRyZWUgYnVpbGRfdmVjdG9yX2Zy
b21fdmFsICh0cmVlLCB0cmVlKTsKIGV4dGVybiB0cmVlIGJ1aWxkX2NvbnN0
cnVjdG9yICh0cmVlLCBWRUMoY29uc3RydWN0b3JfZWx0LGdjKSAqKTsKIGV4
dGVybiB0cmVlIGJ1aWxkX2NvbnN0cnVjdG9yX3NpbmdsZSAodHJlZSwgdHJl
ZSwgdHJlZSk7CiBleHRlcm4gdHJlZSBidWlsZF9jb25zdHJ1Y3Rvcl9mcm9t
X2xpc3QgKHRyZWUsIHRyZWUpOwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2Mu
Yy10b3J0dXJlL2V4ZWN1dGUvdmVjdG9yLXNoaWZ0Mi5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmMtdG9ydHVyZS9l
eGVjdXRlL3ZlY3Rvci1zaGlmdDIuYwkocmV2aXNpb24gMCkKKysrIGdjYy90
ZXN0c3VpdGUvZ2NjLmMtdG9ydHVyZS9leGVjdXRlL3ZlY3Rvci1zaGlmdDIu
YwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MCBAQAorLyogZGctZG8gcnVu
ICovCisjZGVmaW5lIHZlY3RvcihlbGNvdW50LCB0eXBlKSAgXAorX19hdHRy
aWJ1dGVfXygodmVjdG9yX3NpemUoKGVsY291bnQpKnNpemVvZih0eXBlKSkp
KSB0eXBlCisKKyNkZWZpbmUgdmlkeCh0eXBlLCB2ZWMsIGlkeCkgKCooKHR5
cGUgKikgJih2ZWMpICsgaWR4KSkKKyNkZWZpbmUgdWludCB1bnNpZ25lZCBp
bnQKKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAg
ICB2ZWN0b3IoNCwgdWludCkgdnVpbnQgID0geyAxLCAgMiwgIDMsICA0fTsK
KyAgICB2ZWN0b3IoNCwgIGludCkgdmludDAgID0geyAxLCAgMSwgIDEsICAx
fTsKKyAgICB2ZWN0b3IoNCwgIGludCkgdmludDEgID0gey0xLCAtMSwgLTEs
IC0xfTsKKworICAgIHZlY3Rvcig0LCAgaW50KSBpMSwgaTIsIGkzOworICAg
IHZlY3Rvcig0LCB1aW50KSB1MSwgdTIsIHUzOworCisgICAgaTEgPSB2aW50
MTw8IHZpbnQwOworICAgIAorICAgIGlmICh2aWR4KGludCwgaTEsIDApICE9
ICgoaW50KS0xIDw8IChpbnQpMSkpCisgICAgICAgIF9fYnVpbHRpbl9hYm9y
dCAoKTsKKyAgICBpZiAodmlkeChpbnQsIGkxLCAxKSAhPSAoKGludCktMSA8
PCAoaW50KTEpKQorICAgICAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisgICAg
aWYgKHZpZHgoaW50LCBpMSwgMikgIT0gKChpbnQpLTEgPDwgKGludCkxKSkK
KyAgICAgICAgX19idWlsdGluX2Fib3J0ICgpOworICAgIGlmICh2aWR4KGlu
dCwgaTEsIDMpICE9ICgoaW50KS0xIDw8IChpbnQpMSkpCisgICAgICAgIF9f
YnVpbHRpbl9hYm9ydCAoKTsKKworICAgIHUxID0gdnVpbnQgPDwgdmludDA7
CisKKyAgICBpZiAodmlkeChpbnQsIHUxLCAwKSAhPSAoKHVpbnQpMSAgPDwg
KGludCkxKSkKKyAgICAgICAgX19idWlsdGluX2Fib3J0ICgpOworICAgIGlm
ICh2aWR4KGludCwgdTEsIDEpICE9ICgodWludCkyICA8PCAoaW50KTEpKQor
ICAgICAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisgICAgaWYgKHZpZHgoaW50
LCB1MSwgMikgIT0gKCh1aW50KTMgIDw8IChpbnQpMSkpCisgICAgICAgIF9f
YnVpbHRpbl9hYm9ydCAoKTsKKyAgICBpZiAodmlkeChpbnQsIHUxLCAzKSAh
PSAoKHVpbnQpNCAgPDwgKGludCkxKSkKKyAgICAgICAgX19idWlsdGluX2Fi
b3J0ICgpOworCisgICAgCisgICAgaTIgPSB2aW50MSA+PiB2dWludDsKKwor
ICAgIGlmICh2aWR4KGludCwgaTIsIDApICE9ICgoaW50KS0xICA+PiAodWlu
dCkxKSkKKyAgICAgICAgX19idWlsdGluX2Fib3J0ICgpOworICAgIGlmICh2
aWR4KGludCwgaTIsIDEpICE9ICgoaW50KS0xICA+PiAodWludCkyKSkKKyAg
ICAgICAgX19idWlsdGluX2Fib3J0ICgpOworICAgIGlmICh2aWR4KGludCwg
aTIsIDIpICE9ICgoaW50KS0xICA+PiAodWludCkzKSkKKyAgICAgICAgX19i
dWlsdGluX2Fib3J0ICgpOworICAgIGlmICh2aWR4KGludCwgaTIsIDMpICE9
ICgoaW50KS0xICA+PiAodWludCk0KSkKKyAgICAgICAgX19idWlsdGluX2Fi
b3J0ICgpOworCisKKyAgICB2aW50MSA+Pj0gdnVpbnQ7CisgICAgCisgICAg
dnVpbnQgPDw9IHZpbnQwOworICAgIHZ1aW50IDw8PSB2aW50MTsKKworCisg
ICAgcmV0dXJuIDA7Cit9CisKKwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2Mu
Yy10b3J0dXJlL2V4ZWN1dGUvdmVjdG9yLXNoaWZ0LmMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuYy10b3J0dXJlL2V4
ZWN1dGUvdmVjdG9yLXNoaWZ0LmMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVz
dHN1aXRlL2djYy5jLXRvcnR1cmUvZXhlY3V0ZS92ZWN0b3Itc2hpZnQuYwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorCisjZGVmaW5lIHZlY3Rv
ciBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6ZShzaXplb2YoaW50KSo0KSAp
KQorCitzdGF0aWMgdmVjdG9yIGludCBhbGxvbmVzID0gezEsIDEsIDEsIDF9
Oworc3RhdGljIHZlY3RvciBpbnQgYWxsemVyb3MgPSB7MCwgMCwgMCwgMH07
CitzdGF0aWMgdmVjdG9yIGludCBudW1iZXJzID0gezAsIDEsIDIsIDN9Owor
c3RhdGljIHZlY3RvciBpbnQgbnVtYmVyc2xlZnRzaGlmdGFsbG9uZXMgPSB7
MCwgMiwgNCwgNn07CitzdGF0aWMgdmVjdG9yIGludCBudW1iZXJzcmlnaHRz
aGlmdGFsbG9uZXMgPSB7MCwgMCwgMSwgMX07CisKKworc3RhdGljIHZlY3Rv
ciB1bnNpZ25lZCBpbnQgdWFsbG9uZXMgPSB7MSwgMSwgMSwgMX07CitzdGF0
aWMgdmVjdG9yIHVuc2lnbmVkIGludCB1YWxsemVyb3MgPSB7MCwgMCwgMCwg
MH07CitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCB1bnVtYmVycyA9IHsw
LCAxLCAyLCAzfTsKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IHVudW1i
ZXJzbGVmdHNoaWZ0YWxsb25lcyA9IHswLCAyLCA0LCA2fTsKK3N0YXRpYyB2
ZWN0b3IgdW5zaWduZWQgaW50IHVudW1iZXJzcmlnaHRzaGlmdGFsbG9uZXMg
PSB7MCwgMCwgMSwgMX07CisKKyNkZWZpbmUgVEVTVChyZXN1bHQsIGV4cGVj
dGVkKSBcCitkbyB7IFwKKyAgdHlwZW9mKHJlc3VsdCkgcmVzdWx0MSA9IHJl
c3VsdDsgXAorICBpZihzaXplb2YgKHJlc3VsdDEpICE9IHNpemVvZiAoZXhw
ZWN0ZWQpKSBcCisgICAgX19idWlsdGluX2Fib3J0ICgpOyBcCisgIGlmIChf
X2J1aWx0aW5fbWVtY21wICgmcmVzdWx0MSwgJmV4cGVjdGVkLCBzaXplb2Yo
cmVzdWx0MSkpICE9IDApIFwKKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7IFwK
K313aGlsZSAoMCk7CisKK2ludCBtYWluKHZvaWQpCit7CisgIHZlY3RvciBp
bnQgcmVzdWx0OworICBURVNUICgobnVtYmVycyA8PCBhbGx6ZXJvcyksIG51
bWJlcnMpOworICBURVNUICgobnVtYmVycyA+PiBhbGx6ZXJvcyksIG51bWJl
cnMpOworICBURVNUKChudW1iZXJzIDw8IGFsbG9uZXMpLCBudW1iZXJzbGVm
dHNoaWZ0YWxsb25lcyk7CisgIFRFU1QoKG51bWJlcnMgPj4gYWxsb25lcyks
IG51bWJlcnNyaWdodHNoaWZ0YWxsb25lcyk7CisgIC8qIFRlc3QgbGVmdCBz
aGlmdCBmb2xsb3dlZCBieSBhIHJpZ2h0IHNoaWZ0LCBudW1iZXJzIHNob3Vs
ZCBiZSBiYWNrIGFzCisgICAgIG51bWJlcnMgYXJlIGFsbCBzbWFsbCBudW1i
ZXJzIGFuZCBubyBsb3NlIG9mIHByZWNpc2lvbiBoYXBwZW5zLiAgICovCisg
IFRFU1QoKG51bWJlcnMgPDwgYWxsb25lcykgPj4gYWxsb25lcywgbnVtYmVy
cyk7CisgIAorICAKKyAgCisgIFRFU1QgKCh1bnVtYmVycyA8PCB1YWxsemVy
b3MpLCB1bnVtYmVycyk7CisgIFRFU1QgKCh1bnVtYmVycyA+PiB1YWxsemVy
b3MpLCB1bnVtYmVycyk7CisgIFRFU1QoKHVudW1iZXJzIDw8IHVhbGxvbmVz
KSwgdW51bWJlcnNsZWZ0c2hpZnRhbGxvbmVzKTsKKyAgVEVTVCgodW51bWJl
cnMgPj4gdWFsbG9uZXMpLCB1bnVtYmVyc3JpZ2h0c2hpZnRhbGxvbmVzKTsK
KyAgLyogVGVzdCBsZWZ0IHNoaWZ0IGZvbGxvd2VkIGJ5IGEgcmlnaHQgc2hp
ZnQsIG51bWJlcnMgc2hvdWxkIGJlIGJhY2sgYXMKKyAgICAgbnVtYmVycyBh
cmUgYWxsIHNtYWxsIG51bWJlcnMgYW5kIG5vIGxvc2Ugb2YgcHJlY2lzaW9u
IGhhcHBlbnMuICAgKi8KKyAgVEVTVCgodW51bWJlcnMgPDwgdWFsbG9uZXMp
ID4+IHVhbGxvbmVzLCB1bnVtYmVycyk7CisKKyAgcmV0dXJuIDA7ICAKK30K
SW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmMtdG9ydHVyZS9leGVjdXRlL3Zl
Y3Rvci1zaGlmdDEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2Mv
dGVzdHN1aXRlL2djYy5jLXRvcnR1cmUvZXhlY3V0ZS92ZWN0b3Itc2hpZnQx
LmMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2djYy5jLXRvcnR1
cmUvZXhlY3V0ZS92ZWN0b3Itc2hpZnQxLmMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTcgQEAKKyNkZWZpbmUgdmVjdG9yIF9fYXR0cmlidXRlX18oKHZl
Y3Rvcl9zaXplKDgqc2l6ZW9mKHNob3J0KSkpKQorCitpbnQgbWFpbiAoaW50
IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworICB2ZWN0b3Igc2hvcnQgdjAgPSB7
YXJnYywyLDMsNCw1LDYsN307CisgIHZlY3RvciBzaG9ydCB2MSA9IHsyLDIs
MiwyLDIsMiwyfTsKKyAgdmVjdG9yIHNob3J0IHIxLHIyLHIzLHI0OworICBp
bnQgaSA9IDg7CisKKyAgcjEgPSB2MCA8PCAxOworICByMiA9IDEgPDwgdjA7
CisKKyAgcjMgPSB2MCA8PCB2MTsKKyAgcjQgPSB2MCA+PiB2MTsKKworICBy
ZXR1cm4gMDsKK30KKwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj
dG9yLXNoaWZ0NC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90
ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Rvci1zaGlmdDQuYwkocmV2aXNpb24gMCkK
KysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Rvci1zaGlmdDQuYwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorLyogeyBkZy1kbyBjb21waWxl
IH0gKi8KKworI2RlZmluZSB2ZWN0b3IoZWxjb3VudCwgdHlwZSkgIFwKK19f
YXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKChlbGNvdW50KSpzaXplb2YodHlw
ZSkpKSkgdHlwZQorCisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJn
dltdKSB7CisgICAgdmVjdG9yKDgsIHNob3J0KSB2MCA9IHthcmdjLDIsMyw0
LDUsNiw3fTsKKyAgICBzaG9ydCBzYzsKKworICAgIHYwID4+PSBzY2FsYXIw
OyAvKiB7IGRnLWVycm9yICIuKnNjYWxhcjAuKnVuZGVjbGFyZWQiIH0gKi8K
KyAgICAKKyAgICByZXR1cm4gMDsKK30KKwpJbmRleDogZ2NjL3Rlc3RzdWl0
ZS9nY2MuZGcvdmVjdG9yLXNoaWZ0LmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdG9yLXNoaWZ0LmMJKHJl
dmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0b3Itc2hp
ZnQuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorLyogeyBkZy1k
byBjb21waWxlIH0gKi8KKyNkZWZpbmUgdmVjdG9yKGVsY291bnQsIHR5cGUp
ICBcCitfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgoZWxjb3VudCkqc2l6
ZW9mKHR5cGUpKSkpIHR5cGUKKworaW50IG1haW4gKGludCBhcmdjLCBjaGFy
ICphcmd2W10pIHsKKyAgICB2ZWN0b3IoNCxjaGFyKSB2Y2hhciA9IHsxLDIs
Myw0fTsKKyAgICB2ZWN0b3IoNCwgaW50KSB2aW50ICA9IHsxLDEsMSwxfTsK
KyAgICAKKyAgICB2aW50IDw8PSB2Y2hhcjsgIC8qIHsgZGctZXJyb3IgIm52
YWxpZCBvcGVyYW5kcyB0byBiaW5hcnkgPDwiIH0gKi8KKyAgICB2Y2hhciA+
Pj0gdmludDsgIC8qIHsgZGctZXJyb3IgIm52YWxpZCBvcGVyYW5kcyB0byBi
aW5hcnkgPj4iIH0gKi8KKworICAgIHJldHVybiAwOworfQorCkluZGV4OiBn
Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0b3Itc2hpZnQxLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdG9y
LXNoaWZ0MS5jCShyZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2Mu
ZGcvdmVjdG9yLXNoaWZ0MS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4
IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworI2RlZmluZSB2ZWN0b3Io
ZWxjb3VudCwgdHlwZSkgIFwKK19fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXpl
KChlbGNvdW50KSpzaXplb2YodHlwZSkpKSkgdHlwZQorCitpbnQgbWFpbiAo
aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworICAgIHZlY3Rvcig0LCBmbG9h
dCkgdmZsb2F0MCA9IHsxLiwgMi4sIDMuLCA0Ln07CisgICAgdmVjdG9yKDQs
IGZsb2F0KSB2ZmxvYXQxID0gezEuLCAyLiwgMy4sIDQufTsKKyAgICAKKyAg
ICB2ZWN0b3IoNCwgICBpbnQpIHZpbnQgICA9IHsxLCAgMSwgIDEsICAxIH07
CisgICAgCisgICAgdmludCA8PD0gdmZsb2F0MDsgIC8qIHsgZGctZXJyb3Ig
Im52YWxpZCBvcGVyYW5kcyB0byBiaW5hcnkgPDwiIH0gKi8KKyAgICB2Zmxv
YXQwID4+PSB2aW50OyAgLyogeyBkZy1lcnJvciAibnZhbGlkIG9wZXJhbmRz
IHRvIGJpbmFyeSA+PiIgfSAqLworCisgICAgdmZsb2F0MCA8PD0gdmZsb2F0
MTsgIC8qIHsgZGctZXJyb3IgIm52YWxpZCBvcGVyYW5kcyB0byBiaW5hcnkg
PDwiIH0gKi8KKworICAgIHJldHVybiAwOworfQorCkluZGV4OiBnY2MvdGVz
dHN1aXRlL2djYy5kZy92ZWN0b3Itc2hpZnQyLmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdG9yLXNoaWZ0
Mi5jCShyZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj
dG9yLXNoaWZ0Mi5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisv
KiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1mbm8tdmFy
LXRyYWNraW5nLWFzc2lnbm1lbnRzIiB9ICovCisKKyNkZWZpbmUgdmVjdG9y
KGVsY291bnQsIHR5cGUpICBcCitfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6
ZSgoZWxjb3VudCkqc2l6ZW9mKHR5cGUpKSkpIHR5cGUKKworI2RlZmluZSB2
aWR4KHR5cGUsIHZlYywgaWR4KSAoKigodHlwZSAqKSAmKHZlYykgKyBpZHgp
KQorI2RlZmluZSB1Y2hhciB1bnNpZ25lZCBjaGFyCisKKyNkZWZpbmUgY2gx
NCAxLDIsMyw0CisjZGVmaW5lIGNoMSAgMSwxLDEsMQorI2RlZmluZSBjaG0x
IC0xLC0xLC0xLC0xCisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJn
dltdKSB7CisgICAgdmVjdG9yKDE2LCB1Y2hhcikgdnVjaGFyICA9IHsgY2gx
NCwgY2gxNCwgY2gxNCwgY2gxNH07CisgICAgdmVjdG9yKDE2LCAgY2hhcikg
dmNoYXIwICA9IHsgY2gxLCBjaDEsIGNoMSwgY2gxfTsKKyAgICB2ZWN0b3Io
MTYsICBjaGFyKSB2Y2hhcjEgID0geyBjaG0xLCBjaG0xLCBjaG0xLCBjaG0x
fTsKKworICAgIHZlY3RvcigxNiwgIGNoYXIpIGkxLCBpMiwgaTM7CisgICAg
dmVjdG9yKDE2LCB1Y2hhcikgdTEsIHUyLCB1MzsKKworICAgIGkxID0gdmNo
YXIxPDwgdmNoYXIwOworICAgIAorICAgIGlmICh2aWR4KGNoYXIsIGkxLCAw
KSAhPSAoKGNoYXIpLTEgPDwgKGNoYXIpMSkpCisgICAgICAgIF9fYnVpbHRp
bl9hYm9ydCAoKTsKKyAgICBpZiAodmlkeChjaGFyLCBpMSwgMSkgIT0gKChj
aGFyKS0xIDw8IChjaGFyKTEpKQorICAgICAgICBfX2J1aWx0aW5fYWJvcnQg
KCk7CisgICAgaWYgKHZpZHgoY2hhciwgaTEsIDIpICE9ICgoY2hhciktMSA8
PCAoY2hhcikxKSkKKyAgICAgICAgX19idWlsdGluX2Fib3J0ICgpOworICAg
IGlmICh2aWR4KGNoYXIsIGkxLCAzKSAhPSAoKGNoYXIpLTEgPDwgKGNoYXIp
MSkpCisgICAgICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKyAgICB1MSA9IHZ1
Y2hhciA8PCB2Y2hhcjA7CisKKyAgICBpZiAodmlkeChjaGFyLCB1MSwgMCkg
IT0gKCh1Y2hhcikxICA8PCAoY2hhcikxKSkKKyAgICAgICAgX19idWlsdGlu
X2Fib3J0ICgpOworICAgIGlmICh2aWR4KGNoYXIsIHUxLCAxKSAhPSAoKHVj
aGFyKTIgIDw8IChjaGFyKTEpKQorICAgICAgICBfX2J1aWx0aW5fYWJvcnQg
KCk7CisgICAgaWYgKHZpZHgoY2hhciwgdTEsIDIpICE9ICgodWNoYXIpMyAg
PDwgKGNoYXIpMSkpCisgICAgICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKyAg
ICBpZiAodmlkeChjaGFyLCB1MSwgMykgIT0gKCh1Y2hhcik0ICA8PCAoY2hh
cikxKSkKKyAgICAgICAgX19idWlsdGluX2Fib3J0ICgpOworCisgICAgCisg
ICAgaTIgPSB2Y2hhcjEgPj4gdnVjaGFyOworCisgICAgaWYgKHZpZHgoY2hh
ciwgaTIsIDApICE9ICgoY2hhciktMSAgPj4gKHVjaGFyKTEpKQorICAgICAg
ICBfX2J1aWx0aW5fYWJvcnQgKCk7CisgICAgaWYgKHZpZHgoY2hhciwgaTIs
IDEpICE9ICgoY2hhciktMSAgPj4gKHVjaGFyKTIpKQorICAgICAgICBfX2J1
aWx0aW5fYWJvcnQgKCk7CisgICAgaWYgKHZpZHgoY2hhciwgaTIsIDIpICE9
ICgoY2hhciktMSAgPj4gKHVjaGFyKTMpKQorICAgICAgICBfX2J1aWx0aW5f
YWJvcnQgKCk7CisgICAgaWYgKHZpZHgoY2hhciwgaTIsIDMpICE9ICgoY2hh
ciktMSAgPj4gKHVjaGFyKTQpKQorICAgICAgICBfX2J1aWx0aW5fYWJvcnQg
KCk7CisgICAgCisgICAgdmNoYXIxID4+PSB2dWNoYXI7CisgICAgdnVjaGFy
IDw8PSB2Y2hhcjA7CisgICAgdnVjaGFyIDw8PSB2Y2hhcjE7CisKKyAgICBy
ZXR1cm4gMDsKK30KKwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj
dG9yLXNoaWZ0My5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90
ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Rvci1zaGlmdDMuYwkocmV2aXNpb24gMCkK
KysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Rvci1zaGlmdDMuYwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorLyogeyBkZy1kbyBjb21waWxl
IH0gKi8KKworI2RlZmluZSB2ZWN0b3IoZWxjb3VudCwgdHlwZSkgIFwKK19f
YXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKChlbGNvdW50KSpzaXplb2YodHlw
ZSkpKSkgdHlwZQorCisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJn
dltdKSB7CisgICAgdmVjdG9yKDgsIHNob3J0KSB2MCA9IHthcmdjLDIsMyw0
LDUsNiw3fTsKKyAgICBzaG9ydCBzYzsKKworICAgIAorICAgIHNjYWxhcjEg
PDw9IHYwOyAvKiB7IGRnLWVycm9yICIuKnNjYWxhcjEuKnVuZGVjbGFyZWQi
IH0gKi8KKyAgIAorICAgIHJldHVybiAwOworfQorCkluZGV4OiBnY2MvYy10
eXBlY2suYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvYy10eXBl
Y2suYwkocmV2aXNpb24gMTY1OTEzKQorKysgZ2NjL2MtdHlwZWNrLmMJKHdv
cmtpbmcgY29weSkKQEAgLTk1NjUsNiArOTU2NSwzMCBAQCBidWlsZF9iaW5h
cnlfb3AgKGxvY2F0aW9uX3QgbG9jYXRpb24sIGVuCiAKICAgb2JqY19vayA9
IG9iamNfY29tcGFyZV90eXBlcyAodHlwZTAsIHR5cGUxLCAtMywgTlVMTF9U
UkVFKTsKIAorICAvKiBGb3IgJ3ZlY3RvciA8c2hpZnQ+IHNjYWxhcicgb3Ig
J3NjYWxhciA8c2hpZnQ+IHZlY3RvcicsIHdlIGNvbnZlcnQgCisgICAgIGEg
c2NhbGFyIHRvIGEgdmVjdG9yLiBUcnVuY2F0aW5nIHRoZSBzaGlmdCBhbW91
bnQgaXMgb2suICAqLworICBpZiAoKGNvZGUwID09IFZFQ1RPUl9UWVBFIHx8
IGNvZGUxID09IFZFQ1RPUl9UWVBFKQorICAgICAgJiYgKGNvZGUwICE9IGNv
ZGUxKSkKKyAgICB7CisgICAgICBzd2l0Y2ggKGNvZGUpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIFJTSElGVF9FWFBSOgorICAgICAgICAgIGNhc2Ug
TFNISUZUX0VYUFI6CisgICAgICAgICAgICBpZiAoY29kZTAgPT0gSU5URUdF
Ul9UWVBFKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJl
ZSBzYyA9IHNhdmVfZXhwciAob3AwKTsKKyAgICAgICAgICAgICAgICBzYyA9
IGNvbnZlcnQgKFRSRUVfVFlQRSAodHlwZTEpLCBzYyk7CisgICAgICAgICAg
ICAgICAgb3AwID0gYnVpbGRfdmVjdG9yX2Zyb21fdmFsICh0eXBlMSwgc2Mp
OworICAgICAgICAgICAgICAgIG9yaWdfdHlwZTAgPSB0eXBlMCA9IFRSRUVf
VFlQRSAob3AwKTsKKyAgICAgICAgICAgICAgICBjb2RlMCA9IFRSRUVfQ09E
RSAodHlwZTApOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKwogICBzd2l0Y2ggKGNvZGUpCiAgICAgewog
ICAgIGNhc2UgUExVU19FWFBSOgpAQCAtOTcyNyw3ICs5NzUxLDIxIEBAIGJ1
aWxkX2JpbmFyeV9vcCAobG9jYXRpb25fdCBsb2NhdGlvbiwgZW4KIAkgQWxz
byBzZXQgU0hPUlRfU0hJRlQgaWYgc2hpZnRpbmcgcmlnaHR3YXJkLiAgKi8K
IAogICAgIGNhc2UgUlNISUZUX0VYUFI6Ci0gICAgICBpZiAoKGNvZGUwID09
IElOVEVHRVJfVFlQRSB8fCBjb2RlMCA9PSBGSVhFRF9QT0lOVF9UWVBFKQor
ICAgICAgaWYgKGNvZGUwID09IFZFQ1RPUl9UWVBFICYmIGNvZGUxID09IElO
VEVHRVJfVFlQRQorICAgICAgICAgICYmIFRSRUVfQ09ERSAoVFJFRV9UWVBF
ICh0eXBlMCkpID09IElOVEVHRVJfVFlQRSkKKyAgICAgICAgeworICAgICAg
ICAgIHJlc3VsdF90eXBlID0gdHlwZTA7CisgICAgICAgICAgY29udmVydGVk
ID0gMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoY29kZTAgPT0gVkVD
VE9SX1RZUEUgJiYgY29kZTEgPT0gVkVDVE9SX1RZUEUKKwkgICYmIFRSRUVf
Q09ERSAoVFJFRV9UWVBFICh0eXBlMCkpID09IElOVEVHRVJfVFlQRQorICAg
ICAgICAgICYmIFRSRUVfQ09ERSAoVFJFRV9UWVBFICh0eXBlMSkpID09IElO
VEVHRVJfVFlQRQorICAgICAgICAgICYmIFRZUEVfVkVDVE9SX1NVQlBBUlRT
ICh0eXBlMCkgPT0gVFlQRV9WRUNUT1JfU1VCUEFSVFMgKHR5cGUxKSkKKwl7
CisJICByZXN1bHRfdHlwZSA9IHR5cGUwOworCSAgY29udmVydGVkID0gMTsK
Kwl9CisgICAgICBlbHNlIGlmICgoY29kZTAgPT0gSU5URUdFUl9UWVBFIHx8
IGNvZGUwID09IEZJWEVEX1BPSU5UX1RZUEUpCiAJICAmJiBjb2RlMSA9PSBJ
TlRFR0VSX1RZUEUpCiAJewogCSAgaWYgKFRSRUVfQ09ERSAob3AxKSA9PSBJ
TlRFR0VSX0NTVCkKQEAgLTk3NTQsOSArOTc5MiwxMCBAQCBidWlsZF9iaW5h
cnlfb3AgKGxvY2F0aW9uX3QgbG9jYXRpb24sIGVuCiAKIAkgIC8qIFVzZSB0
aGUgdHlwZSBvZiB0aGUgdmFsdWUgdG8gYmUgc2hpZnRlZC4gICovCiAJICBy
ZXN1bHRfdHlwZSA9IHR5cGUwOwotCSAgLyogQ29udmVydCB0aGUgc2hpZnQt
Y291bnQgdG8gYW4gaW50ZWdlciwgcmVnYXJkbGVzcyBvZiBzaXplCi0JICAg
ICBvZiB2YWx1ZSBiZWluZyBzaGlmdGVkLiAgKi8KLQkgIGlmIChUWVBFX01B
SU5fVkFSSUFOVCAoVFJFRV9UWVBFIChvcDEpKSAhPSBpbnRlZ2VyX3R5cGVf
bm9kZSkKKwkgIC8qIENvbnZlcnQgdGhlIG5vbiB2ZWN0b3Igc2hpZnQtY291
bnQgdG8gYW4gaW50ZWdlciwgcmVnYXJkbGVzcworCSAgICAgb2Ygc2l6ZSBv
ZiB2YWx1ZSBiZWluZyBzaGlmdGVkLiAgKi8KKwkgIGlmIChUUkVFX0NPREUg
KFRSRUVfVFlQRSAob3AxKSkgIT0gVkVDVE9SX1RZUEUKKwkgICAgICAmJiBU
WVBFX01BSU5fVkFSSUFOVCAoVFJFRV9UWVBFIChvcDEpKSAhPSBpbnRlZ2Vy
X3R5cGVfbm9kZSkKIAkgICAgb3AxID0gY29udmVydCAoaW50ZWdlcl90eXBl
X25vZGUsIG9wMSk7CiAJICAvKiBBdm9pZCBjb252ZXJ0aW5nIG9wMSB0byBy
ZXN1bHRfdHlwZSBsYXRlci4gICovCiAJICBjb252ZXJ0ZWQgPSAxOwpAQCAt
OTc2NCw3ICs5ODAzLDIxIEBAIGJ1aWxkX2JpbmFyeV9vcCAobG9jYXRpb25f
dCBsb2NhdGlvbiwgZW4KICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBMU0hJ
RlRfRVhQUjoKLSAgICAgIGlmICgoY29kZTAgPT0gSU5URUdFUl9UWVBFIHx8
IGNvZGUwID09IEZJWEVEX1BPSU5UX1RZUEUpCisgICAgICBpZiAoY29kZTAg
PT0gVkVDVE9SX1RZUEUgJiYgY29kZTEgPT0gSU5URUdFUl9UWVBFCisgICAg
ICAgICAgJiYgVFJFRV9DT0RFIChUUkVFX1RZUEUgKHR5cGUwKSkgPT0gSU5U
RUdFUl9UWVBFKQorICAgICAgICB7CisgICAgICAgICAgcmVzdWx0X3R5cGUg
PSB0eXBlMDsKKyAgICAgICAgICBjb252ZXJ0ZWQgPSAxOworICAgICAgICB9
CisgICAgICBlbHNlIGlmIChjb2RlMCA9PSBWRUNUT1JfVFlQRSAmJiBjb2Rl
MSA9PSBWRUNUT1JfVFlQRQorCSAgJiYgVFJFRV9DT0RFIChUUkVFX1RZUEUg
KHR5cGUwKSkgPT0gSU5URUdFUl9UWVBFCisgICAgICAgICAgJiYgVFJFRV9D
T0RFIChUUkVFX1RZUEUgKHR5cGUxKSkgPT0gSU5URUdFUl9UWVBFCisgICAg
ICAgICAgJiYgVFlQRV9WRUNUT1JfU1VCUEFSVFMgKHR5cGUwKSA9PSBUWVBF
X1ZFQ1RPUl9TVUJQQVJUUyAodHlwZTEpKQorCXsKKwkgIHJlc3VsdF90eXBl
ID0gdHlwZTA7CisJICBjb252ZXJ0ZWQgPSAxOworCX0KKyAgICAgIGVsc2Ug
aWYgKChjb2RlMCA9PSBJTlRFR0VSX1RZUEUgfHwgY29kZTAgPT0gRklYRURf
UE9JTlRfVFlQRSkKIAkgICYmIGNvZGUxID09IElOVEVHRVJfVFlQRSkKIAl7
CiAJICBpZiAoVFJFRV9DT0RFIChvcDEpID09IElOVEVHRVJfQ1NUKQpAQCAt
OTc4Niw5ICs5ODM5LDEwIEBAIGJ1aWxkX2JpbmFyeV9vcCAobG9jYXRpb25f
dCBsb2NhdGlvbiwgZW4KIAogCSAgLyogVXNlIHRoZSB0eXBlIG9mIHRoZSB2
YWx1ZSB0byBiZSBzaGlmdGVkLiAgKi8KIAkgIHJlc3VsdF90eXBlID0gdHlw
ZTA7Ci0JICAvKiBDb252ZXJ0IHRoZSBzaGlmdC1jb3VudCB0byBhbiBpbnRl
Z2VyLCByZWdhcmRsZXNzIG9mIHNpemUKLQkgICAgIG9mIHZhbHVlIGJlaW5n
IHNoaWZ0ZWQuICAqLwotCSAgaWYgKFRZUEVfTUFJTl9WQVJJQU5UIChUUkVF
X1RZUEUgKG9wMSkpICE9IGludGVnZXJfdHlwZV9ub2RlKQorCSAgLyogQ29u
dmVydCB0aGUgbm9uIHZlY3RvciBzaGlmdC1jb3VudCB0byBhbiBpbnRlZ2Vy
LCByZWdhcmRsZXNzCisJICAgICBvZiBzaXplIG9mIHZhbHVlIGJlaW5nIHNo
aWZ0ZWQuICAqLworCSAgaWYgKFRSRUVfQ09ERSAoVFJFRV9UWVBFIChvcDEp
KSAhPSBWRUNUT1JfVFlQRQorCSAgICAgICYmIFRZUEVfTUFJTl9WQVJJQU5U
IChUUkVFX1RZUEUgKG9wMSkpICE9IGludGVnZXJfdHlwZV9ub2RlKQogCSAg
ICBvcDEgPSBjb252ZXJ0IChpbnRlZ2VyX3R5cGVfbm9kZSwgb3AxKTsKIAkg
IC8qIEF2b2lkIGNvbnZlcnRpbmcgb3AxIHRvIHJlc3VsdF90eXBlIGxhdGVy
LiAgKi8KIAkgIGNvbnZlcnRlZCA9IDE7Cg==

--0016362844f273c0e0049374256a--

[-- Attachment #2.1.1: Type: text/plain, Size: 2010 bytes --]

Here is a version with improved build_vector_from val.

ChangeLog:

2010-10-25  Artjoms Sinkarovs <artyom.shinakroff@gmail.com>
  Andrew Pinski <pinskia@gmail.com>

  gcc/
  * tree.h (build_vector_from_val): Declare.
  * tree.c (build_vector_from_val): New function.
  * c-typeck.c (build_binary_op): Handle vector shifting.

  gcc/testsuite/
  * gcc.c-torture/execute/vector-shift.c: Likewise.
  * gcc.c-torture/execute/vector-shift1.c: New testcase.
  * gcc.c-torture/execute/vector-shift2.c: New testcase.
  * gcc.dg/vector-shift.c: New testcase.
  * gcc.dg/vector-shift1.c: New testcase.
  * gcc.dg/vector-shift2.c: New testcase.
  * gcc.dg/vector-shift3.c: New testcase.
  * gcc.dg/vector-shift4.c: New testcase.

bootstrapped and tested on x86_64_unknown-linux

OK?


On Mon, Oct 25, 2010 at 4:27 PM, Nathan Froyd <froydnj@codesourcery.com> wrote:
> On Mon, Oct 25, 2010 at 04:21:47PM +0100, Artem Shinkarov wrote:
>> Does it look better now:
>>
>> tree
>> build_vector_from_val (const tree sc, const tree vectype)
>> {
>>   int i, nunits = TYPE_VECTOR_SUBPARTS (vectype);
>>   VEC(constructor_elt, gc) *v;
>>
>>   if (sc == error_mark_node)
>>     return sc;
>>
>>   gcc_assert (TREE_TYPE (sc) == TREE_TYPE (vectype));
>>
>>   v = VEC_alloc (constructor_elt, gc, nunits);
>>   for (i = 0; i < nunits; ++i)
>>     CONSTRUCTOR_APPEND_ELT (v, size_int (i), sc);
>                                 ^^^^^^^^^^^^
>
> You can just pass NULL_TREE here and the Right Thing will happen.
>
> I think the logic looks fine.  For consistency's sake, it would probably
> be good to have the argument order reversed, i.e.:
>
> tree
> build_vector_from_val (const_tree vectype, const_tree sc)
>
> as that would more closely match the existing build_vector* functions.
>
> Please also note that you want const_tree instead of 'const tree' (note
> underscore).  If there are other instances of that in your patch, you'll
> want to fix those too.
>
> -Nathan
>

[-- Attachment #2.1.2: vectorshift.c.v7.diff --]
[-- Type: text/x-diff, Size: 15910 bytes --]

Index: gcc/doc/extend.texi
===================================================================
--- gcc/doc/extend.texi	(revision 165913)
+++ gcc/doc/extend.texi	(working copy)
@@ -6309,6 +6309,23 @@ v4si a, b, c;
 c = a + b;
 @end smallexample
 
+In C it is possible to use shifting operators @code{<<, >>} on integer-type
+vectors. The operation is defined as following: @code{@{a0, a1, ..., an@} >> @{b0, b1,
+..., bn@} == @{a0 >> b0, a1 >> b1, ..., an >> bn@}}@.  Additionally one of the
+operands can be a scalar integer in which case the scalar is converted to the
+type used by the vector operand and each element of this new vector is the
+scalar's value.  Consider the following code.
+
+@smallexample
+typedef int v4si __attribute__ ((vector_size (16)));
+
+v4si a, b, c;
+int i = 1;
+
+b = a >> 1;     /* b = a >> @{1,1,1,1@}; */
+c = 1 << a;     /* c = @{1,1,1,1@} << a; */
+@end smallexample
+
 Subtraction, multiplication, division, and the logical operations
 operate in a similar manner.  Likewise, the result of using the unary
 minus or complement operators on a vector type is a vector whose
Index: gcc/tree.c
===================================================================
--- gcc/tree.c	(revision 165913)
+++ gcc/tree.c	(working copy)
@@ -1366,6 +1366,28 @@ build_vector_from_ctor (tree type, VEC(c
   return build_vector (type, nreverse (list));
 }
 
+/* Build a vector of type VECTYPE where all the elements are SCs.  */
+tree
+build_vector_from_val (tree vectype, tree sc) 
+{
+  int i, nunits = TYPE_VECTOR_SUBPARTS (vectype);
+  VEC(constructor_elt, gc) *v = NULL;
+
+  if (sc == error_mark_node)
+    return sc;
+
+  gcc_assert (TREE_TYPE (sc) == TREE_TYPE (vectype));
+
+  v = VEC_alloc (constructor_elt, gc, nunits);
+  for (i = 0; i < nunits; ++i)
+    CONSTRUCTOR_APPEND_ELT (v, size_int (i), sc);
+
+  if (CONSTANT_CLASS_P (sc))
+    return build_vector_from_ctor (vectype, v);
+  else 
+    return build_constructor (vectype, v);
+}
+
 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
    are in the VEC pointed to by VALS.  */
 tree
Index: gcc/tree.h
===================================================================
--- gcc/tree.h	(revision 165913)
+++ gcc/tree.h	(working copy)
@@ -4034,6 +4034,7 @@ extern tree build_int_cst_type (tree, HO
 extern tree build_int_cst_wide (tree, unsigned HOST_WIDE_INT, HOST_WIDE_INT);
 extern tree build_vector (tree, tree);
 extern tree build_vector_from_ctor (tree, VEC(constructor_elt,gc) *);
+extern tree build_vector_from_val (tree, tree);
 extern tree build_constructor (tree, VEC(constructor_elt,gc) *);
 extern tree build_constructor_single (tree, tree, tree);
 extern tree build_constructor_from_list (tree, tree);
Index: gcc/testsuite/gcc.c-torture/execute/vector-shift2.c
===================================================================
--- gcc/testsuite/gcc.c-torture/execute/vector-shift2.c	(revision 0)
+++ gcc/testsuite/gcc.c-torture/execute/vector-shift2.c	(revision 0)
@@ -0,0 +1,60 @@
+/* dg-do run */
+#define vector(elcount, type)  \
+__attribute__((vector_size((elcount)*sizeof(type)))) type
+
+#define vidx(type, vec, idx) (*((type *) &(vec) + idx))
+#define uint unsigned int
+
+int main (int argc, char *argv[]) {
+    vector(4, uint) vuint  = { 1,  2,  3,  4};
+    vector(4,  int) vint0  = { 1,  1,  1,  1};
+    vector(4,  int) vint1  = {-1, -1, -1, -1};
+
+    vector(4,  int) i1, i2, i3;
+    vector(4, uint) u1, u2, u3;
+
+    i1 = vint1<< vint0;
+    
+    if (vidx(int, i1, 0) != ((int)-1 << (int)1))
+        __builtin_abort ();
+    if (vidx(int, i1, 1) != ((int)-1 << (int)1))
+        __builtin_abort ();
+    if (vidx(int, i1, 2) != ((int)-1 << (int)1))
+        __builtin_abort ();
+    if (vidx(int, i1, 3) != ((int)-1 << (int)1))
+        __builtin_abort ();
+
+    u1 = vuint << vint0;
+
+    if (vidx(int, u1, 0) != ((uint)1  << (int)1))
+        __builtin_abort ();
+    if (vidx(int, u1, 1) != ((uint)2  << (int)1))
+        __builtin_abort ();
+    if (vidx(int, u1, 2) != ((uint)3  << (int)1))
+        __builtin_abort ();
+    if (vidx(int, u1, 3) != ((uint)4  << (int)1))
+        __builtin_abort ();
+
+    
+    i2 = vint1 >> vuint;
+
+    if (vidx(int, i2, 0) != ((int)-1  >> (uint)1))
+        __builtin_abort ();
+    if (vidx(int, i2, 1) != ((int)-1  >> (uint)2))
+        __builtin_abort ();
+    if (vidx(int, i2, 2) != ((int)-1  >> (uint)3))
+        __builtin_abort ();
+    if (vidx(int, i2, 3) != ((int)-1  >> (uint)4))
+        __builtin_abort ();
+
+
+    vint1 >>= vuint;
+    
+    vuint <<= vint0;
+    vuint <<= vint1;
+
+
+    return 0;
+}
+
+
Index: gcc/testsuite/gcc.c-torture/execute/vector-shift.c
===================================================================
--- gcc/testsuite/gcc.c-torture/execute/vector-shift.c	(revision 0)
+++ gcc/testsuite/gcc.c-torture/execute/vector-shift.c	(revision 0)
@@ -0,0 +1,48 @@
+
+#define vector __attribute__((vector_size(sizeof(int)*4) ))
+
+static vector int allones = {1, 1, 1, 1};
+static vector int allzeros = {0, 0, 0, 0};
+static vector int numbers = {0, 1, 2, 3};
+static vector int numbersleftshiftallones = {0, 2, 4, 6};
+static vector int numbersrightshiftallones = {0, 0, 1, 1};
+
+
+static vector unsigned int uallones = {1, 1, 1, 1};
+static vector unsigned int uallzeros = {0, 0, 0, 0};
+static vector unsigned int unumbers = {0, 1, 2, 3};
+static vector unsigned int unumbersleftshiftallones = {0, 2, 4, 6};
+static vector unsigned int unumbersrightshiftallones = {0, 0, 1, 1};
+
+#define TEST(result, expected) \
+do { \
+  typeof(result) result1 = result; \
+  if(sizeof (result1) != sizeof (expected)) \
+    __builtin_abort (); \
+  if (__builtin_memcmp (&result1, &expected, sizeof(result1)) != 0) \
+    __builtin_abort (); \
+}while (0);
+
+int main(void)
+{
+  vector int result;
+  TEST ((numbers << allzeros), numbers);
+  TEST ((numbers >> allzeros), numbers);
+  TEST((numbers << allones), numbersleftshiftallones);
+  TEST((numbers >> allones), numbersrightshiftallones);
+  /* Test left shift followed by a right shift, numbers should be back as
+     numbers are all small numbers and no lose of precision happens.   */
+  TEST((numbers << allones) >> allones, numbers);
+  
+  
+  
+  TEST ((unumbers << uallzeros), unumbers);
+  TEST ((unumbers >> uallzeros), unumbers);
+  TEST((unumbers << uallones), unumbersleftshiftallones);
+  TEST((unumbers >> uallones), unumbersrightshiftallones);
+  /* Test left shift followed by a right shift, numbers should be back as
+     numbers are all small numbers and no lose of precision happens.   */
+  TEST((unumbers << uallones) >> uallones, unumbers);
+
+  return 0;  
+}
Index: gcc/testsuite/gcc.c-torture/execute/vector-shift1.c
===================================================================
--- gcc/testsuite/gcc.c-torture/execute/vector-shift1.c	(revision 0)
+++ gcc/testsuite/gcc.c-torture/execute/vector-shift1.c	(revision 0)
@@ -0,0 +1,17 @@
+#define vector __attribute__((vector_size(8*sizeof(short))))
+
+int main (int argc, char *argv[]) {
+  vector short v0 = {argc,2,3,4,5,6,7};
+  vector short v1 = {2,2,2,2,2,2,2};
+  vector short r1,r2,r3,r4;
+  int i = 8;
+
+  r1 = v0 << 1;
+  r2 = 1 << v0;
+
+  r3 = v0 << v1;
+  r4 = v0 >> v1;
+
+  return 0;
+}
+
Index: gcc/testsuite/gcc.dg/vector-shift4.c
===================================================================
--- gcc/testsuite/gcc.dg/vector-shift4.c	(revision 0)
+++ gcc/testsuite/gcc.dg/vector-shift4.c	(revision 0)
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+
+#define vector(elcount, type)  \
+__attribute__((vector_size((elcount)*sizeof(type)))) type
+
+
+int main (int argc, char *argv[]) {
+    vector(8, short) v0 = {argc,2,3,4,5,6,7};
+    short sc;
+
+    v0 >>= scalar0; /* { dg-error ".*scalar0.*undeclared" } */
+    
+    return 0;
+}
+
Index: gcc/testsuite/gcc.dg/vector-shift.c
===================================================================
--- gcc/testsuite/gcc.dg/vector-shift.c	(revision 0)
+++ gcc/testsuite/gcc.dg/vector-shift.c	(revision 0)
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+#define vector(elcount, type)  \
+__attribute__((vector_size((elcount)*sizeof(type)))) type
+
+int main (int argc, char *argv[]) {
+    vector(4,char) vchar = {1,2,3,4};
+    vector(4, int) vint  = {1,1,1,1};
+    
+    vint <<= vchar;  /* { dg-error "nvalid operands to binary <<" } */
+    vchar >>= vint;  /* { dg-error "nvalid operands to binary >>" } */
+
+    return 0;
+}
+
Index: gcc/testsuite/gcc.dg/vector-shift1.c
===================================================================
--- gcc/testsuite/gcc.dg/vector-shift1.c	(revision 0)
+++ gcc/testsuite/gcc.dg/vector-shift1.c	(revision 0)
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+#define vector(elcount, type)  \
+__attribute__((vector_size((elcount)*sizeof(type)))) type
+
+int main (int argc, char *argv[]) {
+    vector(4, float) vfloat0 = {1., 2., 3., 4.};
+    vector(4, float) vfloat1 = {1., 2., 3., 4.};
+    
+    vector(4,   int) vint   = {1,  1,  1,  1 };
+    
+    vint <<= vfloat0;  /* { dg-error "nvalid operands to binary <<" } */
+    vfloat0 >>= vint;  /* { dg-error "nvalid operands to binary >>" } */
+
+    vfloat0 <<= vfloat1;  /* { dg-error "nvalid operands to binary <<" } */
+
+    return 0;
+}
+
Index: gcc/testsuite/gcc.dg/vector-shift2.c
===================================================================
--- gcc/testsuite/gcc.dg/vector-shift2.c	(revision 0)
+++ gcc/testsuite/gcc.dg/vector-shift2.c	(revision 0)
@@ -0,0 +1,61 @@
+/* { dg-do run } */
+/* { dg-options "-fno-var-tracking-assignments" } */
+
+#define vector(elcount, type)  \
+__attribute__((vector_size((elcount)*sizeof(type)))) type
+
+#define vidx(type, vec, idx) (*((type *) &(vec) + idx))
+#define uchar unsigned char
+
+#define ch14 1,2,3,4
+#define ch1  1,1,1,1
+#define chm1 -1,-1,-1,-1
+
+int main (int argc, char *argv[]) {
+    vector(16, uchar) vuchar  = { ch14, ch14, ch14, ch14};
+    vector(16,  char) vchar0  = { ch1, ch1, ch1, ch1};
+    vector(16,  char) vchar1  = { chm1, chm1, chm1, chm1};
+
+    vector(16,  char) i1, i2, i3;
+    vector(16, uchar) u1, u2, u3;
+
+    i1 = vchar1<< vchar0;
+    
+    if (vidx(char, i1, 0) != ((char)-1 << (char)1))
+        __builtin_abort ();
+    if (vidx(char, i1, 1) != ((char)-1 << (char)1))
+        __builtin_abort ();
+    if (vidx(char, i1, 2) != ((char)-1 << (char)1))
+        __builtin_abort ();
+    if (vidx(char, i1, 3) != ((char)-1 << (char)1))
+        __builtin_abort ();
+    u1 = vuchar << vchar0;
+
+    if (vidx(char, u1, 0) != ((uchar)1  << (char)1))
+        __builtin_abort ();
+    if (vidx(char, u1, 1) != ((uchar)2  << (char)1))
+        __builtin_abort ();
+    if (vidx(char, u1, 2) != ((uchar)3  << (char)1))
+        __builtin_abort ();
+    if (vidx(char, u1, 3) != ((uchar)4  << (char)1))
+        __builtin_abort ();
+
+    
+    i2 = vchar1 >> vuchar;
+
+    if (vidx(char, i2, 0) != ((char)-1  >> (uchar)1))
+        __builtin_abort ();
+    if (vidx(char, i2, 1) != ((char)-1  >> (uchar)2))
+        __builtin_abort ();
+    if (vidx(char, i2, 2) != ((char)-1  >> (uchar)3))
+        __builtin_abort ();
+    if (vidx(char, i2, 3) != ((char)-1  >> (uchar)4))
+        __builtin_abort ();
+    
+    vchar1 >>= vuchar;
+    vuchar <<= vchar0;
+    vuchar <<= vchar1;
+
+    return 0;
+}
+
Index: gcc/testsuite/gcc.dg/vector-shift3.c
===================================================================
--- gcc/testsuite/gcc.dg/vector-shift3.c	(revision 0)
+++ gcc/testsuite/gcc.dg/vector-shift3.c	(revision 0)
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+
+#define vector(elcount, type)  \
+__attribute__((vector_size((elcount)*sizeof(type)))) type
+
+
+int main (int argc, char *argv[]) {
+    vector(8, short) v0 = {argc,2,3,4,5,6,7};
+    short sc;
+
+    
+    scalar1 <<= v0; /* { dg-error ".*scalar1.*undeclared" } */
+   
+    return 0;
+}
+
Index: gcc/c-typeck.c
===================================================================
--- gcc/c-typeck.c	(revision 165913)
+++ gcc/c-typeck.c	(working copy)
@@ -9565,6 +9565,30 @@ build_binary_op (location_t location, en
 
   objc_ok = objc_compare_types (type0, type1, -3, NULL_TREE);
 
+  /* For 'vector <shift> scalar' or 'scalar <shift> vector', we convert 
+     a scalar to a vector. Truncating the shift amount is ok.  */
+  if ((code0 == VECTOR_TYPE || code1 == VECTOR_TYPE)
+      && (code0 != code1))
+    {
+      switch (code)
+        {
+          case RSHIFT_EXPR:
+          case LSHIFT_EXPR:
+            if (code0 == INTEGER_TYPE)
+              {
+                tree sc = save_expr (op0);
+                sc = convert (TREE_TYPE (type1), sc);
+                op0 = build_vector_from_val (type1, sc);
+                orig_type0 = type0 = TREE_TYPE (op0);
+                code0 = TREE_CODE (type0);
+              }
+            break;
+
+          default:
+            break;
+        }
+    }
+
   switch (code)
     {
     case PLUS_EXPR:
@@ -9727,7 +9751,21 @@ build_binary_op (location_t location, en
 	 Also set SHORT_SHIFT if shifting rightward.  */
 
     case RSHIFT_EXPR:
-      if ((code0 == INTEGER_TYPE || code0 == FIXED_POINT_TYPE)
+      if (code0 == VECTOR_TYPE && code1 == INTEGER_TYPE
+          && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE)
+        {
+          result_type = type0;
+          converted = 1;
+        }
+      else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
+	  && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
+          && TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE
+          && TYPE_VECTOR_SUBPARTS (type0) == TYPE_VECTOR_SUBPARTS (type1))
+	{
+	  result_type = type0;
+	  converted = 1;
+	}
+      else if ((code0 == INTEGER_TYPE || code0 == FIXED_POINT_TYPE)
 	  && code1 == INTEGER_TYPE)
 	{
 	  if (TREE_CODE (op1) == INTEGER_CST)
@@ -9754,9 +9792,10 @@ build_binary_op (location_t location, en
 
 	  /* Use the type of the value to be shifted.  */
 	  result_type = type0;
-	  /* Convert the shift-count to an integer, regardless of size
-	     of value being shifted.  */
-	  if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
+	  /* Convert the non vector shift-count to an integer, regardless
+	     of size of value being shifted.  */
+	  if (TREE_CODE (TREE_TYPE (op1)) != VECTOR_TYPE
+	      && TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
 	    op1 = convert (integer_type_node, op1);
 	  /* Avoid converting op1 to result_type later.  */
 	  converted = 1;
@@ -9764,7 +9803,21 @@ build_binary_op (location_t location, en
       break;
 
     case LSHIFT_EXPR:
-      if ((code0 == INTEGER_TYPE || code0 == FIXED_POINT_TYPE)
+      if (code0 == VECTOR_TYPE && code1 == INTEGER_TYPE
+          && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE)
+        {
+          result_type = type0;
+          converted = 1;
+        }
+      else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
+	  && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
+          && TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE
+          && TYPE_VECTOR_SUBPARTS (type0) == TYPE_VECTOR_SUBPARTS (type1))
+	{
+	  result_type = type0;
+	  converted = 1;
+	}
+      else if ((code0 == INTEGER_TYPE || code0 == FIXED_POINT_TYPE)
 	  && code1 == INTEGER_TYPE)
 	{
 	  if (TREE_CODE (op1) == INTEGER_CST)
@@ -9786,9 +9839,10 @@ build_binary_op (location_t location, en
 
 	  /* Use the type of the value to be shifted.  */
 	  result_type = type0;
-	  /* Convert the shift-count to an integer, regardless of size
-	     of value being shifted.  */
-	  if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
+	  /* Convert the non vector shift-count to an integer, regardless
+	     of size of value being shifted.  */
+	  if (TREE_CODE (TREE_TYPE (op1)) != VECTOR_TYPE
+	      && TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
 	    op1 = convert (integer_type_node, op1);
 	  /* Avoid converting op1 to result_type later.  */
 	  converted = 1;

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Email problems
  2010-10-26  5:17 Email problems Joseph S. Myers
@ 2010-10-26 17:03 ` Christopher Faylor
  2010-10-26 17:19   ` Jeff Law
  0 siblings, 1 reply; 4+ messages in thread
From: Christopher Faylor @ 2010-10-26 17:03 UTC (permalink / raw)
  To: overseers, Joseph S. Myers

On Mon, Oct 25, 2010 at 10:10:34PM +0000, Joseph S. Myers wrote:
>It appears there are some problems with emails to gcc.gnu.org lists not 
>reaching the lists - for example, I received a personal copy of the 
>attached message but it did not reach the mailing list.  Could someone 
>look into what happened with this message?

This email also took a long time to percolate through the system.  I watched
it come in last night and it took many minutes to propagate.  I don't know why.

Are things better now?

cgf

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Email problems
  2010-10-26 17:03 ` Christopher Faylor
@ 2010-10-26 17:19   ` Jeff Law
  2010-10-26 17:30     ` Christopher Faylor
  0 siblings, 1 reply; 4+ messages in thread
From: Jeff Law @ 2010-10-26 17:19 UTC (permalink / raw)
  To: overseers, Joseph S. Myers

  On 10/26/10 11:02, Christopher Faylor wrote:
> On Mon, Oct 25, 2010 at 10:10:34PM +0000, Joseph S. Myers wrote:
>> It appears there are some problems with emails to gcc.gnu.org lists not
>> reaching the lists - for example, I received a personal copy of the
>> attached message but it did not reach the mailing list.  Could someone
>> look into what happened with this message?
> This email also took a long time to percolate through the system.  I watched
> it come in last night and it took many minutes to propagate.  I don't know why.
>
> Are things better now?
The box seems to, in general, be rather slow at the moment.  I hopped on 
earlier today, it's load was running at about 6 with a variety of cvs 
processes running.  Perhaps someone is branching a large project still 
in the CVS repo or something like that.

jeff

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Email problems
  2010-10-26 17:19   ` Jeff Law
@ 2010-10-26 17:30     ` Christopher Faylor
  0 siblings, 0 replies; 4+ messages in thread
From: Christopher Faylor @ 2010-10-26 17:30 UTC (permalink / raw)
  To: overseers, Jeff Law, Joseph S. Myers

On Tue, Oct 26, 2010 at 11:13:50AM -0600, Jeff Law wrote:
>  On 10/26/10 11:02, Christopher Faylor wrote:
>> On Mon, Oct 25, 2010 at 10:10:34PM +0000, Joseph S. Myers wrote:
>>> It appears there are some problems with emails to gcc.gnu.org lists not
>>> reaching the lists - for example, I received a personal copy of the
>>> attached message but it did not reach the mailing list.  Could someone
>>> look into what happened with this message?
>> This email also took a long time to percolate through the system.  I watched
>> it come in last night and it took many minutes to propagate.  I don't know why.
>>
>> Are things better now?
>The box seems to, in general, be rather slow at the moment.  I hopped on 
>earlier today, it's load was running at about 6 with a variety of cvs 
>processes running.  Perhaps someone is branching a large project still 
>in the CVS repo or something like that.

A load average of 6 isn't bad for the middle of the day on sourceware.
However, the load average wasn't that bad last night but it seemed like
mail was still arriving rather sluggishly.

If my last email is any indication, it seems like there is no obvious
bottleneck right now since it came through pretty quickly.

cgf

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-10-26 17:30 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-10-26  5:17 Email problems Joseph S. Myers
2010-10-26 17:03 ` Christopher Faylor
2010-10-26 17:19   ` Jeff Law
2010-10-26 17:30     ` Christopher Faylor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).