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 + -
显示快捷键?