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.