swar-ptr.c 3.26 KB
////A: --has-swar
//C: -daiteq-swar-enable

//typedef unsigned int s10x3b __attribute__((subword(3)));
//typedef unsigned int s1x3b __attribute__((subword(3,1)));

typedef unsigned int swpack __attribute__((subword(8)));
typedef unsigned int swelm __attribute__((subword(8,1)));

#define NUMELMS	50
#define BITSZ   8

#define ELMMASK ((1<<BITSZ)-1)
#define PACKING (32/BITSZ)
#define NUMFULLSW (NUMELMS/PACKING)
#define ARRAY_SIZE	(NUMFULLSW + ((NUMELMS-(NUMFULLSW*PACKING)) ? 1 : 0))

#define MAXVAL ((1<<BITSZ)-2)

swpack arr[ARRAY_SIZE]; /* pole swarovych slov se zapakovanymi elementy */
swelm elms[NUMELMS];   /* pole elementu */

volatile int gbuf[PACKING];

int main(void)
{
  volatile int sz;
  volatile swpack swp;
  volatile swelm se;// = {3};

  swpack *pswar;

  volatile unsigned top = 199;
  unsigned i, j;

#if 0
  sz = ARRAY_SIZE;      /* = 5 */
  sz = NUMELMS;         /* = 50 */
  sz = sizeof(arr);     /* = 20 */
  sz = sizeof(elms);    /* = 200 */
  sz = sizeof(swp);     /* = 4 = velikost pakovaneho slova v bytech */
  sz = sizeof(se);      /* = 4 */
  sz = sizeof(pswar);   /* ? */

  sz = sizeofswar(arr);   /* = 0 */
  sz = sizeofswar(elms);  /* = 0 */
  sz = sizeofswar(swp);   /* = 3 */
  sz = sizeofswar(se);    /* = 3 */
#endif

#if 0
  swp = (swpack){1,2,3,4};
  pswar = arr;
  for (int i=0;i<ARRAY_SIZE;++i) {
    *pswar = swp;
    pswar++;
  }
#endif
  //swp = 0;
  //swp = (swpack)0;
  //swp = 01234567123; // oct
  //swp = (swpack)0x12345;
////  swp = (swpack){1,2,3,4,5,6,7,0,1,2};
  ////swp = (swpack){se,0,se,se,se,0,0,0,se,se};
  //*((unsigned *)&swp) = 05647301234;

  //for (int i=0;i<PACKING;++i)
    //swp[i] = 4;

  //for (int i=0;i<PACKING;++i)
    //swp[i] = i & ELMMASK;

  //sz = swp[2];
#if 1
  {
  for (int i=0;i<PACKING;++i)
    gbuf[i] = (int) swp[i];
  }
#endif

#if 1
//  se = 0;
//  se = (swelm)0;
//  se = 2;
//  se = (swelm)3
//  *((unsigned *)&se) = 7;
//  *((unsigned *)&se) = 0;
#endif

#if 0
  swp[1] = 0;
//  swp[2] = (swelm)2;
  swp[3] = 3;
//  swp[4] = (swelm)0;
#endif

#if 0
  arr[0] = swp;
  arr[1] = 0;
  arr[2] = 0x1234567;
  arr[3][1] =0;
  arr[4][1] =2;

  for (int i=0;i<PACKING;++i)
    arr[1][i] = 4;

  for (int i=0;i<PACKING;++i)
    arr[1][i] = i & ELMMASK;

  for (int a=0;a<ARRAY_SIZE;++a) {
    for (int e=0;e<PACKING;++e)
      arr[a][e] = 6;
  }

  
  for (int a=0;a<ARRAY_SIZE;++a) {
    for (int e=0;e<PACKING;++e)
      arr[a][e] = a;
  }

  for (int i=0;i<PACKING;++i)
    sz = arr[2][i];

  for (int a=0;a<ARRAY_SIZE;++a) {
    for (int e=0;e<PACKING;++e)
      sz = arr[a][e];
  }

  for (i=0;i<((top-1)/PACKING)+1;i++) {
    for (j=0;j<PACKING;j++) {
      arr[i][j]=1;
    }
  }
      
#endif

#if 0
//  if (swp) sz = 1;


  //if (swp[5])
    //sz = 1;
  //else
    //sz = 0;

  if (swp[sz]) sz = 1;

  if ( arr[sz][4] == 4) sz = 1;
  
  if ( arr[sz][sz]>sz ) sz = 1;

#endif

#if 0
  unsigned sqr, k, val;
  top = NUMELMS;
  k=0;
  for (i=0;i<(top-1)/PACKING+1;i++) {
    arr[i]=0;
    val=0;
    for (j=0;j<PACKING;j++) {
      sqr=k*k;
      if (sqr<MAXVAL) {
        val |= (sqr<<(j*BITSZ));
        arr[i][j]=sqr;
      } else {
        val |= (MAXVAL<<(j*BITSZ));
//       c[i][j]=MAXVAL;
      }
//     m_print("k "); i_print(k); m_print(" sqr "); i_print(sqr); m_print(" val "); i_hexprint(val); NL;
      k++;
    }
  }

#endif

  return 0;
}