]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - gcc/testsuite/gcc.c-torture/compile/920428-2.c
Imported gcc-4.4.3
[msp430-gcc.git] / gcc / testsuite / gcc.c-torture / compile / 920428-2.c
diff --git a/gcc/testsuite/gcc.c-torture/compile/920428-2.c b/gcc/testsuite/gcc.c-torture/compile/920428-2.c
deleted file mode 100644 (file)
index 23f32a8..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-double sin(double x);
-double cos(double x);
-double tan(double x);
-double asin(double x);
-double acos(double x);
-double atan(double x);
-double atan2(double y, double x);
-double sinh(double x);
-double cosh(double x);
-double tanh(double x);
-double exp(double x);
-double expm1(double x);
-double log(double x);
-double log10(double x);
-double log1p(double x);
-double pow(double x, double y);
-double sqrt(double x);
-double cbrt(double x);
-double ceil(double x);
-double floor(double x);
-double fabs(double x);
-double frexp(double value, int *eptr);
-double ldexp(double value, int exp);
-double modf(double value, double *iptr);
-double erf(double x);
-double erfc(double x);
-double atof(const char *nptr);
-double hypot(double x, double y);
-double lgamma(double x);
-double j0(double x);
-double j1(double x);
-double jn(int n, double x);
-double y0(double x);
-double y1(double x);
-double yn(int n, double x);
-extern struct _iobuf {
- int _cnt;
- char *_ptr;
- char *_base;
- int _bufsiz;
- short _flag;
- char _file;
-} _iob[];
-typedef unsigned long size_t;
-typedef char *va_list;
-struct _iobuf *fopen(const char *filename, const char *type);
-struct _iobuf *freopen(const char *filename, const char *type, struct _iobuf *stream);
-struct _iobuf *fdopen(int fildes, const char *type);
-struct _iobuf *popen(const char *command, const char *type);
-int pclose(struct _iobuf *stream);
-int fflush(struct _iobuf *stream);
-int fclose(struct _iobuf *stream);
-int remove(const char *path);
-int rename(const char *from, const char *to);
-struct _iobuf *tmpfile(void);
-char *tmpnam(char *s);
-int setvbuf(struct _iobuf *iop, char *buf, int type, size_t size);
-int setbuf(struct _iobuf *stream, char *buf);
-int setbuffer(struct _iobuf *stream, char *buf, size_t size);
-int setlinebuf(struct _iobuf *stream);
-int fprintf(struct _iobuf *stream, const char *format, ...);
-int printf(const char *format, ...);
-char *sprintf(char *s, const char *format, ...);
-int vfprintf(struct _iobuf *stream, const char *format, va_list arg);
-int vprintf(const char *format, va_list arg);
-int vsprintf(char *s, const char *format, va_list arg);
-int fscanf(struct _iobuf *stream, const char *format, ...);
-int scanf(const char *format, ...);
-int sscanf(char *s, const char *format, ...);
-int fgetc(struct _iobuf *stream);
-int getw(struct _iobuf *stream);
-char *fgets(char *s, int n, struct _iobuf *stream);
-char *gets(char *s);
-int fputc(int c, struct _iobuf *stream);
-int putw(int w, struct _iobuf *stream);
-int fputs(const char *s, struct _iobuf *stream);
-int puts(const char *s);
-int ungetc(int c, struct _iobuf *stream);
-int fread(void *ptr, size_t size, size_t count, struct _iobuf *iop);
-int fwrite(const void *ptr, size_t size, size_t count, struct _iobuf *iop);
-int fseek(struct _iobuf *stream, long offset, int ptrname);
-long ftell(struct _iobuf *stream);
-void rewind(struct _iobuf *stream);
-int fgetpos(struct _iobuf *stream, long *pos);
-int fsetpos(struct _iobuf *stream, const long *pos);
-void perror(const char *s);
-typedef unsigned char byte;
-typedef unsigned char uchar;
-typedef unsigned short ushort;
-typedef unsigned int uint;
-typedef unsigned long ulong;
-typedef unsigned char u_char;
-typedef unsigned short u_short;
-typedef unsigned int u_int;
-typedef unsigned long u_long;
-typedef unsigned short ushort_;
-typedef struct _physadr { int r[1]; } *physadr;
-typedef struct label_t {
- int val[11];
-} label_t;
-typedef struct _quad { long val[2]; } quad;
-typedef long daddr_t;
-typedef char * caddr_t;
-typedef u_long ino_t;
-typedef long swblk_t;
-typedef long time_t;
-typedef short dev_t;
-typedef long off_t;
-typedef u_short uid_t;
-typedef u_short gid_t;
-typedef signed char prio_t;
-typedef long fd_mask;
-typedef struct fd_set {
- fd_mask fds_bits[(((256 )+(( (sizeof(fd_mask) * 8 ) )-1))/( (sizeof(fd_mask) * 8 ) )) ];
-} fd_set;
-typedef struct qhdr {
- struct qhdr *link, *rlink;
-} *queue_t;
-typedef char *ptr_ord_t;
-typedef double floatp;
-typedef char *(*proc_alloc_t)(unsigned num_elements, unsigned element_size, const char *client_name );
-typedef void (*proc_free_t)(char *data, unsigned num_elements, unsigned element_size, const char *client_name );
-extern struct _iobuf *gs_out;
-typedef struct gs_point_s {
- double x, y;
-} gs_point;
-typedef struct gs_int_point_s {
- int x, y;
-} gs_int_point;
-typedef struct gs_rect_s {
- gs_point p, q;
-} gs_rect;
-typedef struct gs_int_rect_s {
- gs_int_point p, q;
-} gs_int_rect;
-typedef struct gs_state_s gs_state;
-typedef struct {
- proc_alloc_t alloc;
- proc_free_t free;
-} gs_memory_procs;
-char *gs_malloc(uint, uint, const char * );
-void gs_free(char *, uint, uint, const char * );
-extern char gs_debug[128];
-extern int gs_log_error(int, const char *, int );
-typedef long fixed;
-typedef struct gs_fixed_point_s {
- fixed x, y;
-} gs_fixed_point;
-typedef struct gs_fixed_rect_s {
- gs_fixed_point p, q;
-} gs_fixed_rect;
-typedef struct gs_matrix_s {
- long _xx; float xx; long _xy; float xy; long _yx; float yx; long _yy; float yy; long _tx; float tx; long _ty; float ty;
-} gs_matrix;
-void gs_make_identity(gs_matrix * );
-int gs_make_translation(floatp, floatp, gs_matrix * ),
- gs_make_scaling(floatp, floatp, gs_matrix * ),
- gs_make_rotation(floatp, gs_matrix * );
-int gs_matrix_multiply(const gs_matrix *, const gs_matrix *, gs_matrix * ),
- gs_matrix_invert(const gs_matrix *, gs_matrix * ),
- gs_matrix_rotate(const gs_matrix *, floatp, gs_matrix * );
-int gs_point_transform(floatp, floatp, const gs_matrix *, gs_point * ),
- gs_point_transform_inverse(floatp, floatp, const gs_matrix *, gs_point * ),
- gs_distance_transform(floatp, floatp, const gs_matrix *, gs_point * ),
- gs_distance_transform_inverse(floatp, floatp, const gs_matrix *, gs_point * ),
- gs_bbox_transform_inverse(gs_rect *, gs_matrix *, gs_rect * );
-typedef struct gs_matrix_fixed_s {
- long _xx; float xx; long _xy; float xy; long _yx; float yx; long _yy; float yy; long _tx; float tx; long _ty; float ty;
- fixed tx_fixed, ty_fixed;
-} gs_matrix_fixed;
-extern void gs_update_matrix_fixed(gs_matrix_fixed * );
-int gs_point_transform2fixed(gs_matrix_fixed *, floatp, floatp, gs_fixed_point * ),
- gs_distance_transform2fixed(gs_matrix_fixed *, floatp, floatp, gs_fixed_point * );
-typedef struct {
- long xx, xy, yx, yy;
- int skewed;
- int shift;
- int max_bits;
- fixed round;
-} fixed_coeff;
-
-typedef enum {
- gs_cap_butt = 0,
- gs_cap_round = 1,
- gs_cap_square = 2
-} gs_line_cap;
-typedef enum {
- gs_join_miter = 0,
- gs_join_round = 1,
- gs_join_bevel = 2
-} gs_line_join;
-gs_state *gs_state_alloc(proc_alloc_t, proc_free_t );
-int gs_state_free(gs_state * );
-int gs_gsave(gs_state * ),
- gs_grestore(gs_state * ),
- gs_grestoreall(gs_state * );
-gs_state *gs_gstate(gs_state * );
-int gs_currentgstate(gs_state * , const gs_state * ),
- gs_setgstate(gs_state * , const gs_state * );
-gs_state *gs_state_swap_saved(gs_state *, gs_state * );
-void gs_state_swap(gs_state *, gs_state * );
-int gs_initgraphics(gs_state * );
-typedef struct gx_device_s gx_device;
-int gs_flushpage(gs_state * );
-int gs_copypage(gs_state * );
-int gs_output_page(gs_state *, int, int );
-int gs_copyscanlines(gx_device *, int, byte *, uint, int *, uint * );
-gx_device * gs_getdevice(int );
-int gs_copydevice(gx_device **, gx_device *, proc_alloc_t );
-int gs_makeimagedevice(gx_device **, gs_matrix *, uint, uint, byte *, int, proc_alloc_t );
-void gs_nulldevice(gs_state * );
-int gs_setdevice(gs_state *, gx_device * );
-gx_device * gs_currentdevice(gs_state * );
-const char * gs_devicename(gx_device * );
-void gs_deviceinitialmatrix(gx_device *, gs_matrix * );
-int gs_closedevice(gx_device * );
-int gs_setlinewidth(gs_state *, floatp );
-float gs_currentlinewidth(const gs_state * );
-int gs_setlinecap(gs_state *, gs_line_cap );
-gs_line_cap gs_currentlinecap(const gs_state * );
-int gs_setlinejoin(gs_state *, gs_line_join );
-gs_line_join gs_currentlinejoin(const gs_state * );
-int gs_setmiterlimit(gs_state *, floatp );
-float gs_currentmiterlimit(const gs_state * );
-int gs_setdash(gs_state *, const float *, uint, floatp );
-uint gs_currentdash_length(const gs_state * );
-int gs_currentdash_pattern(const gs_state *, float * );
-float gs_currentdash_offset(const gs_state * );
-int gs_setflat(gs_state *, floatp );
-float gs_currentflat(const gs_state * );
-int gs_setstrokeadjust(gs_state *, int );
-int gs_currentstrokeadjust(const gs_state * );
-typedef enum {
- gs_color_space_DeviceGray = 0,
- gs_color_space_DeviceRGB,
- gs_color_space_DeviceCMYK
-} gs_color_space;
-typedef struct gs_color_s gs_color;
-extern const uint gs_color_sizeof;
-int gs_setgray(gs_state *, floatp );
-float gs_currentgray(gs_state * );
-int gs_sethsbcolor(gs_state *, floatp, floatp, floatp ),
- gs_currenthsbcolor(gs_state *, float [3] ),
- gs_setrgbcolor(gs_state *, floatp, floatp, floatp ),
- gs_currentrgbcolor(gs_state *, float [3] );
-int gs_currentcolorspace(gs_state *, gs_color_space * );
-typedef float (*gs_transfer_proc)(gs_state *, floatp );
-int gs_settransfer(gs_state *, gs_transfer_proc ),
- gs_settransfer_remap(gs_state *, gs_transfer_proc, int );
-gs_transfer_proc gs_currenttransfer(gs_state * );
-int gs_setcolortransfer(gs_state *, gs_transfer_proc ,
- gs_transfer_proc , gs_transfer_proc ,
- gs_transfer_proc ),
- gs_setcolortransfer_remap(gs_state *, gs_transfer_proc ,
- gs_transfer_proc , gs_transfer_proc ,
- gs_transfer_proc , int );
-void gs_currentcolortransfer(gs_state *, gs_transfer_proc [4] );
-int gs_setscreen(gs_state *, floatp, floatp, float (*)(floatp, floatp ) );
-int gs_currentscreen(gs_state *, float *, float *, float (**)(floatp, floatp ) );
-int gs_sethalftonephase(gs_state *, int, int );
-int gs_currenthalftonephase(gs_state *, gs_int_point * );
-typedef struct gs_screen_enum_s gs_screen_enum;
-extern const uint gs_screen_enum_sizeof;
-int gs_screen_init(gs_screen_enum *, gs_state *, floatp, floatp );
-int gs_screen_currentpoint(gs_screen_enum *, gs_point * );
-int gs_screen_next(gs_screen_enum *, floatp );
-struct gs_state_s {
- gs_state *saved;
- gs_memory_procs memory_procs;
- gs_matrix_fixed ctm;
- gs_matrix ctm_inverse;
- int inverse_valid;
- struct gx_path_s *path;
- struct gx_clip_path_s *clip_path;
- int clip_rule;
- struct line_params_s *line_params;
- struct halftone_params_s *halftone;
- float (*ht_proc)(floatp, floatp );
- gs_int_point ht_phase;
- gs_int_point phase_mod;
- struct gs_color_s *color;
- struct gx_device_color_s *dev_color;
- struct gx_transfer_s *transfer;
- struct gs_font_s *font;
- gs_matrix char_tm;
- int char_tm_valid;
- byte in_cachedevice;
- byte in_charpath;
-
-
-
-
- int level;
- float flatness;
- int stroke_adjust;
- struct device_s *device;
- int device_is_shared;
-
-};
-typedef unsigned long gx_bitmap_id;
-typedef struct gx_bitmap_s {
- byte *data;
- int raster;
- gs_int_point size;
- gx_bitmap_id id;
- ushort rep_width, rep_height;
-} gx_bitmap;
-typedef unsigned long gx_color_index;
-typedef unsigned short gx_color_value;
-typedef struct gx_device_color_info_s {
- int num_components;
-
- int depth;
- gx_color_value max_gray;
- gx_color_value max_rgb;
-
- gx_color_value dither_gray;
- gx_color_value dither_rgb;
-
-} gx_device_color_info;
-typedef struct gx_device_procs_s gx_device_procs;
-struct gx_device_s {
- 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;
-};
-typedef struct gs_prop_item_s gs_prop_item;
-struct gx_device_procs_s {
- int (*open_device)(gx_device *dev );
- void (*get_initial_matrix)(gx_device *dev, gs_matrix *pmat );
- int (*sync_output)(gx_device *dev );
- int (*output_page)(gx_device *dev, int num_copies, int flush );
- int (*close_device)(gx_device *dev );
- gx_color_index (*map_rgb_color)(gx_device *dev, gx_color_value red, gx_color_value green, gx_color_value blue );
- int (*map_color_rgb)(gx_device *dev, gx_color_index color, gx_color_value rgb[3] );
- int (*fill_rectangle)(gx_device *dev, int x, int y, int width, int height, gx_color_index color );
- 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 );
- 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 );
- 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 );
- int (*draw_line)(gx_device *dev, int x0, int y0, int x1, int y1, gx_color_index color );
- int (*get_bits)(gx_device *dev, int y, unsigned char *data, unsigned int size, int pad_to_word );
- int (*get_props)(gx_device *dev, gs_prop_item *plist );
-
- int (*put_props)(gx_device *dev, gs_prop_item *plist, int count );
-
-};
-extern unsigned int gx_device_bytes_per_scan_line(gx_device *dev, int pad_to_word );
-int gx_default_open_device(gx_device *dev );
-void gx_default_get_initial_matrix(gx_device *dev, gs_matrix *pmat );
-int gx_default_sync_output(gx_device *dev );
-int gx_default_output_page(gx_device *dev, int num_copies, int flush );
-int gx_default_close_device(gx_device *dev );
-gx_color_index gx_default_map_rgb_color(gx_device *dev, gx_color_value red, gx_color_value green, gx_color_value blue );
-int gx_default_map_color_rgb(gx_device *dev, gx_color_index color, gx_color_value rgb[3] );
-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 );
-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 );
-int gx_default_draw_line(gx_device *dev, int x0, int y0, int x1, int y1, gx_color_index color );
-int gx_default_get_bits(gx_device *dev, int y, unsigned char *data, unsigned int size, int pad_to_word );
-int gx_default_get_props(gx_device *dev, gs_prop_item *plist );
-int gx_default_put_props(gx_device *dev, gs_prop_item *plist, int count );
-typedef struct device_s {
- gx_device *info;
- int is_band_device;
- gx_color_index white, black;
-} device;
-int gs_initmatrix(gs_state * ),
- gs_defaultmatrix(const gs_state *, gs_matrix * ),
- gs_currentmatrix(const gs_state *, gs_matrix * ),
- gs_setmatrix(gs_state *, const gs_matrix * ),
- gs_translate(gs_state *, floatp, floatp ),
- gs_scale(gs_state *, floatp, floatp ),
- gs_rotate(gs_state *, floatp ),
- gs_concat(gs_state *, const gs_matrix * );
-int gs_transform(gs_state *, floatp, floatp, gs_point * ),
- gs_dtransform(gs_state *, floatp, floatp, gs_point * ),
- gs_itransform(gs_state *, floatp, floatp, gs_point * ),
- gs_idtransform(gs_state *, floatp, floatp, gs_point * );
-static int
-ctm_set_inverse(gs_state *pgs)
-{ int code = gs_matrix_invert(&*(gs_matrix *)&(pgs)->ctm , &pgs->ctm_inverse);
- 0;
- if ( code < 0 ) return code;
- pgs->inverse_valid = 1;
- return 0;
-}
-void
-gs_update_matrix_fixed(gs_matrix_fixed *pmat)
-{ (*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 ) )));
-}
-int
-gs_initmatrix(gs_state *pgs)
-{ gx_device *dev = pgs->device->info;
- (*dev->procs->get_initial_matrix)(dev, &*(gs_matrix *)&(pgs)->ctm );
- (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;
- return 0;
-}
-int
-gs_defaultmatrix(const gs_state *pgs, gs_matrix *pmat)
-{ gx_device *dev = pgs->device->info;
- (*dev->procs->get_initial_matrix)(dev, pmat);
- return 0;
-}
-int
-gs_currentmatrix(const gs_state *pgs, gs_matrix *pmat)
-{ *pmat = *(gs_matrix *)&(pgs)->ctm;
- return 0;
-}
-int
-gs_setmatrix(gs_state *pgs, const gs_matrix *pmat)
-{ *(gs_matrix *)&(pgs)->ctm = *pmat;
- (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;
- return 0;
-}
-int
-gs_translate(gs_state *pgs, floatp dx, floatp dy)
-{ gs_point pt;
- int code;
- if ( (code = gs_distance_transform(dx, dy, &*(gs_matrix *)&(pgs)->ctm , &pt)) < 0 )
- return code;
- pgs->ctm.tx += pt.x;
- pgs->ctm.ty += pt.y;
- (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;
- return 0;
-}
-int
-gs_scale(gs_state *pgs, floatp sx, floatp sy)
-{ pgs->ctm.xx *= sx;
- pgs->ctm.xy *= sx;
- pgs->ctm.yx *= sy;
- pgs->ctm.yy *= sy;
- pgs->inverse_valid = 0, pgs->char_tm_valid = 0;
- return 0;
-}
-int
-gs_rotate(gs_state *pgs, floatp ang)
-{ int code = gs_matrix_rotate(&*(gs_matrix *)&(pgs)->ctm , ang, &*(gs_matrix *)&(pgs)->ctm );
- pgs->inverse_valid = 0, pgs->char_tm_valid = 0;
- return code;
-}
-int
-gs_concat(gs_state *pgs, const gs_matrix *pmat)
-{ int code = gs_matrix_multiply(pmat, &*(gs_matrix *)&(pgs)->ctm , &*(gs_matrix *)&(pgs)->ctm );
- (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;
- return code;
-}
-int
-gs_transform(gs_state *pgs, floatp x, floatp y, gs_point *pt)
-{ return gs_point_transform(x, y, &*(gs_matrix *)&(pgs)->ctm , pt);
-}
-int
-gs_dtransform(gs_state *pgs, floatp dx, floatp dy, gs_point *pt)
-{ return gs_distance_transform(dx, dy, &*(gs_matrix *)&(pgs)->ctm , pt);
-}
-int
-gs_itransform(gs_state *pgs, floatp x, floatp y, gs_point *pt)
-{
-
- if ( !!(((*(long *)(&((&pgs->ctm)->xy)) | *(long *)(&( (&pgs->ctm)->yx)) ) << 1) == 0) )
- { return gs_point_transform_inverse(x, y, &*(gs_matrix *)&(pgs)->ctm , pt);
- }
- else
- { if ( !pgs->inverse_valid ) { int code = ctm_set_inverse(pgs); if ( code < 0 ) return code; };
- return gs_point_transform(x, y, &pgs->ctm_inverse, pt);
- }
-}
-int
-gs_idtransform(gs_state *pgs, floatp dx, floatp dy, gs_point *pt)
-{
-
- if ( !!(((*(long *)(&((&pgs->ctm)->xy)) | *(long *)(&( (&pgs->ctm)->yx)) ) << 1) == 0) )
- { return gs_distance_transform_inverse(dx, dy,
- &*(gs_matrix *)&(pgs)->ctm , pt);
- }
- else
- { if ( !pgs->inverse_valid ) { int code = ctm_set_inverse(pgs); if ( code < 0 ) return code; };
- return gs_distance_transform(dx, dy, &pgs->ctm_inverse, pt);
- }
-}
-int
-gs_translate_to_fixed(register gs_state *pgs, fixed px, fixed py)
-{ pgs->ctm.tx = ((float)((pgs->ctm.tx_fixed = px)*(1.0/(1<<12 ) )));
- pgs->ctm.ty = ((float)((pgs->ctm.ty_fixed = py)*(1.0/(1<<12 ) )));
- pgs->inverse_valid = 0;
- pgs->char_tm_valid = 1;
- return 0;
-}
-int
-gx_matrix_to_fixed_coeff(const gs_matrix *pmat, register fixed_coeff *pfc,
- int max_bits)
-{ gs_matrix ctm;
- int scale = -10000;
- int expt, shift;
- ctm = *pmat;
- pfc->skewed = 0;
- if ( !((*(long *)(&(ctm.xx)) << 1) == 0) )
- { (void)frexp(ctm.xx, &scale);
- }
- if ( !((*(long *)(&(ctm.xy)) << 1) == 0) )
- { (void)frexp(ctm.xy, &expt);
- if ( expt > scale ) scale = expt;
- pfc->skewed = 1;
- }
- if ( !((*(long *)(&(ctm.yx)) << 1) == 0) )
- { (void)frexp(ctm.yx, &expt);
- if ( expt > scale ) scale = expt;
- pfc->skewed = 1;
- }
- if ( !((*(long *)(&(ctm.yy)) << 1) == 0) )
- { (void)frexp(ctm.yy, &expt);
- if ( expt > scale ) scale = expt;
- }
- scale = sizeof(long) * 8 - 1 - max_bits - scale;
- shift = scale - 12;
- if ( shift > 0 )
- { pfc->shift = shift;
- pfc->round = (fixed)1 << (shift - 1);
- }
- else
- { pfc->shift = 0;
- pfc->round = 0;
- scale -= shift;
- }
- pfc->xx = (((*(long *)(&(ctm.xx)) << 1) == 0) ? 0 : (long)ldexp(ctm.xx, scale));
- pfc->yy = (((*(long *)(&(ctm.yy)) << 1) == 0) ? 0 : (long)ldexp(ctm.yy, scale));
- if ( pfc->skewed )
- { pfc->xy = (((*(long *)(&(ctm.xy)) << 1) == 0) ? 0 : (long)ldexp(ctm.xy, scale));
- pfc->yx = (((*(long *)(&(ctm.yx)) << 1) == 0) ? 0 : (long)ldexp(ctm.yx, scale));
- }
- else
- pfc->xy = pfc->yx = 0;
- pfc->max_bits = max_bits;
- return 0;
-}