When using vshll_n_u8 intrinsic, gcc 4.4.1 incorrectly rejects shift operand
having value >= 8, claiming that it is out of range.

When using the following test code
/*************/
#include <arm_neon.h>
uint16x8_t test_vshll_n_u8 (uint8x8_t a)
{
    return vshll_n_u8(a, 8);
}
/*************/



Test with gcc 4.4.1:
# gcc -c -O2 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fomit-frame-pointer
test.c
test.c: In function ‘test_vshll_n_u8’:
test.c:6: error: constant out of range



It used to work fine with cs2007q3:
# gcc -c -O2 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fomit-frame-pointer
test.c
# objdump -d test.o

test.o:     file format elf32-littlearm

Disassembly of section .text:

00000000 <test_vshll_n_u8>:
   0:   ec410b17        vmov    d7, r0, r1
   4:   f3b26307        vshll.i8        q3, d7, #8
   8:   ec510b16        vmov    r0, r1, d6
   c:   ec532b17        vmov    r2, r3, d7
  10:   e12fff1e        bx      lr


-- 
           Summary: The use of ARM NEON vshll_n_u8 intrinsic results in
                    compile error on valid code
           Product: gcc
           Version: 4.4.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: siarhei dot siamashka at gmail dot com
 GCC build triplet: armv4tl-softfloat-linux-gnueabi
  GCC host triplet: armv4tl-softfloat-linux-gnueabi
GCC target triplet: armv4tl-softfloat-linux-gnueabi


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

Reply via email to