20020615-1.c

来自「用于进行gcc测试」· C语言 代码 · 共 60 行

C
60
字号
/* PR target/7042.  When reorg.c changed branches into return insns, it   completely forgot about any current_function_epilogue_delay_list and   dropped those insns.  Uncovered on cris-axis-elf, where an insn in an   epilogue delay-slot set the return-value register with the testcase   below.  Derived from ghostscript-6.52 (GPL) by hp@axis.com.  */typedef struct font_hints_s {  int axes_swapped;  int x_inverted, y_inverted;} font_hints;typedef struct gs_fixed_point_s {  long x, y;} gs_fixed_point;intline_hints(const font_hints *fh, const gs_fixed_point *p0,	   const gs_fixed_point *p1){  long dx = p1->x - p0->x;  long dy = p1->y - p0->y;  long adx, ady;  int xi = fh->x_inverted, yi = fh->y_inverted;  int hints;  if (xi)    dx = -dx;  if (yi)    dy = -dy;  if (fh->axes_swapped) {    long t = dx;    int ti = xi;    dx = dy, xi = yi;    dy = t, yi = ti;  }  adx = dx < 0 ? -dx : dx;  ady = dy < 0 ? -dy : dy;  if (dy != 0 && (adx <= ady >> 4)) {    hints = dy > 0 ? 2 : 1;    if (xi)      hints ^= 3;  } else if (dx != 0 && (ady <= adx >> 4)) {    hints = dx < 0 ? 8 : 4;    if (yi)      hints ^= 12;  } else    hints = 0;  return hints;}int main (){  static font_hints fh[] = {{0, 1, 0}, {0, 0, 1}, {0, 0, 0}};  static gs_fixed_point gsf[]    = {{0x30000, 0x13958}, {0x30000, 0x18189},       {0x13958, 0x30000}, {0x18189, 0x30000}};  if (line_hints (fh, gsf, gsf + 1) != 1      || line_hints (fh + 1, gsf + 2, gsf + 3) != 8      || line_hints (fh + 2, gsf + 2, gsf + 3) != 4)    abort ();  exit (0);}

⌨️ 快捷键说明

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