1 /* { dg-do compile { target { powerpc*-*-* } } } */ 2 /* { dg-skip-if "" { powerpc*-*-darwin* } } */ 3 /* { dg-require-effective-target powerpc_p8vector_ok } */ 4 /* { dg-options "-mdejagnu-cpu=power8 -O2" } */ 5 6 /* Make sure that STXSSPX is generated for float scalars in Altivec registers 7 on power7 instead of moving the value to a FPR register and doing a X-FORM 8 store. */ 9 10 #ifndef TYPE 11 #define TYPE float 12 #endif 13 14 #ifndef TYPE_IN 15 #define TYPE_IN TYPE 16 #endif 17 18 #ifndef TYPE_OUT 19 #define TYPE_OUT TYPE 20 #endif 21 22 #ifndef ITYPE 23 #define ITYPE __INT64_TYPE__ 24 #endif 25 26 #ifdef DO_CALL 27 extern ITYPE get_bits (ITYPE); 28 29 #else 30 #define get_bits(X) (X) 31 #endif 32 test(ITYPE * bits,ITYPE n,TYPE one,TYPE_IN * p,TYPE_OUT * q)33void test (ITYPE *bits, ITYPE n, TYPE one, TYPE_IN *p, TYPE_OUT *q) 34 { 35 TYPE x_00 = p[ 0]; 36 TYPE x_01 = p[ 1]; 37 TYPE x_02 = p[ 2]; 38 TYPE x_03 = p[ 3]; 39 TYPE x_04 = p[ 4]; 40 TYPE x_05 = p[ 5]; 41 TYPE x_06 = p[ 6]; 42 TYPE x_07 = p[ 7]; 43 TYPE x_08 = p[ 8]; 44 TYPE x_09 = p[ 9]; 45 46 TYPE x_10 = p[10]; 47 TYPE x_11 = p[11]; 48 TYPE x_12 = p[12]; 49 TYPE x_13 = p[13]; 50 TYPE x_14 = p[14]; 51 TYPE x_15 = p[15]; 52 TYPE x_16 = p[16]; 53 TYPE x_17 = p[17]; 54 TYPE x_18 = p[18]; 55 TYPE x_19 = p[19]; 56 57 TYPE x_20 = p[20]; 58 TYPE x_21 = p[21]; 59 TYPE x_22 = p[22]; 60 TYPE x_23 = p[23]; 61 TYPE x_24 = p[24]; 62 TYPE x_25 = p[25]; 63 TYPE x_26 = p[26]; 64 TYPE x_27 = p[27]; 65 TYPE x_28 = p[28]; 66 TYPE x_29 = p[29]; 67 68 TYPE x_30 = p[30]; 69 TYPE x_31 = p[31]; 70 TYPE x_32 = p[32]; 71 TYPE x_33 = p[33]; 72 TYPE x_34 = p[34]; 73 TYPE x_35 = p[35]; 74 TYPE x_36 = p[36]; 75 TYPE x_37 = p[37]; 76 TYPE x_38 = p[38]; 77 TYPE x_39 = p[39]; 78 79 TYPE x_40 = p[40]; 80 TYPE x_41 = p[41]; 81 TYPE x_42 = p[42]; 82 TYPE x_43 = p[43]; 83 TYPE x_44 = p[44]; 84 TYPE x_45 = p[45]; 85 TYPE x_46 = p[46]; 86 TYPE x_47 = p[47]; 87 TYPE x_48 = p[48]; 88 TYPE x_49 = p[49]; 89 90 ITYPE i; 91 92 for (i = 0; i < n; i++) 93 { 94 ITYPE bit = get_bits (bits[i]); 95 96 if ((bit & ((ITYPE)1) << 0) != 0) x_00 += one; 97 if ((bit & ((ITYPE)1) << 1) != 0) x_01 += one; 98 if ((bit & ((ITYPE)1) << 2) != 0) x_02 += one; 99 if ((bit & ((ITYPE)1) << 3) != 0) x_03 += one; 100 if ((bit & ((ITYPE)1) << 4) != 0) x_04 += one; 101 if ((bit & ((ITYPE)1) << 5) != 0) x_05 += one; 102 if ((bit & ((ITYPE)1) << 6) != 0) x_06 += one; 103 if ((bit & ((ITYPE)1) << 7) != 0) x_07 += one; 104 if ((bit & ((ITYPE)1) << 8) != 0) x_08 += one; 105 if ((bit & ((ITYPE)1) << 9) != 0) x_09 += one; 106 107 if ((bit & ((ITYPE)1) << 10) != 0) x_10 += one; 108 if ((bit & ((ITYPE)1) << 11) != 0) x_11 += one; 109 if ((bit & ((ITYPE)1) << 12) != 0) x_12 += one; 110 if ((bit & ((ITYPE)1) << 13) != 0) x_13 += one; 111 if ((bit & ((ITYPE)1) << 14) != 0) x_14 += one; 112 if ((bit & ((ITYPE)1) << 15) != 0) x_15 += one; 113 if ((bit & ((ITYPE)1) << 16) != 0) x_16 += one; 114 if ((bit & ((ITYPE)1) << 17) != 0) x_17 += one; 115 if ((bit & ((ITYPE)1) << 18) != 0) x_18 += one; 116 if ((bit & ((ITYPE)1) << 19) != 0) x_19 += one; 117 118 if ((bit & ((ITYPE)1) << 20) != 0) x_20 += one; 119 if ((bit & ((ITYPE)1) << 21) != 0) x_21 += one; 120 if ((bit & ((ITYPE)1) << 22) != 0) x_22 += one; 121 if ((bit & ((ITYPE)1) << 23) != 0) x_23 += one; 122 if ((bit & ((ITYPE)1) << 24) != 0) x_24 += one; 123 if ((bit & ((ITYPE)1) << 25) != 0) x_25 += one; 124 if ((bit & ((ITYPE)1) << 26) != 0) x_26 += one; 125 if ((bit & ((ITYPE)1) << 27) != 0) x_27 += one; 126 if ((bit & ((ITYPE)1) << 28) != 0) x_28 += one; 127 if ((bit & ((ITYPE)1) << 29) != 0) x_29 += one; 128 129 if ((bit & ((ITYPE)1) << 30) != 0) x_30 += one; 130 if ((bit & ((ITYPE)1) << 31) != 0) x_31 += one; 131 if ((bit & ((ITYPE)1) << 32) != 0) x_32 += one; 132 if ((bit & ((ITYPE)1) << 33) != 0) x_33 += one; 133 if ((bit & ((ITYPE)1) << 34) != 0) x_34 += one; 134 if ((bit & ((ITYPE)1) << 35) != 0) x_35 += one; 135 if ((bit & ((ITYPE)1) << 36) != 0) x_36 += one; 136 if ((bit & ((ITYPE)1) << 37) != 0) x_37 += one; 137 if ((bit & ((ITYPE)1) << 38) != 0) x_38 += one; 138 if ((bit & ((ITYPE)1) << 39) != 0) x_39 += one; 139 140 if ((bit & ((ITYPE)1) << 40) != 0) x_40 += one; 141 if ((bit & ((ITYPE)1) << 41) != 0) x_41 += one; 142 if ((bit & ((ITYPE)1) << 42) != 0) x_42 += one; 143 if ((bit & ((ITYPE)1) << 43) != 0) x_43 += one; 144 if ((bit & ((ITYPE)1) << 44) != 0) x_44 += one; 145 if ((bit & ((ITYPE)1) << 45) != 0) x_45 += one; 146 if ((bit & ((ITYPE)1) << 46) != 0) x_46 += one; 147 if ((bit & ((ITYPE)1) << 47) != 0) x_47 += one; 148 if ((bit & ((ITYPE)1) << 48) != 0) x_48 += one; 149 if ((bit & ((ITYPE)1) << 49) != 0) x_49 += one; 150 } 151 152 q[ 0] = x_00; 153 q[ 1] = x_01; 154 q[ 2] = x_02; 155 q[ 3] = x_03; 156 q[ 4] = x_04; 157 q[ 5] = x_05; 158 q[ 6] = x_06; 159 q[ 7] = x_07; 160 q[ 8] = x_08; 161 q[ 9] = x_09; 162 163 q[10] = x_10; 164 q[11] = x_11; 165 q[12] = x_12; 166 q[13] = x_13; 167 q[14] = x_14; 168 q[15] = x_15; 169 q[16] = x_16; 170 q[17] = x_17; 171 q[18] = x_18; 172 q[19] = x_19; 173 174 q[20] = x_20; 175 q[21] = x_21; 176 q[22] = x_22; 177 q[23] = x_23; 178 q[24] = x_24; 179 q[25] = x_25; 180 q[26] = x_26; 181 q[27] = x_27; 182 q[28] = x_28; 183 q[29] = x_29; 184 185 q[30] = x_30; 186 q[31] = x_31; 187 q[32] = x_32; 188 q[33] = x_33; 189 q[34] = x_34; 190 q[35] = x_35; 191 q[36] = x_36; 192 q[37] = x_37; 193 q[38] = x_38; 194 q[39] = x_39; 195 196 q[40] = x_40; 197 q[41] = x_41; 198 q[42] = x_42; 199 q[43] = x_43; 200 q[44] = x_44; 201 q[45] = x_45; 202 q[46] = x_46; 203 q[47] = x_47; 204 q[48] = x_48; 205 q[49] = x_49; 206 } 207 208 /* { dg-final { scan-assembler {\mxsaddsp\M} } } */ 209 /* { dg-final { scan-assembler {\mstxsspx\M} } } */ 210 /* { dg-final { scan-assembler-not {\mmfvsrd\M} } } */ 211 /* { dg-final { scan-assembler-not {\mmfvsrwz\M} } } */ 212