1 /* { dg-do compile } */ 2 /* { dg-require-effective-target int128 } */ 3 /* { dg-options "-std=gnu99" } */ 4 5 typedef long unsigned int size_t; 6 typedef long int ssize_t; 7 typedef ssize_t index_type; 8 typedef __int128_t GFC_INTEGER_16; 9 typedef struct descriptor_dimension 10 { 11 index_type _stride; 12 index_type _lbound; 13 index_type _ubound; 14 } 15 descriptor_dimension; 16 typedef struct { GFC_INTEGER_16 *data; size_t offset; index_type dtype; descriptor_dimension dim[7];} gfc_array_i16; 17 void matmul_i16(gfc_array_i16 * const restrict retarray,gfc_array_i16 * const restrict a,GFC_INTEGER_16 bbase_yn)18matmul_i16 (gfc_array_i16 * const restrict retarray, 19 gfc_array_i16 * const restrict a, 20 GFC_INTEGER_16 bbase_yn) 21 { 22 GFC_INTEGER_16 * restrict dest; 23 index_type rxstride, rystride; 24 index_type x, y, n, count, xcount; 25 GFC_INTEGER_16 * restrict dest_y; 26 GFC_INTEGER_16 s; 27 const GFC_INTEGER_16 * restrict abase_n; 28 rxstride = ((retarray)->dim[0]._stride); 29 rystride = ((retarray)->dim[1]._stride); 30 xcount = ((a)->dim[0]._ubound + 1 - (a)->dim[0]._lbound); 31 dest = retarray->data; 32 dest_y = &dest[y*rystride]; 33 for (x = 0; x < xcount; x++) 34 dest_y[x] += abase_n[x] * bbase_yn; 35 for (x = 0; x < xcount; x++) 36 { 37 for (n = 0; n < count; n++) 38 dest_y[x*rxstride] = (GFC_INTEGER_16) 0; 39 } 40 } 41