public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/46247] New: bug with loading constant to neon quad register
@ 2010-10-30 22:29 daniel.otte at rub dot de
  2011-04-04 21:31 ` [Bug target/46247] " ramana at gcc dot gnu.org
  2024-03-16 19:52 ` pinskia at gcc dot gnu.org
  0 siblings, 2 replies; 3+ messages in thread
From: daniel.otte at rub dot de @ 2010-10-30 22:29 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46247

           Summary: bug with loading constant to neon quad register
           Product: gcc
           Version: 4.5.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: daniel.otte@rub.de


code:
+--------------------------------------------------------+
#include <stdint.h>
#include <string.h>
#include <stdio.h>
#include <arm_neon.h>

void dbg_neon(uint32x4_t d, char* name){
    uint32_t t[4];
    int i;
    *((uint32x4_t*)&(t[0])) = d;
    printf("\n==== %s debug ====\n", name);
    for(i=0;i<4;++i){
        printf(" %s[%2d] = %08X\n",name, i,t[i]);
    }
}

int main(){
    uint32x4_t qa0, qt0, qx0;
    uint32_t t[8]={ 0x78797A63, 0x7C7D7E7F, 0xC0222022, 0x44454647 };
    qt0 = (uint32x4_t){  0, 0xffffffff,  0, 0xffffffff};
//    qa0 = *((uint32x4_t*)&(t[0]));
    qa0 = vld1q_u32 (&(t[0]));
    qx0 = veorq_u32(qa0, qt0);
    dbg_neon(qt0, "qt0");
    dbg_neon(qa0, "qa0");
    dbg_neon(qx0, "qx0");
    return 0;
}
+--------------------------------------------------------+

output:
+--------------------------------------------------------+
==== qt0 debug ====
 qt0[ 0] = 00000000
 qt0[ 1] = 0000FFFF
 qt0[ 2] = 00000000
 qt0[ 3] = 0000FFFF

==== qa0 debug ====
 qa0[ 0] = 78797A63
 qa0[ 1] = 7C7D7E7F
 qa0[ 2] = C0222022
 qa0[ 3] = 44454647

==== qx0 debug ====
 qx0[ 0] = 78797A63
 qx0[ 1] = 7C7D8180
 qx0[ 2] = C0222022
 qx0[ 3] = 4445B9B8
+--------------------------------------------------------+

tested with the following gccs:
$ LC_ALL=C
~/infos/boxes/beagleboard/2010-10-29/usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc
-v
Using built-in specs.
Target: arm-angstrom-linux-gnueabi
Configured with:
/OE/angstrom/build/tmp-angstrom_2008_1/work/i686-armv7a-sdk-angstrom-linux-gnueabi/gcc-cross-sdk-4.3.3-r17.2/gcc-4.3.3/configure
--build=i686-linux --host=i686-linux --target=arm-angstrom-linux-gnueabi
--prefix=/usr/local/angstrom/arm --exec_prefix=/usr/local/angstrom/arm
--bindir=/usr/local/angstrom/arm/bin --sbindir=/usr/local/angstrom/arm/bin
--libexecdir=/usr/local/angstrom/arm/libexec
--datadir=/usr/local/angstrom/arm/share
--sysconfdir=/usr/local/angstrom/arm/etc
--sharedstatedir=/usr/local/angstrom/arm/share/com
--localstatedir=/usr/local/angstrom/arm/var
--libdir=/usr/local/angstrom/arm/lib
--includedir=/usr/local/angstrom/arm/include
--oldincludedir=/usr/local/angstrom/arm/include
--infodir=/usr/local/angstrom/arm/share/info
--mandir=/usr/local/angstrom/arm/share/man --with-gnu-ld --enable-shared
--enable-languages=c,c++,objc,fortran --enable-threads=posix --disable-multilib
--enable-c99 --enable-long-long --enable-symvers=gnu --enable-libstdcxx-pch
--program-prefix=arm-angstrom-linux-gnueabi- --enable-target-optspace
--enable-cheaders=c_std --enable-libssp --disable-bootstrap --disable-libgomp
--disable-libmudflap
--with-sysroot=/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi
--with-build-time-tools=/OE/angstrom/build/tmp-angstrom_2008_1/sysroots/i686-linux/usr/armv7a/arm-angstrom-linux-gnueabi/bin
--with-build-sysroot=/OE/angstrom/build/tmp-angstrom_2008_1/sysroots/armv7a-angstrom-linux-gnueabi
--disable-libunwind-exceptions --disable-libssp --disable-libgomp
--disable-libmudflap
--with-mpfr=/OE/angstrom/build/tmp-angstrom_2008_1/sysroots/i686-linux/usr
--enable-__cxa_atexit
Thread model: posix
gcc version 4.3.3 (GCC)

$ LC_ALL=C arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/home/bg/sat/libexec/gcc/arm-none-eabi/4.5.1/lto-wrapper
Target: arm-none-eabi
Configured with: ../gcc-4.5.1/configure --target=arm-none-eabi
--prefix=/home/bg/sat --enable-interwork --enable-multilib
--enable-languages=c,c++ --with-newlib --disable-shared --with-gnu-as
--with-gnu-ld --disable-nls --disable-werror --with-system-zlib :
(reconfigured) ../gcc-4.5.1/configure --target=arm-none-eabi
--prefix=/home/bg/sat --enable-interwork --enable-multilib
--enable-languages=c,c++ --with-newlib --disable-shared --with-gnu-as
--with-gnu-ld --disable-nls --disable-werror --with-system-zlib
Thread model: single
gcc version 4.5.1 (GCC)

commandline:
$GCC -O2 -S -Wall -mcpu=cortex-a8 -mfloat-abi=softfp -mfpu=neon  -static 
gcc_bug.c

additional information:
does not happen with -O0 but with -O1, -O2 and -O3.


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

* [Bug target/46247] bug with loading constant to neon quad register
  2010-10-30 22:29 [Bug target/46247] New: bug with loading constant to neon quad register daniel.otte at rub dot de
@ 2011-04-04 21:31 ` ramana at gcc dot gnu.org
  2024-03-16 19:52 ` pinskia at gcc dot gnu.org
  1 sibling, 0 replies; 3+ messages in thread
From: ramana at gcc dot gnu.org @ 2011-04-04 21:31 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46247

Ramana Radhakrishnan <ramana at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2011.04.04 21:31:00
                 CC|                            |ramana at gcc dot gnu.org
     Ever Confirmed|0                           |1

--- Comment #1 from Ramana Radhakrishnan <ramana at gcc dot gnu.org> 2011-04-04 21:31:00 UTC ---
        vmov.i32        d18, #0  @ v8qi @ D.13245,
        movw    r0, #:lower16:.LC0      @,
        vmov.i8 d19, #1  @ v8qi @ tmp229,
        movt    r0, #:upper16:.LC0      @,
        vmov    d17, d18  @ v8qi        @ tmp231, D.13245
        push    {r4, r5, lr}    @
        vmov.i8 d16, #2  @ v8qi @ tmp236,
        sub     sp, sp, #60     @,,
        vzip.8  d19, d17        @ tmp230, tmp231
        add     r3, sp, #48     @ tmp238,,
        fstd    d17, [sp, #16]  @ tmp231,
        vzip.8  d16, d18        @ tmp236, tmp237
        fstd    d16, [sp, #8]   @ tmp236,
        vst1.8  {d19}, [r3]     @ tmp230, tmp238
        add     r3, sp, #40     @ tmp239,,
        movw    r4, #:lower16:.LC1      @ tmp243,
        vst1.8  {d17}, [r3]     @ tmp231, tmp239 <-----
        add     r3, sp, #32     @ tmp240,,
        movt    r4, #:upper16:.LC1      @ tmp243,
        vst1.8  {d16}, [r3]     @ tmp236, tmp240
        add     r3, sp, #24     @ tmp241,,
        vst1.8  {d17}, [r3]     @ tmp231, tmp241
        bl      puts    @


Why does this end up storing so many values to the stack . The problem appears
to be with storing d17 twice instead of storing d18 in the case marked with
---->


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

* [Bug target/46247] bug with loading constant to neon quad register
  2010-10-30 22:29 [Bug target/46247] New: bug with loading constant to neon quad register daniel.otte at rub dot de
  2011-04-04 21:31 ` [Bug target/46247] " ramana at gcc dot gnu.org
@ 2024-03-16 19:52 ` pinskia at gcc dot gnu.org
  1 sibling, 0 replies; 3+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-03-16 19:52 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=46247

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The code looks correct in GCC 4.5.4 and above.

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

end of thread, other threads:[~2024-03-16 19:52 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-10-30 22:29 [Bug target/46247] New: bug with loading constant to neon quad register daniel.otte at rub dot de
2011-04-04 21:31 ` [Bug target/46247] " ramana at gcc dot gnu.org
2024-03-16 19:52 ` pinskia at gcc dot gnu.org

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