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

            Bug ID: 115466
           Summary: rs6000 vec_ld built-in works on BE but not LE
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: carll at gcc dot gnu.org
  Target Milestone: ---

Created attachment 58416
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=58416&action=edit
vec_ld test program

The attached test program for the IBM rs6000 platform tests the vec_ld built-in
for vector ints and vector floats.  The output is correct on a BE system and
incorrect on an LE system.

gcc vec_ld_test.c -o vec_ld_test

./vec_ld_test

BE output of test program:
 ./vec_ld_test
ia[0-3] = 1, 2, 3, 4
via (should match ia[0-3]) = 1, 2, 3, 4
ia[4-7] = 5, 6, 7, 8
via (should match ia[4-7]) = 5, 6, 7, 8

fa = 10.000000, 20.000000, 30.000000, 40.000000
vfa (should match fa[0-3]) = 10.000000, 20.000000, 30.000000, 40.000000
vfa (should match fa[4-7]) = 50.000000, 60.000000, 70.000000, 80.000000

vec_ld (0, ia) = 1, 2, 3, 4
vec_ld (1, ia) = 1, 2, 3, 4
vec_ld (2, ia) = 1, 2, 3, 4
vec_ld (3, ia) = 1, 2, 3, 4
vec_ld (4, ia) = 1, 2, 3, 4
vec_ld (5, ia) = 1, 2, 3, 4
vec_ld (6, ia) = 1, 2, 3, 4
vec_ld (7, ia) = 1, 2, 3, 4
vec_ld (8, ia) = 1, 2, 3, 4
vec_ld (9, ia) = 1, 2, 3, 4
vec_ld (10, ia) = 1, 2, 3, 4
vec_ld (11, ia) = 1, 2, 3, 4
vec_ld (12, ia) = 1, 2, 3, 4
vec_ld (13, ia) = 1, 2, 3, 4
vec_ld (14, ia) = 1, 2, 3, 4
vec_ld (15, ia) = 1, 2, 3, 4
vec_ld (16, ia) = 5, 6, 7, 8
vec_ld (17, ia) = 5, 6, 7, 8
vec_ld (18, ia) = 5, 6, 7, 8
vec_ld (19, ia) = 5, 6, 7, 8
vec_ld (20, ia) = 5, 6, 7, 8
vec_ld (21, ia) = 5, 6, 7, 8
vec_ld (22, ia) = 5, 6, 7, 8
vec_ld (23, ia) = 5, 6, 7, 8
vec_ld (24, ia) = 5, 6, 7, 8
vec_ld (25, ia) = 5, 6, 7, 8
vec_ld (26, ia) = 5, 6, 7, 8
vec_ld (27, ia) = 5, 6, 7, 8
vec_ld (28, ia) = 5, 6, 7, 8
vec_ld (29, ia) = 5, 6, 7, 8
vec_ld (30, ia) = 5, 6, 7, 8
vec_ld (31, ia) = 5, 6, 7, 8

The same test program compliled and run on an LE machine:

gcc vec_ld_test.c -o vec_ld_test

./vec_ld_test

ia[0-3] = 1, 2, 3, 4
via (should match ia[0-3]) = -552597992, 32767, 1, 2
ia[4-7] = 5, 6, 7, 8
via (should match ia[4-7]) = 3, 4, 5, 6

fa = 10.000000, 20.000000, 30.000000, 40.000000
vfa (should match fa[0-3]) = 0.000000, 0.000000, 10.000000, 20.000000
vfa (should match fa[4-7]) = 30.000000, 40.000000, 50.000000, 60.000000

vec_ld (0, ia) = -552597992, 32767, 1, 2
vec_ld (1, ia) = -552597992, 32767, 1, 2
vec_ld (2, ia) = -552597992, 32767, 1, 2
vec_ld (3, ia) = -552597992, 32767, 1, 2
vec_ld (4, ia) = -552597992, 32767, 1, 2
vec_ld (5, ia) = -552597992, 32767, 1, 2
vec_ld (6, ia) = -552597992, 32767, 1, 2
vec_ld (7, ia) = -552597992, 32767, 1, 2
vec_ld (8, ia) = 3, 4, 5, 6
vec_ld (9, ia) = 3, 4, 5, 6
vec_ld (10, ia) = 3, 4, 5, 6
vec_ld (11, ia) = 3, 4, 5, 6
vec_ld (12, ia) = 3, 4, 5, 6
vec_ld (13, ia) = 3, 4, 5, 6
vec_ld (14, ia) = 3, 4, 5, 6
vec_ld (15, ia) = 3, 4, 5, 6
vec_ld (16, ia) = 3, 4, 5, 6
vec_ld (17, ia) = 3, 4, 5, 6
vec_ld (18, ia) = 3, 4, 5, 6
vec_ld (19, ia) = 3, 4, 5, 6
vec_ld (20, ia) = 3, 4, 5, 6
vec_ld (21, ia) = 3, 4, 5, 6
vec_ld (22, ia) = 3, 4, 5, 6
vec_ld (23, ia) = 3, 4, 5, 6
vec_ld (24, ia) = 7, 8, 1092616192, 1101004800
vec_ld (25, ia) = 7, 8, 1092616192, 1101004800
vec_ld (26, ia) = 7, 8, 1092616192, 1101004800
vec_ld (27, ia) = 7, 8, 1092616192, 1101004800
vec_ld (28, ia) = 7, 8, 1092616192, 1101004800
vec_ld (29, ia) = 7, 8, 1092616192, 1101004800
vec_ld (30, ia) = 7, 8, 1092616192, 1101004800
vec_ld (31, ia) = 7, 8, 1092616192, 1101004800

FYI, I also wrote a test to check the vec_st built-in.  That seems to work fine
on both LE and BE.

Reply via email to