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

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).