apple-longcall-3.c
来自「Mac OS X 10.4.9 for x86 Source Code gcc」· C语言 代码 · 共 68 行
C
68 行
/* APPLE LOCAL file 4380289 *//* { dg-do compile { target powerpc*-*-darwin* } } *//* { dg-options "-mlongcall" } *//* { dg-final { scan-assembler "\tjmp" } } *//* { dg-final { scan-assembler "\tjbsr" } } *//* Fail if any short calls ("bl foo") are present. *//* { dg-final { scan-assembler-not "\tbl\[ \]" } } *//* Fail if any short branches to non-labels ("b __Z_blabla") are present. Short branches to labels ("b L42") are O.K. *//* { dg-final { scan-assembler-not "\tb\[ \]*_" } } *//* { dg-final { scan-assembler-not "__ZN7derivedD1Ev " } } *//* { dg-final { scan-assembler "__ZN7derivedD1Ev.stub" } } *//* Radar 4299630: insure C++ thunks get long jmps. */struct base1{ virtual ~base1() {} void foo1() {}};struct base2{ virtual ~base2() {} void foo2() {}};struct base3{ virtual ~base3() {} void foo3() {} void voodoo() __attribute__ ((__noinline__));};extern int global_counter;void base3::voodoo(){ global_counter++;}struct derived : public base1, public base2, base3{ void d_voodoo() __attribute__ ((__noinline__)) ;};base3 *pbase3;void derived::d_voodoo() { pbase3->voodoo(); }int main(){ typedef void (base1::*F1)(); typedef void (base2::*F2)(); derived d; derived* dp = &d; derived* dd; F1 f1 = &base1::foo1; F2 f2 = &base2::foo2; pbase3 = new base3; dd = new derived; pbase3->voodoo(); dd->d_voodoo(); (dp->*f1)(); (dp->*f2)();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?