| /* { dg-do run { target { power10_hw } } } */ |
| /* { dg-do link { target { ! power10_hw } } } */ |
| /* { dg-require-effective-target power10_ok } */ |
| /* { dg-options "-mdejagnu-cpu=power10 -save-temps" } */ |
| #include <altivec.h> |
| |
| #define DEBUG 0 |
| |
| #if DEBUG |
| #include <stdio.h> |
| #endif |
| |
| extern void abort (void); |
| |
| int |
| main (int argc, char *argv []) |
| { |
| int i; |
| unsigned int index; |
| vector unsigned char vresult_ch; |
| vector unsigned char expected_vresult_ch; |
| vector unsigned char src_va_ch; |
| vector unsigned char src_vb_ch; |
| unsigned char src_a_ch; |
| |
| vector unsigned short vresult_sh; |
| vector unsigned short expected_vresult_sh; |
| vector unsigned short src_va_sh; |
| vector unsigned short src_vb_sh; |
| unsigned short int src_a_sh; |
| |
| vector unsigned int vresult_int; |
| vector unsigned int expected_vresult_int; |
| vector unsigned int src_va_int; |
| vector unsigned int src_vb_int; |
| unsigned int src_a_int; |
| |
| vector unsigned long long vresult_ll; |
| vector unsigned long long expected_vresult_ll; |
| vector unsigned long long src_va_ll; |
| unsigned long long int src_a_ll; |
| |
| /* Vector insert, low index, from GPR */ |
| src_a_ch = 79; |
| index = 2; |
| src_va_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7, |
| 8, 9, 10, 11, 12, 13, 14, 15 }; |
| vresult_ch = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0 }; |
| expected_vresult_ch = (vector unsigned char) { 0, 1, 79, 3, 4, 5, 6, 7, |
| 8, 9, 10, 11, 12, 13, 14, 15 }; |
| |
| vresult_ch = vec_insertl (src_a_ch, src_va_ch, index); |
| |
| if (!vec_all_eq (vresult_ch, expected_vresult_ch)) { |
| #if DEBUG |
| printf("ERROR, vec_insertl (src_a_ch, src_va_ch, index)\n"); |
| for(i = 0; i < 16; i++) |
| printf(" vresult_ch[%d] = %d, expected_vresult_ch[%d] = %d\n", |
| i, vresult_ch[i], i, expected_vresult_ch[i]); |
| #else |
| abort(); |
| #endif |
| } |
| |
| src_a_sh = 79; |
| index = 10; |
| src_va_sh = (vector unsigned short int) { 0, 1, 2, 3, 4, 5, 6, 7 }; |
| vresult_sh = (vector unsigned short int) { 0, 0, 0, 0, 0, 0, 0, 0 }; |
| expected_vresult_sh = (vector unsigned short int) { 0, 1, 2, 3, |
| 4, 79, 6, 7 }; |
| |
| vresult_sh = vec_insertl (src_a_sh, src_va_sh, index); |
| |
| if (!vec_all_eq (vresult_sh, expected_vresult_sh)) { |
| #if DEBUG |
| printf("ERROR, vec_insertl (src_a_sh, src_va_sh, index)\n"); |
| for(i = 0; i < 8; i++) |
| printf(" vresult_sh[%d] = %d, expected_vresult_sh[%d] = %d\n", |
| i, vresult_sh[i], i, expected_vresult_sh[i]); |
| #else |
| abort(); |
| #endif |
| } |
| |
| src_a_int = 79; |
| index = 8; |
| src_va_int = (vector unsigned int) { 0, 1, 2, 3 }; |
| vresult_int = (vector unsigned int) { 0, 0, 0, 0 }; |
| expected_vresult_int = (vector unsigned int) { 0, 1, 79, 3 }; |
| |
| vresult_int = vec_insertl (src_a_int, src_va_int, index); |
| |
| if (!vec_all_eq (vresult_int, expected_vresult_int)) { |
| #if DEBUG |
| printf("ERROR, vec_insertl (src_a_int, src_va_int, index)\n"); |
| for(i = 0; i < 4; i++) |
| printf(" vresult_int[%d] = %d, expected_vresult_int[%d] = %d\n", |
| i, vresult_int[i], i, expected_vresult_int[i]); |
| #else |
| abort(); |
| #endif |
| } |
| |
| src_a_ll = 79; |
| index = 8; |
| src_va_ll = (vector unsigned long long) { 0, 1 }; |
| vresult_ll = (vector unsigned long long) { 0, 0 }; |
| expected_vresult_ll = (vector unsigned long long) { 0, 79 }; |
| |
| vresult_ll = vec_insertl (src_a_ll, src_va_ll, index); |
| |
| if (!vec_all_eq (vresult_ll, expected_vresult_ll)) { |
| #if DEBUG |
| printf("ERROR, vec_insertl (src_a_ll, src_va_ll, index)\n"); |
| for(i = 0; i < 2; i++) |
| printf(" vresult_ll[%d] = %d, expected_vresult_ll[%d] = %d\n", |
| i, vresult_ll[i], i, expected_vresult_ll[i]); |
| #else |
| abort(); |
| #endif |
| } |
| |
| /* Vector insert, low index, from vector */ |
| index = 2; |
| src_va_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7, |
| 8, 9, 10, 11, 12, 13, 14, 15 }; |
| src_vb_ch = (vector unsigned char) { 10, 11, 12, 13, 14, 15, 16, 17, |
| 18, 19, 20, 21, 22, 23, 24, 25 }; |
| vresult_ch = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0 }; |
| expected_vresult_ch = (vector unsigned char) { 0, 1, 18, 3, 4, 5, 6, 7, |
| 8, 9, 10, 11, 12, 13, 14, 15 }; |
| |
| vresult_ch = vec_insertl (src_vb_ch, src_va_ch, index); |
| |
| if (!vec_all_eq (vresult_ch, expected_vresult_ch)) { |
| #if DEBUG |
| printf("ERROR, vec_insertl (src_vb_ch, src_va_ch, index)\n"); |
| for(i = 0; i < 16; i++) |
| printf(" vresult_ch[%d] = %d, expected_vresult_ch[%d] = %d\n", |
| i, vresult_ch[i], i, expected_vresult_ch[i]); |
| #else |
| abort(); |
| #endif |
| } |
| |
| index = 4; |
| src_va_sh = (vector unsigned short) { 0, 1, 2, 3, 4, 5, 6, 7 }; |
| src_vb_sh = (vector unsigned short) { 10, 11, 12, 13, 14, 15, 16, 17 }; |
| vresult_sh = (vector unsigned short) { 0, 0, 0, 0, 0, 0, 0, 0 }; |
| expected_vresult_sh = (vector unsigned short) { 0, 1, 14, 3, 4, 5, 6, 7 }; |
| |
| vresult_sh = vec_insertl (src_vb_sh, src_va_sh, index); |
| |
| if (!vec_all_eq (vresult_sh, expected_vresult_sh)) { |
| #if DEBUG |
| printf("ERROR, vec_insertl (src_vb_sh, src_va_sh, index)\n"); |
| for(i = 0; i < 8; i++) |
| printf(" vresult_sh[%d] = %d, expected_vresult_sh[%d] = %d\n", |
| i, vresult_sh[i], i, expected_vresult_sh[i]); |
| #else |
| abort(); |
| #endif |
| } |
| |
| index = 8; |
| src_va_int = (vector unsigned int) { 0, 1, 2, 3 }; |
| src_vb_int = (vector unsigned int) { 10, 11, 12, 13 }; |
| vresult_int = (vector unsigned int) { 0, 0, 0, 0 }; |
| expected_vresult_int = (vector unsigned int) { 0, 1, 12, 3 }; |
| |
| vresult_int = vec_insertl (src_vb_int, src_va_int, index); |
| |
| if (!vec_all_eq (vresult_int, expected_vresult_int)) { |
| #if DEBUG |
| printf("ERROR, vec_insertl (src_vb_int, src_va_int, index)\n"); |
| for(i = 0; i < 4; i++) |
| printf(" vresult_int[%d] = %d, expected_vresult_int[%d] = %d\n", |
| i, vresult_int[i], i, expected_vresult_int[i]); |
| #else |
| abort(); |
| #endif |
| } |
| |
| /* Vector insert, high index, from GPR */ |
| src_a_ch = 79; |
| index = 2; |
| src_va_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7, |
| 8, 9, 10, 11, 12, 13, 14, 15 }; |
| vresult_ch = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0 }; |
| expected_vresult_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7, |
| 8, 9, 10, 11, 12, 79, 14, 15 }; |
| |
| vresult_ch = vec_inserth (src_a_ch, src_va_ch, index); |
| |
| if (!vec_all_eq (vresult_ch, expected_vresult_ch)) { |
| #if DEBUG |
| printf("ERROR, vec_inserth (src_a_ch, src_va_ch, index)\n"); |
| for(i = 0; i < 16; i++) |
| printf(" vresult_ch[%d] = %d, expected_vresult_ch[%d] = %d\n", |
| i, vresult_ch[i], i, expected_vresult_ch[i]); |
| #else |
| abort(); |
| #endif |
| } |
| |
| src_a_sh = 79; |
| index = 10; |
| src_va_sh = (vector unsigned short int) { 0, 1, 2, 3, 4, 5, 6, 7 }; |
| vresult_sh = (vector unsigned short int) { 0, 0, 0, 0, 0, 0, 0, 0 }; |
| expected_vresult_sh = (vector unsigned short int) { 0, 1, 79, 3, |
| 4, 5, 6, 7 }; |
| |
| vresult_sh = vec_inserth (src_a_sh, src_va_sh, index); |
| |
| if (!vec_all_eq (vresult_sh, expected_vresult_sh)) { |
| #if DEBUG |
| printf("ERROR, vec_inserth (src_a_sh, src_va_sh, index)\n"); |
| for(i = 0; i < 8; i++) |
| printf(" vresult_sh[%d] = %d, expected_vresult_sh[%d] = %d\n", |
| i, vresult_sh[i], i, expected_vresult_sh[i]); |
| #else |
| abort(); |
| #endif |
| } |
| |
| src_a_int = 79; |
| index = 8; |
| src_va_int = (vector unsigned int) { 0, 1, 2, 3 }; |
| vresult_int = (vector unsigned int) { 0, 0, 0, 0 }; |
| expected_vresult_int = (vector unsigned int) { 0, 79, 2, 3 }; |
| |
| vresult_int = vec_inserth (src_a_int, src_va_int, index); |
| |
| if (!vec_all_eq (vresult_int, expected_vresult_int)) { |
| #if DEBUG |
| printf("ERROR, vec_inserth (src_a_int, src_va_int, index)\n"); |
| for(i = 0; i < 4; i++) |
| printf(" vresult_int[%d] = %d, expected_vresult_int[%d] = %d\n", |
| i, vresult_int[i], i, expected_vresult_int[i]); |
| #else |
| abort(); |
| #endif |
| } |
| |
| src_a_ll = 79; |
| index = 8; |
| src_va_ll = (vector unsigned long long) { 0, 1 }; |
| vresult_ll = (vector unsigned long long) { 0, 0 }; |
| expected_vresult_ll = (vector unsigned long long) { 79, 1 }; |
| |
| vresult_ll = vec_inserth (src_a_ll, src_va_ll, index); |
| |
| if (!vec_all_eq (vresult_ll, expected_vresult_ll)) { |
| #if DEBUG |
| printf("ERROR, vec_inserth (src_a_ll, src_va_ll, index)\n"); |
| for(i = 0; i < 2; i++) |
| printf(" vresult_ll[%d] = %d, expected_vresult_ll[%d] = %d\n", |
| i, vresult_ll[i], i, expected_vresult_ll[i]); |
| #else |
| abort(); |
| #endif |
| } |
| |
| /* Vector insert, left index, from vector */ |
| index = 2; |
| src_va_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7, |
| 8, 9, 10, 11, 12, 13, 14, 15 }; |
| src_vb_ch = (vector unsigned char) { 10, 11, 12, 13, 14, 15, 16, 17, |
| 18, 19, 20, 21, 22, 23, 24, 25 }; |
| vresult_ch = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0 }; |
| expected_vresult_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7, |
| 8, 9, 10, 11, 12, 18, 14, 15 }; |
| |
| vresult_ch = vec_inserth (src_vb_ch, src_va_ch, index); |
| |
| if (!vec_all_eq (vresult_ch, expected_vresult_ch)) { |
| #if DEBUG |
| printf("ERROR, vec_inserth (src_vb_ch, src_va_ch, index)\n"); |
| for(i = 0; i < 16; i++) |
| printf(" vresult_ch[%d] = %d, expected_vresult_ch[%d] = %d\n", |
| i, vresult_ch[i], i, expected_vresult_ch[i]); |
| #else |
| abort(); |
| #endif |
| } |
| |
| index = 4; |
| src_va_sh = (vector unsigned short) { 0, 1, 2, 3, 4, 5, 6, 7 }; |
| src_vb_sh = (vector unsigned short) { 10, 11, 12, 13, 14, 15, 16, 17 }; |
| vresult_sh = (vector unsigned short) { 0, 0, 0, 0, 0, 0, 0, 0 }; |
| expected_vresult_sh = (vector unsigned short) { 0, 1, 2, 3, 4, 14, 6, 7 }; |
| |
| vresult_sh = vec_inserth (src_vb_sh, src_va_sh, index); |
| |
| if (!vec_all_eq (vresult_sh, expected_vresult_sh)) { |
| #if DEBUG |
| printf("ERROR, vec_inserth (src_vb_sh, src_va_sh, index)\n"); |
| for(i = 0; i < 8; i++) |
| printf(" vresult_sh[%d] = %d, expected_vresult_sh[%d] = %d\n", |
| i, vresult_sh[i], i, expected_vresult_sh[i]); |
| #else |
| abort(); |
| #endif |
| } |
| |
| index = 8; |
| src_va_int = (vector unsigned int) { 0, 1, 2, 3 }; |
| src_vb_int = (vector unsigned int) { 10, 11, 12, 13 }; |
| vresult_int = (vector unsigned int) { 0, 0, 0, 0 }; |
| expected_vresult_int = (vector unsigned int) { 0, 12, 2, 3 }; |
| |
| vresult_int = vec_inserth (src_vb_int, src_va_int, index); |
| |
| if (!vec_all_eq (vresult_int, expected_vresult_int)) { |
| #if DEBUG |
| printf("ERROR, vec_inserth (src_vb_int, src_va_int, index)\n"); |
| for(i = 0; i < 4; i++) |
| printf(" vresult_int[%d] = %d, expected_vresult_int[%d] = %d\n", |
| i, vresult_int[i], i, expected_vresult_int[i]); |
| #else |
| abort(); |
| #endif |
| } |
| return 0; |
| } |
| |
| /* { dg-final { scan-assembler {\mvinsblx\M} } } */ |
| /* { dg-final { scan-assembler {\mvinshlx\M} } } */ |
| /* { dg-final { scan-assembler {\mvinswlx\M} } } */ |
| /* { dg-final { scan-assembler {\mvinsdlx\M} } } */ |
| /* { dg-final { scan-assembler {\mvinsbvlx\M} } } */ |
| /* { dg-final { scan-assembler {\mvinshvlx\M} } } */ |
| /* { dg-final { scan-assembler {\mvinswvlx\M} } } */ |
| |
| /* { dg-final { scan-assembler {\mvinsbrx\M} } } */ |
| /* { dg-final { scan-assembler {\mvinshrx\M} } } */ |
| /* { dg-final { scan-assembler {\mvinswrx\M} } } */ |
| /* { dg-final { scan-assembler {\mvinsdrx\M} } } */ |
| /* { dg-final { scan-assembler {\mvinsbvrx\M} } } */ |
| /* { dg-final { scan-assembler {\mvinshvrx\M} } } */ |
| /* { dg-final { scan-assembler {\mvinswvrx\M} } } */ |
| |