This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
target/10177: VRsave mask wrong
- From: pinskia at physics dot uc dot edu
- To: gcc-gnats at gcc dot gnu dot org
- Cc: spatel at apple dot com, aldyh at redhat dot com, kkhoo at apple dot com
- Date: 21 Mar 2003 02:08:23 -0000
- Subject: target/10177: VRsave mask wrong
- Reply-to: pinskia at physics dot uc dot edu
>Number: 10177
>Category: target
>Synopsis: VRsave mask wrong
>Confidential: no
>Severity: critical
>Priority: medium
>Responsible: unassigned
>State: open
>Class: wrong-code
>Submitter-Id: net
>Arrival-Date: Fri Mar 21 02:16:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator: Andrew Pinski
>Release: gcc version 3.4 20030320 (experimental)
>Organization:
>Environment:
powerpc-apple-darwin6.4
>Description:
The VRsave mask generated for the attached code should 0x80000000 (register v0 is the only vector register used).
int f(int a, int b) {
if (a<b) {
vector signed int v1;
vec_ste(v1, 0, &a);
return a;
}
else {
return a;
}
}
instead I get this:
_f:
mfspr r5,VRsave
oris r2,r5,0xdfff
stw r5,0xfff8(r1)
ori r0,r2,0xf000
mtspr VRsave,r0
cmpw r3,r4
or r0,r3,r3
stw r3,0x18(r1)
bge 0x34
li r4,0x0
addi r3,r1,0x18
stvewx v0,r4,r3
lwz r0,0x18(r1)
or r3,r0,r0
lwz r6,0xfff8(r1)
mtspr VRsave,r6
blr
>How-To-Repeat:
gcc -O3 -maltivec test.c -include altivec.h -c -Wa,-force_cpusubtype_ALL -v
>Fix:
Do not know.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="test.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="test.c"
aW50IGYoaW50IGEsIGludCBiKSB7CiAgICAgICAgaWYgKGE8YikgewogICAgICAgICAgICAgICAg
dmVjdG9yIHNpZ25lZCBpbnQgdjE7CiAgICAgICAgICAgICAgICB2ZWNfc3RlKHYxLCAwLCAmYSk7
CiAgICAgICAgICAgICAgICByZXR1cm4gYTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICByZXR1cm4gYTsKICAgICAgICB9Cn0K