darwin64-abi.c

来自「Mac OS X 10.4.9 for x86 Source Code gcc」· C语言 代码 · 共 629 行 · 第 1/2 页

C
629
字号
  check_fpr (__LINE__, 4, 4.4);  {    struct sff sff_loc = { 2.1f, 2.2f };    clearall;    f_sff(sff_loc);#ifdef STRUCT8INT    check_gpr_float_pair (__LINE__, 3, 2.1f, 2.2f);#else    check_fpr(__LINE__, 1, 2.1f);    check_fpr(__LINE__, 2, 2.2f);#endif    clearall;    fi_sff_i(65, sff_loc, 66);    check_gpr(__LINE__, 3, 65);#ifdef STRUCT8INT    check_gpr_float_pair (__LINE__, 4, 2.1f, 2.2f);#else    check_fpr(__LINE__, 1, 2.1f);    check_fpr(__LINE__, 2, 2.2f);#endif    check_gpr(__LINE__, 5, 66);  }  {    struct sfff sfff_loc = { 3.1f, 3.2f, 3.3f };    clearall;    f_sfff(sfff_loc);    check_fpr(__LINE__, 1, 3.1f);    check_fpr(__LINE__, 2, 3.2f);    check_fpr(__LINE__, 3, 3.3f);    clearall;    f_sfff(sfff_loc);    check_fpr(__LINE__, 1, 3.1f);    check_fpr(__LINE__, 2, 3.2f);    check_fpr(__LINE__, 3, 3.3f);  }  {    struct sffff sffff_loc = { 4.1f, 4.2f, 4.3f, 4.4f };    clearall;    f_sffff(sffff_loc);    check_gpr_float_pair(__LINE__, 3, 4.1f, 4.2f);    check_gpr_float_pair(__LINE__, 4, 4.3f, 4.4f);  }  {    struct sdd sdd_loc = { 2.1, 2.2 };    clearall;    f_sdd(sdd_loc);    /* 16-byte struct is passed in two GPRs.  */    check_gpr_double(__LINE__, 3, 2.1);    check_gpr_double(__LINE__, 4, 2.2);  }  {    struct sddd sddd_loc = { 3.1, 3.2, 3.3 };    clearall;    f_sddd(sddd_loc);    check_fpr(__LINE__, 1, 3.1);    check_fpr(__LINE__, 2, 3.2);    check_fpr(__LINE__, 3, 3.3);  }  {    struct sdddd sdddd_loc = { 4.1, 4.2, 4.3, 4.4 };    clearall;    f_sdddd(sdddd_loc);    check_fpr(__LINE__, 1, 4.1);    check_fpr(__LINE__, 2, 4.2);    check_fpr(__LINE__, 3, 4.3);    check_fpr(__LINE__, 4, 4.4);  }  {    struct s3d s3d_loc = { 89.92, 4.89, 90.9 };    clearall;    f_s3d(s3d_loc);    check_gpr_double (__LINE__, 3, 89.92);    check_gpr_double (__LINE__, 4, 4.89);    check_gpr_double (__LINE__, 5, 90.9);  }  {    s3c_loc.ch[0] = 'A';    s3c_loc.ch[1] = 'B';    s3c_loc.ch[2] = 'C';    ssc_loc.sh = 0x1234;    ssc_loc.ch = 'D';    clearall;    f_s3c_ssc(s3c_loc, ssc_loc);  }  {    struct sif sif_loc_n = { 334, 4.3f };    long floatcast;    floatcast = *((int *) &(sif_loc_n.f));    clearall;    fi_sif(29, sif_loc_n);    check_gpr (__LINE__, 3, 29);    check_gpr (__LINE__, 4, 334LL << 32 | floatcast);#ifdef STRUCT8INT#else    check_fpr (__LINE__, 1, 4.3f);#endif    clearall;    fi_sif_i(31, sif_loc_n, 33);    check_gpr (__LINE__, 3, 31);    check_gpr (__LINE__, 4, 334LL << 32 | floatcast);#ifdef STRUCT8INT#else    check_fpr (__LINE__, 1, 4.3f);#endif    check_gpr (__LINE__, 5, 33);  }  {    struct sfi sfi_loc_n = { 4.145f, 335 };    clearall;    fi_sfi(29, sfi_loc_n);    check_gpr (__LINE__, 3, 29);#ifdef STRUCT8INT    check_gpr (__LINE__, 4, 0x4084a3d70000014fLL);#else    check_fpr (__LINE__, 1, 4.145f);    check_gpr (__LINE__, 4, 335);#endif  }  {    struct sfi sfi_loc_n = { 4.145f, 335 };    clearall;    fi_sfi_if (29, sfi_loc_n, 65, 9.8f);    check_gpr (__LINE__, 3, 29);#ifdef STRUCT8INT    check_gpr (__LINE__, 4, 0x4084a3d70000014fLL);#else    check_fpr (__LINE__, 1, 4.145f);    check_gpr (__LINE__, 4, 335);#endif    check_gpr (__LINE__, 5, 65);    check_gpr (__LINE__, 6, 0x666);#ifdef STRUCT8INT    check_fpr (__LINE__, 1, 9.8f);#else    check_fpr (__LINE__, 2, 9.8f);#endif    check_gpr (__LINE__, 7, 0x777);  }  {    struct sfill sfill_loc_n = { 4.145f, 335, 10000000000LL, 20000000000LL };    clearall;    fi_sfill(29, sfill_loc_n);    check_gpr (__LINE__, 3, 29);    check_fpr (__LINE__, 1, 4.145f);    check_gpr (__LINE__, 4, 335);    check_gpr (__LINE__, 5, 10000000000LL);    check_gpr (__LINE__, 6, 20000000000LL);  }  {    struct sfl sfl_loc_n = { 4.145f, 335 };    clearall;    f_sfl (sfl_loc_n);    check_gpr_float_pair (__LINE__, 3, 4.145f, 0.0f);    check_gpr (__LINE__, 4, 335);    check_gpr (__LINE__, 5, 0x555);    clearall;    f_sfl_sfl_sfl_sfl_sfl (sfl_loc_n, sfl_loc_n, sfl_loc_n, sfl_loc_n, sfl_loc_n);    check_gpr_float_pair (__LINE__, 3, 4.145f, 0.0f);    check_gpr (__LINE__, 4, 335);    check_gpr (__LINE__, 6, 335);    check_gpr (__LINE__, 8, 335);    check_gpr (__LINE__, 10, 335);  }  {    struct sfldl sfldl_loc_n = { 4.145f, 335, 3.3, 336 };    clearall;    f_sfldl (sfldl_loc_n);    check_fpr (__LINE__, 1, 4.145f);    check_gpr (__LINE__, 4, 335);    check_fpr (__LINE__, 2, 3.3);    check_gpr (__LINE__, 6, 336);  }  {    char *p1 = "abc";    char *p2 = "def";    char *p3 = "ghi";    struct sfpp sfpp_loc_n = { 4.145f, p1, p2 };    clearall;    f_sfpp_p(sfpp_loc_n, p3);    check_fpr (__LINE__, 1, 4.145f);    check_gpr (__LINE__, 4, (long) p1);    check_gpr (__LINE__, 5, (long) p2);    check_gpr (__LINE__, 6, (long) p3);  }  {    struct sff sff_loc_n = { 4.145f, 335.3f };    clearall;    fi_sff(29, sff_loc_n);    check_gpr (__LINE__, 3, 29);#ifdef STRUCT8INT    check_gpr_float_pair (__LINE__, 4, 4.145f, 335.3f);#else    check_fpr (__LINE__, 1, 4.145f);    check_fpr (__LINE__, 2, 335.3f);#endif  }  {    struct sfD sfD_loc_n = { 4.145f, 335.335 };    clearall;    f_sfD_sfD_sfD_sfD_sfD (sfD_loc_n, sfD_loc_n, sfD_loc_n, sfD_loc_n, sfD_loc_n);    check_fpr (__LINE__, 1, 4.145f);    check_fpr (__LINE__, 2, 335.335);    check_fpr (__LINE__, 4, 4.145f);    check_fpr (__LINE__, 5, 335.335);    check_fpr (__LINE__, 7, 4.145f);    check_fpr (__LINE__, 10, 4.145f);    check_fpr (__LINE__, 13, 4.145f);  }  {    struct sidi sidi_loc_n = { 257, 4.14515, 258 };    clearall;    fi_sidi(16, sidi_loc_n);    check_gpr (__LINE__, 3, 16);    check_fpr (__LINE__, 1, 4.14515);    check_gpr (__LINE__, 4, 257LL << 32);    check_gpr (__LINE__, 5, 0x555);    check_gpr (__LINE__, 6, 258LL << 32);  }  sfi_loc.f = 5.2f;  sfi_loc.i = 98;  clearall;  fifvf_sfi_dots(41, 4.3f, vf_loc, sfi_loc, 4.63f, vi_loc, sfi_loc2);  asm ("\n");  check_gpr (__LINE__, 3, 41);  check_fpr (__LINE__, 1, 4.3f); /* float skips r4 */  check_vr_float(2, 7.1f, 7.2f, 7.3f, 7.4f); /* vector skips r5/r6 */#ifdef STRUCT8INT  check_gpr (__LINE__, 7, 0x40a6666600000062);#else  check_fpr (__LINE__, 2, sfi_loc.f);  check_gpr (__LINE__, 7, sfi_loc.i);#endif  /* start of varying parameters */#ifdef STRUCT8INT  check_fpr (__LINE__, 2, 4.63f);#else  check_fpr (__LINE__, 3, 4.63f);#endif  check_gpr_double (__LINE__, 8, 4.63f);  /* vector takes up r9/r10 */  /* sfi_loc2 on stack */  clearall;  sfii_loc.f = 5.2f;  sfii_loc.i = 98;  sfii_loc.j = 777;  clearall;  fifvf_sfii_dots(41, 4.3f, vf_loc, sfii_loc, 4.63f, vi_loc, sfii_loc2);  asm ("\n");  check_gpr (__LINE__, 3, 41);  check_fpr (__LINE__, 1, 4.3f); /* float skips r4 */  check_vr_float(2, 7.1f, 7.2f, 7.3f, 7.4f); /* vector skips r5/r6 */  check_fpr (__LINE__, 2, sfii_loc.f);  check_gpr (__LINE__, 7, sfii_loc.i);  check_gpr (__LINE__, 8, ((long)sfii_loc.j) << 32);  /* start of varying parameters */  check_fpr (__LINE__, 3, 4.63f);  check_gpr_double (__LINE__, 9, 4.63f);  /* vector takes up r10/stack (?) */  /* sfii_loc2 on stack */  if (numerrs > 0)    abort ();  return 0;}int dumpall(){  int i;  printf("\n");  for (i = 3; i <= 10; ++i)#ifdef __LP64__    printf("r%d=0x%16.16lx ", i, gparms.gprs[i]);#else    printf("r%d=0x%8.8x ", i, gparms.gprs[i]);#endif  printf("\n");  for (i = 1; i <= 13; ++i)    printf("f%d=%8.8f ", i, gparms.fprs[i]);  printf("\n");  for (i = 0; i <= 4; ++i)    printf("v%d=(%x,%x,%x,%x)  ", i,	   gparms.vrs[i].elts.ielts[0], gparms.vrs[i].elts.ielts[1],	   gparms.vrs[i].elts.ielts[2], gparms.vrs[i].elts.ielts[3]);  printf("\n");  for (i = 112; i < 152; ++i)    {      if (i > 112 && i % 8 == 0)	printf(" | ");      printf("%02x", gparms.stack[i]);    }  printf("\n");}

⌨️ 快捷键说明

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