modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/compile/920428-2.c (about)

     1  double sin(double x);
     2  double cos(double x);
     3  double tan(double x);
     4  double asin(double x);
     5  double acos(double x);
     6  double atan(double x);
     7  double atan2(double y, double x);
     8  double sinh(double x);
     9  double cosh(double x);
    10  double tanh(double x);
    11  double exp(double x);
    12  double expm1(double x);
    13  double log(double x);
    14  double log10(double x);
    15  double log1p(double x);
    16  double pow(double x, double y);
    17  double sqrt(double x);
    18  double cbrt(double x);
    19  double ceil(double x);
    20  double floor(double x);
    21  double fabs(double x);
    22  double frexp(double value, int *eptr);
    23  double ldexp(double value, int exp);
    24  double modf(double value, double *iptr);
    25  double erf(double x);
    26  double erfc(double x);
    27  double atof(const char *nptr);
    28  double hypot(double x, double y);
    29  double lgamma(double x);
    30  double j0(double x);
    31  double j1(double x);
    32  double jn(int n, double x);
    33  double y0(double x);
    34  double y1(double x);
    35  double yn(int n, double x);
    36  extern struct _iobuf {
    37   int _cnt;
    38   char *_ptr;
    39   char *_base;
    40   int _bufsiz;
    41   short _flag;
    42   char _file;
    43  } _iob[];
    44  typedef __SIZE_TYPE__ size_t;
    45  typedef char *va_list;
    46  struct _iobuf *fopen(const char *filename, const char *type);
    47  struct _iobuf *freopen(const char *filename, const char *type, struct _iobuf *stream);
    48  struct _iobuf *fdopen(int fildes, const char *type);
    49  struct _iobuf *popen(const char *command, const char *type);
    50  int pclose(struct _iobuf *stream);
    51  int fflush(struct _iobuf *stream);
    52  int fclose(struct _iobuf *stream);
    53  int remove(const char *path);
    54  int rename(const char *from, const char *to);
    55  struct _iobuf *tmpfile(void);
    56  char *tmpnam(char *s);
    57  int setvbuf(struct _iobuf *iop, char *buf, int type, size_t size);
    58  int setbuf(struct _iobuf *stream, char *buf);
    59  int setbuffer(struct _iobuf *stream, char *buf, size_t size);
    60  int setlinebuf(struct _iobuf *stream);
    61  int fprintf(struct _iobuf *stream, const char *format, ...);
    62  int printf(const char *format, ...);
    63  char *sprintf(char *s, const char *format, ...);
    64  int vfprintf(struct _iobuf *stream, const char *format, va_list arg);
    65  int vprintf(const char *format, va_list arg);
    66  int vsprintf(char *s, const char *format, va_list arg);
    67  int fscanf(struct _iobuf *stream, const char *format, ...);
    68  int scanf(const char *format, ...);
    69  int sscanf(char *s, const char *format, ...);
    70  int fgetc(struct _iobuf *stream);
    71  int getw(struct _iobuf *stream);
    72  char *fgets(char *s, int n, struct _iobuf *stream);
    73  char *gets(char *s);
    74  int fputc(int c, struct _iobuf *stream);
    75  int putw(int w, struct _iobuf *stream);
    76  int fputs(const char *s, struct _iobuf *stream);
    77  int puts(const char *s);
    78  int ungetc(int c, struct _iobuf *stream);
    79  int fread(void *ptr, size_t size, size_t count, struct _iobuf *iop);
    80  int fwrite(const void *ptr, size_t size, size_t count, struct _iobuf *iop);
    81  int fseek(struct _iobuf *stream, long offset, int ptrname);
    82  long ftell(struct _iobuf *stream);
    83  void rewind(struct _iobuf *stream);
    84  int fgetpos(struct _iobuf *stream, long *pos);
    85  int fsetpos(struct _iobuf *stream, const long *pos);
    86  void perror(const char *s);
    87  typedef unsigned char byte;
    88  typedef unsigned char uchar;
    89  typedef unsigned short ushort;
    90  typedef unsigned int uint;
    91  typedef unsigned long ulong;
    92  typedef unsigned char u_char;
    93  typedef unsigned short u_short;
    94  typedef unsigned int u_int;
    95  typedef unsigned long u_long;
    96  typedef unsigned short ushort_;
    97  typedef struct _physadr { int r[1]; } *physadr;
    98  typedef struct label_t {
    99   int val[11];
   100  } label_t;
   101  typedef struct _quad { long val[2]; } quad;
   102  typedef long daddr_t;
   103  typedef char * caddr_t;
   104  typedef u_long ino_t;
   105  typedef long swblk_t;
   106  typedef long time_t;
   107  typedef short dev_t;
   108  typedef long off_t;
   109  typedef u_short uid_t;
   110  typedef u_short gid_t;
   111  typedef signed char prio_t;
   112  typedef long fd_mask;
   113  typedef struct fd_set {
   114   fd_mask fds_bits[(((256 )+(( (sizeof(fd_mask) * 8 ) )-1))/( (sizeof(fd_mask) * 8 ) )) ];
   115  } fd_set;
   116  typedef struct qhdr {
   117   struct qhdr *link, *rlink;
   118  } *queue_t;
   119  typedef char *ptr_ord_t;
   120  typedef double floatp;
   121  typedef char *(*proc_alloc_t)(unsigned num_elements, unsigned element_size, const char *client_name );
   122  typedef void (*proc_free_t)(char *data, unsigned num_elements, unsigned element_size, const char *client_name );
   123  extern struct _iobuf *gs_out;
   124  typedef struct gs_point_s {
   125   double x, y;
   126  } gs_point;
   127  typedef struct gs_int_point_s {
   128   int x, y;
   129  } gs_int_point;
   130  typedef struct gs_rect_s {
   131   gs_point p, q;
   132  } gs_rect;
   133  typedef struct gs_int_rect_s {
   134   gs_int_point p, q;
   135  } gs_int_rect;
   136  typedef struct gs_state_s gs_state;
   137  typedef struct {
   138   proc_alloc_t alloc;
   139   proc_free_t free;
   140  } gs_memory_procs;
   141  char *gs_malloc(uint, uint, const char * );
   142  void gs_free(char *, uint, uint, const char * );
   143  extern char gs_debug[128];
   144  extern int gs_log_error(int, const char *, int );
   145  typedef long fixed;
   146  typedef struct gs_fixed_point_s {
   147   fixed x, y;
   148  } gs_fixed_point;
   149  typedef struct gs_fixed_rect_s {
   150   gs_fixed_point p, q;
   151  } gs_fixed_rect;
   152  typedef struct gs_matrix_s {
   153   long _xx; float xx; long _xy; float xy; long _yx; float yx; long _yy; float yy; long _tx; float tx; long _ty; float ty;
   154  } gs_matrix;
   155  void gs_make_identity(gs_matrix * );
   156  int gs_make_translation(floatp, floatp, gs_matrix * ),
   157   gs_make_scaling(floatp, floatp, gs_matrix * ),
   158   gs_make_rotation(floatp, gs_matrix * );
   159  int gs_matrix_multiply(const gs_matrix *, const gs_matrix *, gs_matrix * ),
   160   gs_matrix_invert(const gs_matrix *, gs_matrix * ),
   161   gs_matrix_rotate(const gs_matrix *, floatp, gs_matrix * );
   162  int gs_point_transform(floatp, floatp, const gs_matrix *, gs_point * ),
   163   gs_point_transform_inverse(floatp, floatp, const gs_matrix *, gs_point * ),
   164   gs_distance_transform(floatp, floatp, const gs_matrix *, gs_point * ),
   165   gs_distance_transform_inverse(floatp, floatp, const gs_matrix *, gs_point * ),
   166   gs_bbox_transform_inverse(gs_rect *, gs_matrix *, gs_rect * );
   167  typedef struct gs_matrix_fixed_s {
   168   long _xx; float xx; long _xy; float xy; long _yx; float yx; long _yy; float yy; long _tx; float tx; long _ty; float ty;
   169   fixed tx_fixed, ty_fixed;
   170  } gs_matrix_fixed;
   171  extern void gs_update_matrix_fixed(gs_matrix_fixed * );
   172  int gs_point_transform2fixed(gs_matrix_fixed *, floatp, floatp, gs_fixed_point * ),
   173   gs_distance_transform2fixed(gs_matrix_fixed *, floatp, floatp, gs_fixed_point * );
   174  typedef struct {
   175   long xx, xy, yx, yy;
   176   int skewed;
   177   int shift;
   178   int max_bits;
   179   fixed round;
   180  } fixed_coeff;
   181  
   182  typedef enum {
   183   gs_cap_butt = 0,
   184   gs_cap_round = 1,
   185   gs_cap_square = 2
   186  } gs_line_cap;
   187  typedef enum {
   188   gs_join_miter = 0,
   189   gs_join_round = 1,
   190   gs_join_bevel = 2
   191  } gs_line_join;
   192  gs_state *gs_state_alloc(proc_alloc_t, proc_free_t );
   193  int gs_state_free(gs_state * );
   194  int gs_gsave(gs_state * ),
   195   gs_grestore(gs_state * ),
   196   gs_grestoreall(gs_state * );
   197  gs_state *gs_gstate(gs_state * );
   198  int gs_currentgstate(gs_state * , const gs_state * ),
   199   gs_setgstate(gs_state * , const gs_state * );
   200  gs_state *gs_state_swap_saved(gs_state *, gs_state * );
   201  void gs_state_swap(gs_state *, gs_state * );
   202  int gs_initgraphics(gs_state * );
   203  typedef struct gx_device_s gx_device;
   204  int gs_flushpage(gs_state * );
   205  int gs_copypage(gs_state * );
   206  int gs_output_page(gs_state *, int, int );
   207  int gs_copyscanlines(gx_device *, int, byte *, uint, int *, uint * );
   208  gx_device * gs_getdevice(int );
   209  int gs_copydevice(gx_device **, gx_device *, proc_alloc_t );
   210  int gs_makeimagedevice(gx_device **, gs_matrix *, uint, uint, byte *, int, proc_alloc_t );
   211  void gs_nulldevice(gs_state * );
   212  int gs_setdevice(gs_state *, gx_device * );
   213  gx_device * gs_currentdevice(gs_state * );
   214  const char * gs_devicename(gx_device * );
   215  void gs_deviceinitialmatrix(gx_device *, gs_matrix * );
   216  int gs_closedevice(gx_device * );
   217  int gs_setlinewidth(gs_state *, floatp );
   218  float gs_currentlinewidth(const gs_state * );
   219  int gs_setlinecap(gs_state *, gs_line_cap );
   220  gs_line_cap gs_currentlinecap(const gs_state * );
   221  int gs_setlinejoin(gs_state *, gs_line_join );
   222  gs_line_join gs_currentlinejoin(const gs_state * );
   223  int gs_setmiterlimit(gs_state *, floatp );
   224  float gs_currentmiterlimit(const gs_state * );
   225  int gs_setdash(gs_state *, const float *, uint, floatp );
   226  uint gs_currentdash_length(const gs_state * );
   227  int gs_currentdash_pattern(const gs_state *, float * );
   228  float gs_currentdash_offset(const gs_state * );
   229  int gs_setflat(gs_state *, floatp );
   230  float gs_currentflat(const gs_state * );
   231  int gs_setstrokeadjust(gs_state *, int );
   232  int gs_currentstrokeadjust(const gs_state * );
   233  typedef enum {
   234   gs_color_space_DeviceGray = 0,
   235   gs_color_space_DeviceRGB,
   236   gs_color_space_DeviceCMYK
   237  } gs_color_space;
   238  typedef struct gs_color_s gs_color;
   239  extern const uint gs_color_sizeof;
   240  int gs_setgray(gs_state *, floatp );
   241  float gs_currentgray(gs_state * );
   242  int gs_sethsbcolor(gs_state *, floatp, floatp, floatp ),
   243   gs_currenthsbcolor(gs_state *, float [3] ),
   244   gs_setrgbcolor(gs_state *, floatp, floatp, floatp ),
   245   gs_currentrgbcolor(gs_state *, float [3] );
   246  int gs_currentcolorspace(gs_state *, gs_color_space * );
   247  typedef float (*gs_transfer_proc)(gs_state *, floatp );
   248  int gs_settransfer(gs_state *, gs_transfer_proc ),
   249   gs_settransfer_remap(gs_state *, gs_transfer_proc, int );
   250  gs_transfer_proc gs_currenttransfer(gs_state * );
   251  int gs_setcolortransfer(gs_state *, gs_transfer_proc ,
   252   gs_transfer_proc , gs_transfer_proc ,
   253   gs_transfer_proc ),
   254   gs_setcolortransfer_remap(gs_state *, gs_transfer_proc ,
   255   gs_transfer_proc , gs_transfer_proc ,
   256   gs_transfer_proc , int );
   257  void gs_currentcolortransfer(gs_state *, gs_transfer_proc [4] );
   258  int gs_setscreen(gs_state *, floatp, floatp, float (*)(floatp, floatp ) );
   259  int gs_currentscreen(gs_state *, float *, float *, float (**)(floatp, floatp ) );
   260  int gs_sethalftonephase(gs_state *, int, int );
   261  int gs_currenthalftonephase(gs_state *, gs_int_point * );
   262  typedef struct gs_screen_enum_s gs_screen_enum;
   263  extern const uint gs_screen_enum_sizeof;
   264  int gs_screen_init(gs_screen_enum *, gs_state *, floatp, floatp );
   265  int gs_screen_currentpoint(gs_screen_enum *, gs_point * );
   266  int gs_screen_next(gs_screen_enum *, floatp );
   267  struct gs_state_s {
   268   gs_state *saved;
   269   gs_memory_procs memory_procs;
   270   gs_matrix_fixed ctm;
   271   gs_matrix ctm_inverse;
   272   int inverse_valid;
   273   struct gx_path_s *path;
   274   struct gx_clip_path_s *clip_path;
   275   int clip_rule;
   276   struct line_params_s *line_params;
   277   struct halftone_params_s *halftone;
   278   float (*ht_proc)(floatp, floatp );
   279   gs_int_point ht_phase;
   280   gs_int_point phase_mod;
   281   struct gs_color_s *color;
   282   struct gx_device_color_s *dev_color;
   283   struct gx_transfer_s *transfer;
   284   struct gs_font_s *font;
   285   gs_matrix char_tm;
   286   int char_tm_valid;
   287   byte in_cachedevice;
   288   byte in_charpath;
   289  
   290  
   291  
   292  
   293   int level;
   294   float flatness;
   295   int stroke_adjust;
   296   struct device_s *device;
   297   int device_is_shared;
   298  
   299  };
   300  typedef unsigned long gx_bitmap_id;
   301  typedef struct gx_bitmap_s {
   302   byte *data;
   303   int raster;
   304   gs_int_point size;
   305   gx_bitmap_id id;
   306   ushort rep_width, rep_height;
   307  } gx_bitmap;
   308  typedef unsigned long gx_color_index;
   309  typedef unsigned short gx_color_value;
   310  typedef struct gx_device_color_info_s {
   311   int num_components;
   312  
   313   int depth;
   314   gx_color_value max_gray;
   315   gx_color_value max_rgb;
   316  
   317   gx_color_value dither_gray;
   318   gx_color_value dither_rgb;
   319  
   320  } gx_device_color_info;
   321  typedef struct gx_device_procs_s gx_device_procs;
   322  struct gx_device_s {
   323   int params_size; gx_device_procs *procs; const char *dname; int width; int height; float x_pixels_per_inch; float y_pixels_per_inch; float l_margin, b_margin, r_margin, t_margin; gx_device_color_info color_info; int is_open;
   324  };
   325  typedef struct gs_prop_item_s gs_prop_item;
   326  struct gx_device_procs_s {
   327   int (*open_device)(gx_device *dev );
   328   void (*get_initial_matrix)(gx_device *dev, gs_matrix *pmat );
   329   int (*sync_output)(gx_device *dev );
   330   int (*output_page)(gx_device *dev, int num_copies, int flush );
   331   int (*close_device)(gx_device *dev );
   332   gx_color_index (*map_rgb_color)(gx_device *dev, gx_color_value red, gx_color_value green, gx_color_value blue );
   333   int (*map_color_rgb)(gx_device *dev, gx_color_index color, gx_color_value rgb[3] );
   334   int (*fill_rectangle)(gx_device *dev, int x, int y, int width, int height, gx_color_index color );
   335   int (*tile_rectangle)(gx_device *dev, gx_bitmap *tile, int x, int y, int width, int height, gx_color_index color0, gx_color_index color1, int phase_x, int phase_y );
   336   int (*copy_mono)(gx_device *dev, unsigned char *data, int data_x, int raster, gx_bitmap_id id, int x, int y, int width, int height, gx_color_index color0, gx_color_index color1 );
   337   int (*copy_color)(gx_device *dev, unsigned char *data, int data_x, int raster, gx_bitmap_id id, int x, int y, int width, int height );
   338   int (*draw_line)(gx_device *dev, int x0, int y0, int x1, int y1, gx_color_index color );
   339   int (*get_bits)(gx_device *dev, int y, unsigned char *data, unsigned int size, int pad_to_word );
   340   int (*get_props)(gx_device *dev, gs_prop_item *plist );
   341  
   342   int (*put_props)(gx_device *dev, gs_prop_item *plist, int count );
   343  
   344  };
   345  extern unsigned int gx_device_bytes_per_scan_line(gx_device *dev, int pad_to_word );
   346  int gx_default_open_device(gx_device *dev );
   347  void gx_default_get_initial_matrix(gx_device *dev, gs_matrix *pmat );
   348  int gx_default_sync_output(gx_device *dev );
   349  int gx_default_output_page(gx_device *dev, int num_copies, int flush );
   350  int gx_default_close_device(gx_device *dev );
   351  gx_color_index gx_default_map_rgb_color(gx_device *dev, gx_color_value red, gx_color_value green, gx_color_value blue );
   352  int gx_default_map_color_rgb(gx_device *dev, gx_color_index color, gx_color_value rgb[3] );
   353  int gx_default_tile_rectangle(gx_device *dev, gx_bitmap *tile, int x, int y, int width, int height, gx_color_index color0, gx_color_index color1, int phase_x, int phase_y );
   354  int gx_default_copy_color(gx_device *dev, unsigned char *data, int data_x, int raster, gx_bitmap_id id, int x, int y, int width, int height );
   355  int gx_default_draw_line(gx_device *dev, int x0, int y0, int x1, int y1, gx_color_index color );
   356  int gx_default_get_bits(gx_device *dev, int y, unsigned char *data, unsigned int size, int pad_to_word );
   357  int gx_default_get_props(gx_device *dev, gs_prop_item *plist );
   358  int gx_default_put_props(gx_device *dev, gs_prop_item *plist, int count );
   359  typedef struct device_s {
   360   gx_device *info;
   361   int is_band_device;
   362   gx_color_index white, black;
   363  } device;
   364  int gs_initmatrix(gs_state * ),
   365   gs_defaultmatrix(const gs_state *, gs_matrix * ),
   366   gs_currentmatrix(const gs_state *, gs_matrix * ),
   367   gs_setmatrix(gs_state *, const gs_matrix * ),
   368   gs_translate(gs_state *, floatp, floatp ),
   369   gs_scale(gs_state *, floatp, floatp ),
   370   gs_rotate(gs_state *, floatp ),
   371   gs_concat(gs_state *, const gs_matrix * );
   372  int gs_transform(gs_state *, floatp, floatp, gs_point * ),
   373   gs_dtransform(gs_state *, floatp, floatp, gs_point * ),
   374   gs_itransform(gs_state *, floatp, floatp, gs_point * ),
   375   gs_idtransform(gs_state *, floatp, floatp, gs_point * );
   376  static int
   377  ctm_set_inverse(gs_state *pgs)
   378  { int code = gs_matrix_invert(&*(gs_matrix *)&(pgs)->ctm , &pgs->ctm_inverse);
   379   0;
   380   if ( code < 0 ) return code;
   381   pgs->inverse_valid = 1;
   382   return 0;
   383  }
   384  void
   385  gs_update_matrix_fixed(gs_matrix_fixed *pmat)
   386  { (*pmat). tx = ((float)(((*pmat). tx_fixed = ((fixed)(((*pmat). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (*pmat). ty = ((float)(((*pmat). ty_fixed = ((fixed)(((*pmat). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) )));
   387  }
   388  int
   389  gs_initmatrix(gs_state *pgs)
   390  { gx_device *dev = pgs->device->info;
   391   (*dev->procs->get_initial_matrix)(dev, &*(gs_matrix *)&(pgs)->ctm );
   392   (pgs->ctm). tx = ((float)(((pgs->ctm). tx_fixed = ((fixed)(((pgs->ctm). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs->ctm). ty = ((float)(((pgs->ctm). ty_fixed = ((fixed)(((pgs->ctm). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs->inverse_valid = 0, pgs->char_tm_valid = 0;
   393   return 0;
   394  }
   395  int
   396  gs_defaultmatrix(const gs_state *pgs, gs_matrix *pmat)
   397  { gx_device *dev = pgs->device->info;
   398   (*dev->procs->get_initial_matrix)(dev, pmat);
   399   return 0;
   400  }
   401  int
   402  gs_currentmatrix(const gs_state *pgs, gs_matrix *pmat)
   403  { *pmat = *(gs_matrix *)&(pgs)->ctm;
   404   return 0;
   405  }
   406  int
   407  gs_setmatrix(gs_state *pgs, const gs_matrix *pmat)
   408  { *(gs_matrix *)&(pgs)->ctm = *pmat;
   409   (pgs->ctm). tx = ((float)(((pgs->ctm). tx_fixed = ((fixed)(((pgs->ctm). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs->ctm). ty = ((float)(((pgs->ctm). ty_fixed = ((fixed)(((pgs->ctm). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs->inverse_valid = 0, pgs->char_tm_valid = 0;
   410   return 0;
   411  }
   412  int
   413  gs_translate(gs_state *pgs, floatp dx, floatp dy)
   414  { gs_point pt;
   415   int code;
   416   if ( (code = gs_distance_transform(dx, dy, &*(gs_matrix *)&(pgs)->ctm , &pt)) < 0 )
   417   return code;
   418   pgs->ctm.tx += pt.x;
   419   pgs->ctm.ty += pt.y;
   420   (pgs->ctm). tx = ((float)(((pgs->ctm). tx_fixed = ((fixed)(((pgs->ctm). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs->ctm). ty = ((float)(((pgs->ctm). ty_fixed = ((fixed)(((pgs->ctm). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs->inverse_valid = 0, pgs->char_tm_valid = 0;
   421   return 0;
   422  }
   423  int
   424  gs_scale(gs_state *pgs, floatp sx, floatp sy)
   425  { pgs->ctm.xx *= sx;
   426   pgs->ctm.xy *= sx;
   427   pgs->ctm.yx *= sy;
   428   pgs->ctm.yy *= sy;
   429   pgs->inverse_valid = 0, pgs->char_tm_valid = 0;
   430   return 0;
   431  }
   432  int
   433  gs_rotate(gs_state *pgs, floatp ang)
   434  { int code = gs_matrix_rotate(&*(gs_matrix *)&(pgs)->ctm , ang, &*(gs_matrix *)&(pgs)->ctm );
   435   pgs->inverse_valid = 0, pgs->char_tm_valid = 0;
   436   return code;
   437  }
   438  int
   439  gs_concat(gs_state *pgs, const gs_matrix *pmat)
   440  { int code = gs_matrix_multiply(pmat, &*(gs_matrix *)&(pgs)->ctm , &*(gs_matrix *)&(pgs)->ctm );
   441   (pgs->ctm). tx = ((float)(((pgs->ctm). tx_fixed = ((fixed)(((pgs->ctm). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs->ctm). ty = ((float)(((pgs->ctm). ty_fixed = ((fixed)(((pgs->ctm). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs->inverse_valid = 0, pgs->char_tm_valid = 0;
   442   return code;
   443  }
   444  int
   445  gs_transform(gs_state *pgs, floatp x, floatp y, gs_point *pt)
   446  { return gs_point_transform(x, y, &*(gs_matrix *)&(pgs)->ctm , pt);
   447  }
   448  int
   449  gs_dtransform(gs_state *pgs, floatp dx, floatp dy, gs_point *pt)
   450  { return gs_distance_transform(dx, dy, &*(gs_matrix *)&(pgs)->ctm , pt);
   451  }
   452  int
   453  gs_itransform(gs_state *pgs, floatp x, floatp y, gs_point *pt)
   454  {
   455  
   456   if ( !!(((*(long *)(&((&pgs->ctm)->xy)) | *(long *)(&( (&pgs->ctm)->yx)) ) << 1) == 0) )
   457   { return gs_point_transform_inverse(x, y, &*(gs_matrix *)&(pgs)->ctm , pt);
   458   }
   459   else
   460   { if ( !pgs->inverse_valid ) { int code = ctm_set_inverse(pgs); if ( code < 0 ) return code; };
   461   return gs_point_transform(x, y, &pgs->ctm_inverse, pt);
   462   }
   463  }
   464  int
   465  gs_idtransform(gs_state *pgs, floatp dx, floatp dy, gs_point *pt)
   466  {
   467  
   468   if ( !!(((*(long *)(&((&pgs->ctm)->xy)) | *(long *)(&( (&pgs->ctm)->yx)) ) << 1) == 0) )
   469   { return gs_distance_transform_inverse(dx, dy,
   470   &*(gs_matrix *)&(pgs)->ctm , pt);
   471   }
   472   else
   473   { if ( !pgs->inverse_valid ) { int code = ctm_set_inverse(pgs); if ( code < 0 ) return code; };
   474   return gs_distance_transform(dx, dy, &pgs->ctm_inverse, pt);
   475   }
   476  }
   477  int
   478  gs_translate_to_fixed(register gs_state *pgs, fixed px, fixed py)
   479  { pgs->ctm.tx = ((float)((pgs->ctm.tx_fixed = px)*(1.0/(1<<12 ) )));
   480   pgs->ctm.ty = ((float)((pgs->ctm.ty_fixed = py)*(1.0/(1<<12 ) )));
   481   pgs->inverse_valid = 0;
   482   pgs->char_tm_valid = 1;
   483   return 0;
   484  }
   485  int
   486  gx_matrix_to_fixed_coeff(const gs_matrix *pmat, register fixed_coeff *pfc,
   487   int max_bits)
   488  { gs_matrix ctm;
   489   int scale = -10000;
   490   int expt, shift;
   491   ctm = *pmat;
   492   pfc->skewed = 0;
   493   if ( !((*(long *)(&(ctm.xx)) << 1) == 0) )
   494   { (void)frexp(ctm.xx, &scale);
   495   }
   496   if ( !((*(long *)(&(ctm.xy)) << 1) == 0) )
   497   { (void)frexp(ctm.xy, &expt);
   498   if ( expt > scale ) scale = expt;
   499   pfc->skewed = 1;
   500   }
   501   if ( !((*(long *)(&(ctm.yx)) << 1) == 0) )
   502   { (void)frexp(ctm.yx, &expt);
   503   if ( expt > scale ) scale = expt;
   504   pfc->skewed = 1;
   505   }
   506   if ( !((*(long *)(&(ctm.yy)) << 1) == 0) )
   507   { (void)frexp(ctm.yy, &expt);
   508   if ( expt > scale ) scale = expt;
   509   }
   510   scale = sizeof(long) * 8 - 1 - max_bits - scale;
   511   shift = scale - 12;
   512   if ( shift > 0 )
   513   { pfc->shift = shift;
   514   pfc->round = (fixed)1 << (shift - 1);
   515   }
   516   else
   517   { pfc->shift = 0;
   518   pfc->round = 0;
   519   scale -= shift;
   520   }
   521   pfc->xx = (((*(long *)(&(ctm.xx)) << 1) == 0) ? 0 : (long)ldexp(ctm.xx, scale));
   522   pfc->yy = (((*(long *)(&(ctm.yy)) << 1) == 0) ? 0 : (long)ldexp(ctm.yy, scale));
   523   if ( pfc->skewed )
   524   { pfc->xy = (((*(long *)(&(ctm.xy)) << 1) == 0) ? 0 : (long)ldexp(ctm.xy, scale));
   525   pfc->yx = (((*(long *)(&(ctm.yx)) << 1) == 0) ? 0 : (long)ldexp(ctm.yx, scale));
   526   }
   527   else
   528   pfc->xy = pfc->yx = 0;
   529   pfc->max_bits = max_bits;
   530   return 0;
   531  }