⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 registers1.c

📁 this is a gcc file, you can download it and learn its usetility, for further detail please look at t
💻 C
字号:
// Try to check that registers are preserved when the stack is unwound.// { dg-do run }// { dg-options -O2 }extern "C" void exit(int);extern "C" void abort();// This test case triggers up to DEPTH recursive calls to function// foo(), These calls are numbered so that 0 is the innermost, 1 the// second innermost, and so on.  Each call caches NUM_VARS elements of// both DOUBLE_SRC and INT_SRC and applies a trivial operation to each// cached value.  The innermost foo() call will throw an integer call// number.  The specified call should store its cached values in// DOUBLE_DEST and INT_DEST, which main() will check.const int num_vars = 16;const int depth = 3;float float_src[num_vars * depth];float float_dest[num_vars];int int_src[num_vars * depth];int int_dest[num_vars];void foo (int level, int throw_to){  float *fsrc = &float_src[level * num_vars];  float f00 = *fsrc++ + 1.0f;  float f01 = *fsrc++ + 1.0f;  float f02 = *fsrc++ + 1.0f;  float f03 = *fsrc++ + 1.0f;  float f04 = *fsrc++ + 1.0f;  float f05 = *fsrc++ + 1.0f;  float f06 = *fsrc++ + 1.0f;  float f07 = *fsrc++ + 1.0f;  float f08 = *fsrc++ + 1.0f;  float f09 = *fsrc++ + 1.0f;  float f10 = *fsrc++ + 1.0f;  float f11 = *fsrc++ + 1.0f;  float f12 = *fsrc++ + 1.0f;  float f13 = *fsrc++ + 1.0f;  float f14 = *fsrc++ + 1.0f;  float f15 = *fsrc++ + 1.0f;  int *isrc = &int_src[level * num_vars];  int i00 = *isrc++ + 1;  int i01 = *isrc++ + 1;  int i02 = *isrc++ + 1;  int i03 = *isrc++ + 1;  int i04 = *isrc++ + 1;  int i05 = *isrc++ + 1;  int i06 = *isrc++ + 1;  int i07 = *isrc++ + 1;  int i08 = *isrc++ + 1;  int i09 = *isrc++ + 1;  int i10 = *isrc++ + 1;  int i11 = *isrc++ + 1;  int i12 = *isrc++ + 1;  int i13 = *isrc++ + 1;  int i14 = *isrc++ + 1;  int i15 = *isrc++ + 1;  try    {      if (level == 0)	throw throw_to;      else	foo (level - 1, throw_to);    }  catch (int i)    {      if (i == level)	{	  float *fdest = float_dest;	  *fdest++ = f00;	  *fdest++ = f01;	  *fdest++ = f02;	  *fdest++ = f03;	  *fdest++ = f04;	  *fdest++ = f05;	  *fdest++ = f06;	  *fdest++ = f07;	  *fdest++ = f08;	  *fdest++ = f09;	  *fdest++ = f10;	  *fdest++ = f11;	  *fdest++ = f12;	  *fdest++ = f13;	  *fdest++ = f14;	  *fdest++ = f15;	  int *idest = int_dest;	  *idest++ = i00;	  *idest++ = i01;	  *idest++ = i02;	  *idest++ = i03;	  *idest++ = i04;	  *idest++ = i05;	  *idest++ = i06;	  *idest++ = i07;	  *idest++ = i08;	  *idest++ = i09;	  *idest++ = i10;	  *idest++ = i11;	  *idest++ = i12;	  *idest++ = i13;	  *idest++ = i14;	  *idest++ = i15;	}      else	{	  throw;	}    }}int main (){  for (int i = 0; i < depth * num_vars; i++)    {      int_src[i] = i * i;      float_src[i] = i * 2.0f;    }  for (int level = 0; level < depth; level++)    for (int throw_to = 0; throw_to <= level; throw_to++)      {	foo (level, throw_to);	float *fsrc = &float_src[throw_to * num_vars];	int *isrc = &int_src[throw_to * num_vars];	for (int i = 0; i < num_vars; i++)	  {	    if (int_dest[i] != isrc[i] + 1)	      abort ();	    if (float_dest[i] != fsrc[i] + 1.0f)	      abort ();	  }      }  exit (0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -