This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

c/8339: insn does not satisfy its constraints


>Number:         8339
>Category:       c
>Synopsis:       insn does not satisfy its constraints
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Thu Oct 24 09:16:02 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     
>Release:        3.2
>Organization:
>Environment:
System: Linux ee-pdouble.pdouble.net 2.4.19-gentoo-r9 #2 Mon Sep 16 16:28:23 CDT 2002 i686 Intel(R) Pentium(R) 4 Mobile CPU 1.60GHz GenuineIntel GNU/Linux
Architecture: i686

	
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: /var/tmp/portage/gcc-3.2-r2/work/gcc-3.2/configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=i686-pc-linux-gnu --with-system-zlib --enable-languages=c,c++,ada,f77,objc,java --enable-threads=posix --enable-long-long --disable-checking --enable-cstdio=stdio --enable-clocale=generic --enable-__cxa_atexit --enable-version-specific-runtime-libs --with-gxx-include-dir=/usr/include/g++-v32 --with-local-prefix=/usr/local --enable-shared --enable-nls --without-included-gettext

Machine: Dell Inspiron 8200 laptop with BIOS version A06
RAM: 512M 

CPU: (from /proc/cpuinfo)

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 15
model           : 2
model name      : Intel(R) Pentium(R) 4 Mobile CPU 1.60GHz
stepping        : 4
cpu MHz         : 1595.744
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm
bogomips        : 3145.72

OS: Gentoo Linux

glibc version is 2.3.1
glib version is 1.2.10

>Description:
	Internal compiler error occurs with optimizations turned on in certain situations. Appears to be use of the "sse2" chip. The error is as follows:

	gsmatrix.c: In function `gs_matrix_invert':
	gsmatrix.c:148: insn does not satisfy its constraints:
	(insn 199 194 200 (set (reg:DF 24 rxmm3)
			           (float_extend:DF (reg:SF 8 st(0) [111]))) 133 {*extendsfdf2_1} (nil)
	     (nil))
	gsmatrix.c:148: Internal compiler error in reload_cse_simplify_operands, at reload1.c:8369

>How-To-Repeat:
	This is the command:

	gcc `cat ./obj/cc.tr` -DDISPLAYGHOSTSCRIPT -DVERSION=\"0.5.10\" -DGS_VERSION=\"5.50\" -O2 -Wall -Wcast-align -Wstrict-prototypes -Wwrite-strings -fno-common -O3 -pipe -march=pentium4 -mmmx -msse2 -mfpmath=sse -fexpensive-optimizations -fschedule-insns2 -fomit-frame-pointer -funroll-loops -frerun-cse-after-loop -frerun-loop-opt -falign-functions=4 -DHAVE_TCPD_H -DHAVE_SYSLOG_H -I. -I./obj  -o ./obj/gsmatrix.o -c ./gsmatrix.c

	This is the preprocessor output:

--- cut here ---

# 1 "gsmatrix.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "gsmatrix.c"
# 26 "gsmatrix.c"
# 1 "math_.h" 1
# 31 "math_.h"
# 1 "std.h" 1
# 30 "std.h"
# 1 "stdpre.h" 1
# 181 "stdpre.h"
typedef unsigned char byte;
typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;
# 196 "stdpre.h"
# 1 "/usr/include/sys/types.h" 1 3
# 26 "/usr/include/sys/types.h" 3
# 1 "/usr/include/features.h" 1 3
# 291 "/usr/include/features.h" 3
# 1 "/usr/include/sys/cdefs.h" 1 3
# 292 "/usr/include/features.h" 2 3
# 320 "/usr/include/features.h" 3
# 1 "/usr/include/gnu/stubs.h" 1 3
# 321 "/usr/include/features.h" 2 3
# 27 "/usr/include/sys/types.h" 2 3



# 1 "/usr/include/bits/types.h" 1 3
# 29 "/usr/include/bits/types.h" 3
# 1 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stddef.h" 1 3
# 201 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stddef.h" 3
typedef unsigned int size_t;
# 30 "/usr/include/bits/types.h" 2 3


typedef unsigned char __u_char;
typedef unsigned short __u_short;
typedef unsigned int __u_int;
typedef unsigned long __u_long;

__extension__ typedef unsigned long long int __u_quad_t;
__extension__ typedef long long int __quad_t;
# 49 "/usr/include/bits/types.h" 3
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;

__extension__ typedef signed long long int __int64_t;
__extension__ typedef unsigned long long int __uint64_t;

typedef __quad_t *__qaddr_t;

typedef __u_quad_t __dev_t;
typedef __u_int __uid_t;
typedef __u_int __gid_t;
typedef __u_long __ino_t;
typedef __u_int __mode_t;
typedef __u_int __nlink_t;
typedef long int __off_t;
typedef __quad_t __loff_t;
typedef int __pid_t;
typedef int __ssize_t;
typedef __u_long __rlim_t;
typedef __u_quad_t __rlim64_t;
typedef __u_int __id_t;

typedef struct
  {
    int __val[2];
  } __fsid_t;


typedef int __daddr_t;
typedef char *__caddr_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;
typedef long int __swblk_t;

typedef long int __clock_t;


typedef int __clockid_t;


typedef int __timer_t;






typedef int __key_t;


typedef unsigned short int __ipc_pid_t;



typedef long int __blksize_t;




typedef long int __blkcnt_t;
typedef __quad_t __blkcnt64_t;


typedef __u_long __fsblkcnt_t;
typedef __u_quad_t __fsblkcnt64_t;


typedef __u_long __fsfilcnt_t;
typedef __u_quad_t __fsfilcnt64_t;


typedef __u_quad_t __ino64_t;


typedef __loff_t __off64_t;


typedef long int __t_scalar_t;
typedef unsigned long int __t_uscalar_t;


typedef int __intptr_t;


typedef unsigned int __socklen_t;




# 1 "/usr/include/bits/pthreadtypes.h" 1 3
# 23 "/usr/include/bits/pthreadtypes.h" 3
# 1 "/usr/include/bits/sched.h" 1 3
# 68 "/usr/include/bits/sched.h" 3
struct __sched_param
  {
    int __sched_priority;
  };
# 24 "/usr/include/bits/pthreadtypes.h" 2 3


struct _pthread_fastlock
{
  long int __status;
  int __spinlock;

};



typedef struct _pthread_descr_struct *_pthread_descr;





typedef struct __pthread_attr_s
{
  int __detachstate;
  int __schedpolicy;
  struct __sched_param __schedparam;
  int __inheritsched;
  int __scope;
  size_t __guardsize;
  int __stackaddr_set;
  void *__stackaddr;
  size_t __stacksize;
} pthread_attr_t;



typedef struct
{
  struct _pthread_fastlock __c_lock;
  _pthread_descr __c_waiting;
} pthread_cond_t;



typedef struct
{
  int __dummy;
} pthread_condattr_t;


typedef unsigned int pthread_key_t;





typedef struct
{
  int __m_reserved;
  int __m_count;
  _pthread_descr __m_owner;
  int __m_kind;
  struct _pthread_fastlock __m_lock;
} pthread_mutex_t;



typedef struct
{
  int __mutexkind;
} pthread_mutexattr_t;



typedef int pthread_once_t;
# 140 "/usr/include/bits/pthreadtypes.h" 3
typedef unsigned long int pthread_t;
# 144 "/usr/include/bits/types.h" 2 3
# 31 "/usr/include/sys/types.h" 2 3



typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;




typedef __loff_t loff_t;



typedef __ino_t ino_t;
# 61 "/usr/include/sys/types.h" 3
typedef __dev_t dev_t;




typedef __gid_t gid_t;




typedef __mode_t mode_t;




typedef __nlink_t nlink_t;




typedef __uid_t uid_t;





typedef __off_t off_t;
# 99 "/usr/include/sys/types.h" 3
typedef __pid_t pid_t;




typedef __id_t id_t;




typedef __ssize_t ssize_t;





typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;





typedef __key_t key_t;
# 132 "/usr/include/sys/types.h" 3
# 1 "/usr/include/time.h" 1 3
# 74 "/usr/include/time.h" 3


typedef __time_t time_t;



# 92 "/usr/include/time.h" 3
typedef __clockid_t clockid_t;
# 104 "/usr/include/time.h" 3
typedef __timer_t timer_t;
# 133 "/usr/include/sys/types.h" 2 3
# 146 "/usr/include/sys/types.h" 3
# 1 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stddef.h" 1 3
# 147 "/usr/include/sys/types.h" 2 3



typedef unsigned long int ulong_;
typedef unsigned short int ushort_;
typedef unsigned int uint_;
# 190 "/usr/include/sys/types.h" 3
typedef int int8_t __attribute__ ((__mode__ (__QI__)));
typedef int int16_t __attribute__ ((__mode__ (__HI__)));
typedef int int32_t __attribute__ ((__mode__ (__SI__)));
typedef int int64_t __attribute__ ((__mode__ (__DI__)));


typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));

typedef int register_t __attribute__ ((__mode__ (__word__)));
# 212 "/usr/include/sys/types.h" 3
# 1 "/usr/include/endian.h" 1 3
# 37 "/usr/include/endian.h" 3
# 1 "/usr/include/bits/endian.h" 1 3
# 38 "/usr/include/endian.h" 2 3
# 213 "/usr/include/sys/types.h" 2 3


# 1 "/usr/include/sys/select.h" 1 3
# 31 "/usr/include/sys/select.h" 3
# 1 "/usr/include/bits/select.h" 1 3
# 32 "/usr/include/sys/select.h" 2 3


# 1 "/usr/include/bits/sigset.h" 1 3
# 23 "/usr/include/bits/sigset.h" 3
typedef int __sig_atomic_t;




typedef struct
  {
    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
  } __sigset_t;
# 35 "/usr/include/sys/select.h" 2 3



typedef __sigset_t sigset_t;





# 1 "/usr/include/time.h" 1 3
# 116 "/usr/include/time.h" 3
struct timespec
  {
    __time_t tv_sec;
    long int tv_nsec;
  };
# 45 "/usr/include/sys/select.h" 2 3

# 1 "/usr/include/bits/time.h" 1 3
# 67 "/usr/include/bits/time.h" 3
struct timeval
  {
    __time_t tv_sec;
    __suseconds_t tv_usec;
  };
# 47 "/usr/include/sys/select.h" 2 3


typedef __suseconds_t suseconds_t;





typedef long int __fd_mask;
# 67 "/usr/include/sys/select.h" 3
typedef struct
  {






    __fd_mask __fds_bits[1024 / (8 * sizeof (__fd_mask))];


  } fd_set;






typedef __fd_mask fd_mask;
# 99 "/usr/include/sys/select.h" 3







extern int select (int __nfds, fd_set *__restrict __readfds,
                   fd_set *__restrict __writefds,
                   fd_set *__restrict __exceptfds,
                   struct timeval *__restrict __timeout) ;
# 122 "/usr/include/sys/select.h" 3

# 216 "/usr/include/sys/types.h" 2 3


# 1 "/usr/include/sys/sysmacros.h" 1 3
# 219 "/usr/include/sys/types.h" 2 3
# 230 "/usr/include/sys/types.h" 3
typedef __blkcnt_t blkcnt_t;



typedef __fsblkcnt_t fsblkcnt_t;



typedef __fsfilcnt_t fsfilcnt_t;
# 262 "/usr/include/sys/types.h" 3

# 197 "stdpre.h" 2
# 218 "stdpre.h"
typedef int bool;
# 254 "stdpre.h"
typedef const char *ptr_ord_t;
# 293 "stdpre.h"
typedef double floatp;
# 323 "stdpre.h"
typedef const char *client_name_t;
# 31 "std.h" 2


# 1 "obj/arch.h" 1
# 34 "std.h" 2
# 48 "std.h"
typedef ushort bits16;



typedef uint bits32;
# 125 "std.h"
# 1 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 1 3
# 39 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3




# 1 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stddef.h" 1 3
# 44 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 2 3
# 54 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
typedef struct _IO_FILE FILE;
# 64 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
typedef struct _IO_FILE __FILE;
# 74 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
# 1 "/usr/include/libio.h" 1 3
# 32 "/usr/include/libio.h" 3
# 1 "/usr/include/_G_config.h" 1 3
# 14 "/usr/include/_G_config.h" 3
# 1 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stddef.h" 1 3
# 294 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stddef.h" 3
typedef long int wchar_t;
# 321 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stddef.h" 3
typedef unsigned int wint_t;
# 15 "/usr/include/_G_config.h" 2 3
# 24 "/usr/include/_G_config.h" 3
# 1 "/usr/include/wchar.h" 1 3
# 48 "/usr/include/wchar.h" 3
# 1 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stddef.h" 1 3
# 49 "/usr/include/wchar.h" 2 3

# 1 "/usr/include/bits/wchar.h" 1 3
# 51 "/usr/include/wchar.h" 2 3
# 71 "/usr/include/wchar.h" 3
typedef struct
{
  int __count;
  union
  {
    wint_t __wch;
    char __wchb[4];
  } __value;
} __mbstate_t;
# 25 "/usr/include/_G_config.h" 2 3

typedef struct
{
  __off_t __pos;
  __mbstate_t __state;
} _G_fpos_t;
typedef struct
{
  __off64_t __pos;
  __mbstate_t __state;
} _G_fpos64_t;
# 44 "/usr/include/_G_config.h" 3
# 1 "/usr/include/gconv.h" 1 3
# 28 "/usr/include/gconv.h" 3
# 1 "/usr/include/wchar.h" 1 3
# 48 "/usr/include/wchar.h" 3
# 1 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stddef.h" 1 3
# 49 "/usr/include/wchar.h" 2 3
# 29 "/usr/include/gconv.h" 2 3


# 1 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stddef.h" 1 3
# 32 "/usr/include/gconv.h" 2 3





enum
{
  __GCONV_OK = 0,
  __GCONV_NOCONV,
  __GCONV_NODB,
  __GCONV_NOMEM,

  __GCONV_EMPTY_INPUT,
  __GCONV_FULL_OUTPUT,
  __GCONV_ILLEGAL_INPUT,
  __GCONV_INCOMPLETE_INPUT,

  __GCONV_ILLEGAL_DESCRIPTOR,
  __GCONV_INTERNAL_ERROR
};



enum
{
  __GCONV_IS_LAST = 0x0001,
  __GCONV_IGNORE_ERRORS = 0x0002
};



struct __gconv_step;
struct __gconv_step_data;
struct __gconv_loaded_object;
struct __gconv_trans_data;



typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
                            __const unsigned char **, __const unsigned char *,
                            unsigned char **, size_t *, int, int);


typedef int (*__gconv_init_fct) (struct __gconv_step *);
typedef void (*__gconv_end_fct) (struct __gconv_step *);



typedef int (*__gconv_trans_fct) (struct __gconv_step *,
                                  struct __gconv_step_data *, void *,
                                  __const unsigned char *,
                                  __const unsigned char **,
                                  __const unsigned char *, unsigned char **,
                                  size_t *);


typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
                                          __const unsigned char *,
                                          unsigned char *, unsigned char *);


typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
                                        size_t *);


typedef int (*__gconv_trans_init_fct) (void **, const char *);
typedef void (*__gconv_trans_end_fct) (void *);

struct __gconv_trans_data
{

  __gconv_trans_fct __trans_fct;
  __gconv_trans_context_fct __trans_context_fct;
  __gconv_trans_end_fct __trans_end_fct;
  void *__data;
  struct __gconv_trans_data *__next;
};



struct __gconv_step
{
  struct __gconv_loaded_object *__shlib_handle;
  __const char *__modname;

  int __counter;

  char *__from_name;
  char *__to_name;

  __gconv_fct __fct;
  __gconv_init_fct __init_fct;
  __gconv_end_fct __end_fct;



  int __min_needed_from;
  int __max_needed_from;
  int __min_needed_to;
  int __max_needed_to;


  int __stateful;

  void *__data;
};



struct __gconv_step_data
{
  unsigned char *__outbuf;
  unsigned char *__outbufend;



  int __flags;



  int __invocation_counter;



  int __internal_use;

  __mbstate_t *__statep;
  __mbstate_t __state;



  struct __gconv_trans_data *__trans;
};



typedef struct __gconv_info
{
  size_t __nsteps;
  struct __gconv_step *__steps;
  __extension__ struct __gconv_step_data __data [];
} *__gconv_t;
# 45 "/usr/include/_G_config.h" 2 3
typedef union
{
  struct __gconv_info __cd;
  struct
  {
    struct __gconv_info __cd;
    struct __gconv_step_data __data;
  } __combined;
} _G_iconv_t;

typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
# 33 "/usr/include/libio.h" 2 3
# 53 "/usr/include/libio.h" 3
# 1 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdarg.h" 1 3
# 43 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdarg.h" 3
typedef __builtin_va_list __gnuc_va_list;
# 54 "/usr/include/libio.h" 2 3
# 162 "/usr/include/libio.h" 3
struct _IO_jump_t; struct _IO_FILE;
# 172 "/usr/include/libio.h" 3
typedef void _IO_lock_t;





struct _IO_marker {
  struct _IO_marker *_next;
  struct _IO_FILE *_sbuf;



  int _pos;
# 195 "/usr/include/libio.h" 3
};


enum __codecvt_result
{
  __codecvt_ok,
  __codecvt_partial,
  __codecvt_error,
  __codecvt_noconv
};
# 263 "/usr/include/libio.h" 3
struct _IO_FILE {
  int _flags;




  char* _IO_read_ptr;
  char* _IO_read_end;
  char* _IO_read_base;
  char* _IO_write_base;
  char* _IO_write_ptr;
  char* _IO_write_end;
  char* _IO_buf_base;
  char* _IO_buf_end;

  char *_IO_save_base;
  char *_IO_backup_base;
  char *_IO_save_end;

  struct _IO_marker *_markers;

  struct _IO_FILE *_chain;

  int _fileno;



  int _flags2;

  __off_t _old_offset;



  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];



  _IO_lock_t *_lock;
# 311 "/usr/include/libio.h" 3
  __off64_t _offset;





  void *__pad1;
  void *__pad2;

  int _mode;

  char _unused2[15 * sizeof (int) - 2 * sizeof (void *)];

};


typedef struct _IO_FILE _IO_FILE;


struct _IO_FILE_plus;

extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
# 350 "/usr/include/libio.h" 3
typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);







typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
                                 size_t __n);







typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);


typedef int __io_close_fn (void *__cookie);
# 402 "/usr/include/libio.h" 3
extern int __underflow (_IO_FILE *) ;
extern int __uflow (_IO_FILE *) ;
extern int __overflow (_IO_FILE *, int) ;
extern wint_t __wunderflow (_IO_FILE *) ;
extern wint_t __wuflow (_IO_FILE *) ;
extern wint_t __woverflow (_IO_FILE *, wint_t) ;
# 432 "/usr/include/libio.h" 3
extern int _IO_getc (_IO_FILE *__fp) ;
extern int _IO_putc (int __c, _IO_FILE *__fp) ;
extern int _IO_feof (_IO_FILE *__fp) ;
extern int _IO_ferror (_IO_FILE *__fp) ;

extern int _IO_peekc_locked (_IO_FILE *__fp) ;





extern void _IO_flockfile (_IO_FILE *) ;
extern void _IO_funlockfile (_IO_FILE *) ;
extern int _IO_ftrylockfile (_IO_FILE *) ;
# 462 "/usr/include/libio.h" 3
extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
                        __gnuc_va_list, int *__restrict) ;
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
                         __gnuc_va_list) ;
extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t) ;
extern size_t _IO_sgetn (_IO_FILE *, void *, size_t) ;

extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int) ;
extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int) ;

extern void _IO_free_backup_area (_IO_FILE *) ;
# 75 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 2 3
# 89 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
typedef _G_fpos_t fpos_t;
# 138 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
# 1 "/usr/include/bits/stdio_lim.h" 1 3
# 139 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 2 3



extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;






extern int remove (__const char *__filename) ;

extern int rename (__const char *__old, __const char *__new) ;




extern FILE *tmpfile (void) ;
# 170 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
extern char *tmpnam (char *__s) ;




extern char *tmpnam_r (char *__s) ;
# 187 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
extern char *tempnam (__const char *__dir, __const char *__pfx)
     __attribute__ ((__malloc__));




extern int fclose (FILE *__stream) ;

extern int fflush (FILE *__stream) ;



extern int fflush_unlocked (FILE *__stream) ;
# 210 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
extern FILE *fopen (__const char *__restrict __filename,
                    __const char *__restrict __modes) ;

extern FILE *freopen (__const char *__restrict __filename,
                      __const char *__restrict __modes,
                      FILE *__restrict __stream) ;
# 240 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
extern FILE *fdopen (int __fd, __const char *__modes) ;
# 263 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) ;



extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
                    int __modes, size_t __n) ;




extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
                       size_t __size) ;


extern void setlinebuf (FILE *__stream) ;




extern int fprintf (FILE *__restrict __stream,
                    __const char *__restrict __format, ...) ;

extern int printf (__const char *__restrict __format, ...) ;

extern int sprintf (char *__restrict __s,
                    __const char *__restrict __format, ...) ;


extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
                     __gnuc_va_list __arg) ;

extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg)
     ;

extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
                     __gnuc_va_list __arg) ;



extern int snprintf (char *__restrict __s, size_t __maxlen,
                     __const char *__restrict __format, ...)
     __attribute__ ((__format__ (__printf__, 3, 4)));

extern int vsnprintf (char *__restrict __s, size_t __maxlen,
                      __const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__format__ (__printf__, 3, 0)));
# 334 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
extern int fscanf (FILE *__restrict __stream,
                   __const char *__restrict __format, ...) ;

extern int scanf (__const char *__restrict __format, ...) ;

extern int sscanf (__const char *__restrict __s,
                   __const char *__restrict __format, ...) ;
# 360 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
extern int fgetc (FILE *__stream) ;
extern int getc (FILE *__stream) ;


extern int getchar (void) ;







extern int getc_unlocked (FILE *__stream) ;
extern int getchar_unlocked (void) ;




extern int fgetc_unlocked (FILE *__stream) ;




extern int fputc (int __c, FILE *__stream) ;
extern int putc (int __c, FILE *__stream) ;


extern int putchar (int __c) ;







extern int fputc_unlocked (int __c, FILE *__stream) ;




extern int putc_unlocked (int __c, FILE *__stream) ;
extern int putchar_unlocked (int __c) ;





extern int getw (FILE *__stream) ;


extern int putw (int __w, FILE *__stream) ;




extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
     ;
# 426 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
extern char *gets (char *__s) ;
# 450 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
extern int fputs (__const char *__restrict __s, FILE *__restrict __stream)
     ;
# 460 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
extern int puts (__const char *__s) ;



extern int ungetc (int __c, FILE *__stream) ;



extern size_t fread (void *__restrict __ptr, size_t __size,
                     size_t __n, FILE *__restrict __stream) ;

extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
                      size_t __n, FILE *__restrict __s) ;



extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
                              size_t __n, FILE *__restrict __stream) ;
extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
                               size_t __n, FILE *__restrict __stream) ;




extern int fseek (FILE *__stream, long int __off, int __whence) ;

extern long int ftell (FILE *__stream) ;

extern void rewind (FILE *__stream) ;
# 504 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos)
     ;

extern int fsetpos (FILE *__stream, __const fpos_t *__pos) ;
# 540 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
extern void clearerr (FILE *__stream) ;

extern int feof (FILE *__stream) ;

extern int ferror (FILE *__stream) ;



extern void clearerr_unlocked (FILE *__stream) ;
extern int feof_unlocked (FILE *__stream) ;
extern int ferror_unlocked (FILE *__stream) ;




extern void perror (__const char *__s) ;




extern int sys_nerr;
extern __const char *__const sys_errlist[];
# 571 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
extern int fileno (FILE *__stream) ;




extern int fileno_unlocked (FILE *__stream) ;






extern FILE *popen (__const char *__command, __const char *__modes) ;


extern int pclose (FILE *__stream) ;





extern char *ctermid (char *__s) ;
# 618 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
extern void flockfile (FILE *__stream) ;



extern int ftrylockfile (FILE *__stream) ;


extern void funlockfile (FILE *__stream) ;
# 639 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 3
# 1 "/usr/include/bits/stdio.h" 1 3
# 33 "/usr/include/bits/stdio.h" 3
extern __inline int
vprintf (__const char *__restrict __fmt, __gnuc_va_list __arg)
{
  return vfprintf (stdout, __fmt, __arg);
}


extern __inline int
getchar (void)
{
  return _IO_getc (stdin);
}




extern __inline int
getc_unlocked (FILE *__fp)
{
  return ((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
}


extern __inline int
getchar_unlocked (void)
{
  return ((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
}




extern __inline int
putchar (int __c)
{
  return _IO_putc (__c, stdout);
}




extern __inline int
fputc_unlocked (int __c, FILE *__stream)
{
  return (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}





extern __inline int
putc_unlocked (int __c, FILE *__stream)
{
  return (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}


extern __inline int
putchar_unlocked (int __c)
{
  return (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
}
# 111 "/usr/include/bits/stdio.h" 3
extern __inline int
feof_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x10) != 0);
}


extern __inline int
ferror_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x20) != 0);
}
# 640 "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include/stdio.h" 2 3



# 126 "std.h" 2







void dprintf_file_and_line(FILE *,const char *,int);
# 199 "std.h"
void eprintf_program_name(FILE *,const char *);
const char *gs_program_name(void);
# 228 "std.h"
void lprintf_file_and_line(FILE *,const char *,int);
# 32 "math_.h" 2





# 1 "/usr/include/math.h" 1 3
# 29 "/usr/include/math.h" 3




# 1 "/usr/include/bits/huge_val.h" 1 3
# 34 "/usr/include/math.h" 2 3






# 1 "/usr/include/bits/mathdef.h" 1 3
# 41 "/usr/include/math.h" 2 3
# 65 "/usr/include/math.h" 3
# 1 "/usr/include/bits/mathcalls.h" 1 3
# 53 "/usr/include/bits/mathcalls.h" 3


extern double acos (double __x) ; extern double __acos (double __x) ;

extern double asin (double __x) ; extern double __asin (double __x) ;

extern double atan (double __x) ; extern double __atan (double __x) ;

extern double atan2 (double __y, double __x) ; extern double __atan2 (double __y, double __x) ;


extern double cos (double __x) ; extern double __cos (double __x) ;

extern double sin (double __x) ; extern double __sin (double __x) ;

extern double tan (double __x) ; extern double __tan (double __x) ;




extern double cosh (double __x) ; extern double __cosh (double __x) ;

extern double sinh (double __x) ; extern double __sinh (double __x) ;

extern double tanh (double __x) ; extern double __tanh (double __x) ;

# 87 "/usr/include/bits/mathcalls.h" 3


extern double acosh (double __x) ; extern double __acosh (double __x) ;

extern double asinh (double __x) ; extern double __asinh (double __x) ;

extern double atanh (double __x) ; extern double __atanh (double __x) ;







extern double exp (double __x) ; extern double __exp (double __x) ;


extern double frexp (double __x, int *__exponent) ; extern double __frexp (double __x, int *__exponent) ;


extern double ldexp (double __x, int __exponent) ; extern double __ldexp (double __x, int __exponent) ;


extern double log (double __x) ; extern double __log (double __x) ;


extern double log10 (double __x) ; extern double __log10 (double __x) ;


extern double modf (double __x, double *__iptr) ; extern double __modf (double __x, double *__iptr) ;

# 127 "/usr/include/bits/mathcalls.h" 3


extern double expm1 (double __x) ; extern double __expm1 (double __x) ;


extern double log1p (double __x) ; extern double __log1p (double __x) ;


extern double logb (double __x) ; extern double __logb (double __x) ;

# 152 "/usr/include/bits/mathcalls.h" 3


extern double pow (double __x, double __y) ; extern double __pow (double __x, double __y) ;


extern double sqrt (double __x) ; extern double __sqrt (double __x) ;





extern double hypot (double __x, double __y) ; extern double __hypot (double __x, double __y) ;






extern double cbrt (double __x) ; extern double __cbrt (double __x) ;








extern double ceil (double __x) __attribute__ ((__const__)); extern double __ceil (double __x) __attribute__ ((__const__));


extern double fabs (double __x) __attribute__ ((__const__)); extern double __fabs (double __x) __attribute__ ((__const__));


extern double floor (double __x) __attribute__ ((__const__)); extern double __floor (double __x) __attribute__ ((__const__));


extern double fmod (double __x, double __y) ; extern double __fmod (double __x, double __y) ;




extern int __isinf (double __value) __attribute__ ((__const__));


extern int __finite (double __value) __attribute__ ((__const__));





extern int isinf (double __value) __attribute__ ((__const__));


extern int finite (double __value) __attribute__ ((__const__));


extern double drem (double __x, double __y) ; extern double __drem (double __x, double __y) ;



extern double significand (double __x) ; extern double __significand (double __x) ;





extern double copysign (double __x, double __y) __attribute__ ((__const__)); extern double __copysign (double __x, double __y) __attribute__ ((__const__));

# 231 "/usr/include/bits/mathcalls.h" 3
extern int __isnan (double __value) __attribute__ ((__const__));



extern int isnan (double __value) __attribute__ ((__const__));


extern double j0 (double) ; extern double __j0 (double) ;
extern double j1 (double) ; extern double __j1 (double) ;
extern double jn (int, double) ; extern double __jn (int, double) ;
extern double y0 (double) ; extern double __y0 (double) ;
extern double y1 (double) ; extern double __y1 (double) ;
extern double yn (int, double) ; extern double __yn (int, double) ;






extern double erf (double) ; extern double __erf (double) ;
extern double erfc (double) ; extern double __erfc (double) ;
extern double lgamma (double) ; extern double __lgamma (double) ;

# 265 "/usr/include/bits/mathcalls.h" 3
extern double gamma (double) ; extern double __gamma (double) ;






extern double lgamma_r (double, int *__signgamp) ; extern double __lgamma_r (double, int *__signgamp) ;







extern double rint (double __x) ; extern double __rint (double __x) ;


extern double nextafter (double __x, double __y) __attribute__ ((__const__)); extern double __nextafter (double __x, double __y) __attribute__ ((__const__));





extern double remainder (double __x, double __y) ; extern double __remainder (double __x, double __y) ;



extern double scalbn (double __x, int __n) ; extern double __scalbn (double __x, int __n) ;



extern int ilogb (double __x) ; extern int __ilogb (double __x) ;
# 66 "/usr/include/math.h" 2 3
# 88 "/usr/include/math.h" 3
# 1 "/usr/include/bits/mathcalls.h" 1 3
# 53 "/usr/include/bits/mathcalls.h" 3


extern float acosf (float __x) ; extern float __acosf (float __x) ;

extern float asinf (float __x) ; extern float __asinf (float __x) ;

extern float atanf (float __x) ; extern float __atanf (float __x) ;

extern float atan2f (float __y, float __x) ; extern float __atan2f (float __y, float __x) ;


extern float cosf (float __x) ; extern float __cosf (float __x) ;

extern float sinf (float __x) ; extern float __sinf (float __x) ;

extern float tanf (float __x) ; extern float __tanf (float __x) ;




extern float coshf (float __x) ; extern float __coshf (float __x) ;

extern float sinhf (float __x) ; extern float __sinhf (float __x) ;

extern float tanhf (float __x) ; extern float __tanhf (float __x) ;

# 87 "/usr/include/bits/mathcalls.h" 3


extern float acoshf (float __x) ; extern float __acoshf (float __x) ;

extern float asinhf (float __x) ; extern float __asinhf (float __x) ;

extern float atanhf (float __x) ; extern float __atanhf (float __x) ;







extern float expf (float __x) ; extern float __expf (float __x) ;


extern float frexpf (float __x, int *__exponent) ; extern float __frexpf (float __x, int *__exponent) ;


extern float ldexpf (float __x, int __exponent) ; extern float __ldexpf (float __x, int __exponent) ;


extern float logf (float __x) ; extern float __logf (float __x) ;


extern float log10f (float __x) ; extern float __log10f (float __x) ;


extern float modff (float __x, float *__iptr) ; extern float __modff (float __x, float *__iptr) ;

# 127 "/usr/include/bits/mathcalls.h" 3


extern float expm1f (float __x) ; extern float __expm1f (float __x) ;


extern float log1pf (float __x) ; extern float __log1pf (float __x) ;


extern float logbf (float __x) ; extern float __logbf (float __x) ;

# 152 "/usr/include/bits/mathcalls.h" 3


extern float powf (float __x, float __y) ; extern float __powf (float __x, float __y) ;


extern float sqrtf (float __x) ; extern float __sqrtf (float __x) ;





extern float hypotf (float __x, float __y) ; extern float __hypotf (float __x, float __y) ;






extern float cbrtf (float __x) ; extern float __cbrtf (float __x) ;








extern float ceilf (float __x) __attribute__ ((__const__)); extern float __ceilf (float __x) __attribute__ ((__const__));


extern float fabsf (float __x) __attribute__ ((__const__)); extern float __fabsf (float __x) __attribute__ ((__const__));


extern float floorf (float __x) __attribute__ ((__const__)); extern float __floorf (float __x) __attribute__ ((__const__));


extern float fmodf (float __x, float __y) ; extern float __fmodf (float __x, float __y) ;




extern int __isinff (float __value) __attribute__ ((__const__));


extern int __finitef (float __value) __attribute__ ((__const__));





extern int isinff (float __value) __attribute__ ((__const__));


extern int finitef (float __value) __attribute__ ((__const__));


extern float dremf (float __x, float __y) ; extern float __dremf (float __x, float __y) ;



extern float significandf (float __x) ; extern float __significandf (float __x) ;





extern float copysignf (float __x, float __y) __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) __attribute__ ((__const__));

# 231 "/usr/include/bits/mathcalls.h" 3
extern int __isnanf (float __value) __attribute__ ((__const__));



extern int isnanf (float __value) __attribute__ ((__const__));


extern float j0f (float) ; extern float __j0f (float) ;
extern float j1f (float) ; extern float __j1f (float) ;
extern float jnf (int, float) ; extern float __jnf (int, float) ;
extern float y0f (float) ; extern float __y0f (float) ;
extern float y1f (float) ; extern float __y1f (float) ;
extern float ynf (int, float) ; extern float __ynf (int, float) ;






extern float erff (float) ; extern float __erff (float) ;
extern float erfcf (float) ; extern float __erfcf (float) ;
extern float lgammaf (float) ; extern float __lgammaf (float) ;

# 265 "/usr/include/bits/mathcalls.h" 3
extern float gammaf (float) ; extern float __gammaf (float) ;






extern float lgammaf_r (float, int *__signgamp) ; extern float __lgammaf_r (float, int *__signgamp) ;







extern float rintf (float __x) ; extern float __rintf (float __x) ;


extern float nextafterf (float __x, float __y) __attribute__ ((__const__)); extern float __nextafterf (float __x, float __y) __attribute__ ((__const__));





extern float remainderf (float __x, float __y) ; extern float __remainderf (float __x, float __y) ;



extern float scalbnf (float __x, int __n) ; extern float __scalbnf (float __x, int __n) ;



extern int ilogbf (float __x) ; extern int __ilogbf (float __x) ;
# 89 "/usr/include/math.h" 2 3
# 109 "/usr/include/math.h" 3
# 1 "/usr/include/bits/mathcalls.h" 1 3
# 53 "/usr/include/bits/mathcalls.h" 3


extern long double acosl (long double __x) ; extern long double __acosl (long double __x) ;

extern long double asinl (long double __x) ; extern long double __asinl (long double __x) ;

extern long double atanl (long double __x) ; extern long double __atanl (long double __x) ;

extern long double atan2l (long double __y, long double __x) ; extern long double __atan2l (long double __y, long double __x) ;


extern long double cosl (long double __x) ; extern long double __cosl (long double __x) ;

extern long double sinl (long double __x) ; extern long double __sinl (long double __x) ;

extern long double tanl (long double __x) ; extern long double __tanl (long double __x) ;




extern long double coshl (long double __x) ; extern long double __coshl (long double __x) ;

extern long double sinhl (long double __x) ; extern long double __sinhl (long double __x) ;

extern long double tanhl (long double __x) ; extern long double __tanhl (long double __x) ;

# 87 "/usr/include/bits/mathcalls.h" 3


extern long double acoshl (long double __x) ; extern long double __acoshl (long double __x) ;

extern long double asinhl (long double __x) ; extern long double __asinhl (long double __x) ;

extern long double atanhl (long double __x) ; extern long double __atanhl (long double __x) ;







extern long double expl (long double __x) ; extern long double __expl (long double __x) ;


extern long double frexpl (long double __x, int *__exponent) ; extern long double __frexpl (long double __x, int *__exponent) ;


extern long double ldexpl (long double __x, int __exponent) ; extern long double __ldexpl (long double __x, int __exponent) ;


extern long double logl (long double __x) ; extern long double __logl (long double __x) ;


extern long double log10l (long double __x) ; extern long double __log10l (long double __x) ;


extern long double modfl (long double __x, long double *__iptr) ; extern long double __modfl (long double __x, long double *__iptr) ;

# 127 "/usr/include/bits/mathcalls.h" 3


extern long double expm1l (long double __x) ; extern long double __expm1l (long double __x) ;


extern long double log1pl (long double __x) ; extern long double __log1pl (long double __x) ;


extern long double logbl (long double __x) ; extern long double __logbl (long double __x) ;

# 152 "/usr/include/bits/mathcalls.h" 3


extern long double powl (long double __x, long double __y) ; extern long double __powl (long double __x, long double __y) ;


extern long double sqrtl (long double __x) ; extern long double __sqrtl (long double __x) ;





extern long double hypotl (long double __x, long double __y) ; extern long double __hypotl (long double __x, long double __y) ;






extern long double cbrtl (long double __x) ; extern long double __cbrtl (long double __x) ;








extern long double ceill (long double __x) __attribute__ ((__const__)); extern long double __ceill (long double __x) __attribute__ ((__const__));


extern long double fabsl (long double __x) __attribute__ ((__const__)); extern long double __fabsl (long double __x) __attribute__ ((__const__));


extern long double floorl (long double __x) __attribute__ ((__const__)); extern long double __floorl (long double __x) __attribute__ ((__const__));


extern long double fmodl (long double __x, long double __y) ; extern long double __fmodl (long double __x, long double __y) ;




extern int __isinfl (long double __value) __attribute__ ((__const__));


extern int __finitel (long double __value) __attribute__ ((__const__));





extern int isinfl (long double __value) __attribute__ ((__const__));


extern int finitel (long double __value) __attribute__ ((__const__));


extern long double dreml (long double __x, long double __y) ; extern long double __dreml (long double __x, long double __y) ;



extern long double significandl (long double __x) ; extern long double __significandl (long double __x) ;





extern long double copysignl (long double __x, long double __y) __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) __attribute__ ((__const__));

# 231 "/usr/include/bits/mathcalls.h" 3
extern int __isnanl (long double __value) __attribute__ ((__const__));



extern int isnanl (long double __value) __attribute__ ((__const__));


extern long double j0l (long double) ; extern long double __j0l (long double) ;
extern long double j1l (long double) ; extern long double __j1l (long double) ;
extern long double jnl (int, long double) ; extern long double __jnl (int, long double) ;
extern long double y0l (long double) ; extern long double __y0l (long double) ;
extern long double y1l (long double) ; extern long double __y1l (long double) ;
extern long double ynl (int, long double) ; extern long double __ynl (int, long double) ;






extern long double erfl (long double) ; extern long double __erfl (long double) ;
extern long double erfcl (long double) ; extern long double __erfcl (long double) ;
extern long double lgammal (long double) ; extern long double __lgammal (long double) ;

# 265 "/usr/include/bits/mathcalls.h" 3
extern long double gammal (long double) ; extern long double __gammal (long double) ;






extern long double lgammal_r (long double, int *__signgamp) ; extern long double __lgammal_r (long double, int *__signgamp) ;







extern long double rintl (long double __x) ; extern long double __rintl (long double __x) ;


extern long double nextafterl (long double __x, long double __y) __attribute__ ((__const__)); extern long double __nextafterl (long double __x, long double __y) __attribute__ ((__const__));





extern long double remainderl (long double __x, long double __y) ; extern long double __remainderl (long double __x, long double __y) ;



extern long double scalbnl (long double __x, int __n) ; extern long double __scalbnl (long double __x, int __n) ;



extern int ilogbl (long double __x) ; extern int __ilogbl (long double __x) ;
# 110 "/usr/include/math.h" 2 3
# 125 "/usr/include/math.h" 3
extern int signgam;
# 252 "/usr/include/math.h" 3
typedef enum
{
  _IEEE_ = -1,
  _SVID_,
  _XOPEN_,
  _POSIX_,
  _ISOC_
} _LIB_VERSION_TYPE;




extern _LIB_VERSION_TYPE _LIB_VERSION;
# 277 "/usr/include/math.h" 3
struct exception

  {
    int type;
    char *name;
    double arg1;
    double arg2;
    double retval;
  };




extern int matherr (struct exception *__exc);
# 362 "/usr/include/math.h" 3
# 1 "/usr/include/bits/mathinline.h" 1 3
# 291 "/usr/include/bits/mathinline.h" 3
extern __inline double __sgn (double) ; extern __inline double __sgn (double __x) { return __x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0); } extern __inline float __sgnf (float) ; extern __inline float __sgnf (float __x) { return __x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0); } extern __inline long double __sgnl (long double) ; extern __inline long double __sgnl (long double __x) { return __x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0); }
# 425 "/usr/include/bits/mathinline.h" 3
extern __inline double atan2 (double __y, double __x) { register long double __value; __asm __volatile__ ("fpatan" : "=t" (__value) : "0" (__x), "u" (__y) : "st(1)"); return __value; } extern __inline float atan2f (float __y, float __x) { register long double __value; __asm __volatile__ ("fpatan" : "=t" (__value) : "0" (__x), "u" (__y) : "st(1)"); return __value; } extern __inline long double atan2l (long double __y, long double __x) { register long double __value; __asm __volatile__ ("fpatan" : "=t" (__value) : "0" (__x), "u" (__y) : "st(1)"); return __value; }
extern __inline long double __atan2l (long double __y, long double __x) { register long double __value; __asm __volatile__ ("fpatan" : "=t" (__value) : "0" (__x), "u" (__y) : "st(1)"); return __value; }


extern __inline double fmod (double __x, double __y) { register long double __value; __asm __volatile__ ("1:	fprem\n\t" "fnstsw	%%ax\n\t" "sahf\n\t" "jp	1b" : "=t" (__value) : "0" (__x), "u" (__y) : "ax", "cc"); return __value; } extern __inline float fmodf (float __x, float __y) { register long double __value; __asm __volatile__ ("1:	fprem\n\t" "fnstsw	%%ax\n\t" "sahf\n\t" "jp	1b" : "=t" (__value) : "0" (__x), "u" (__y) : "ax", "cc"); return __value; } extern __inline long double fmodl (long double __x, long double __y) { register long double __value; __asm __volatile__ ("1:	fprem\n\t" "fnstsw	%%ax\n\t" "sahf\n\t" "jp	1b" : "=t" (__value) : "0" (__x), "u" (__y) : "ax", "cc"); return __value; }
# 440 "/usr/include/bits/mathinline.h" 3
extern __inline double sqrt (double __x) { register double __result; __asm __volatile__ ("fsqrt" : "=t" (__result) : "0" (__x)); return __result; } extern __inline float sqrtf (float __x) { register float __result; __asm __volatile__ ("fsqrt" : "=t" (__result) : "0" (__x)); return __result; } extern __inline long double sqrtl (long double __x) { register long double __result; __asm __volatile__ ("fsqrt" : "=t" (__result) : "0" (__x)); return __result; }
extern __inline long double __sqrtl (long double __x) { register long double __result; __asm __volatile__ ("fsqrt" : "=t" (__result) : "0" (__x)); return __result; }


extern __inline double fabs (double __x) { return __builtin_fabs (__x); }
extern __inline float fabsf (float __x) { return __builtin_fabsf (__x); }
extern __inline long double fabsl (long double __x) { return __builtin_fabsl (__x); }
extern __inline long double __fabsl (long double __x) { return __builtin_fabsl (__x); }
# 466 "/usr/include/bits/mathinline.h" 3
extern __inline double atan (double __x) { register double __result; __asm __volatile__ ("fld1; fpatan" : "=t" (__result) : "0" (__x) : "st(1)"); return __result; } extern __inline float atanf (float __x) { register float __result; __asm __volatile__ ("fld1; fpatan" : "=t" (__result) : "0" (__x) : "st(1)"); return __result; } extern __inline long double atanl (long double __x) { register long double __result; __asm __volatile__ ("fld1; fpatan" : "=t" (__result) : "0" (__x) : "st(1)"); return __result; }

extern __inline long double __sgn1l (long double) ; extern __inline long double __sgn1l (long double __x) { __extension__ union { long double __xld; unsigned int __xi[3]; } __n = { __xld: __x }; __n.__xi[2] = (__n.__xi[2] & 0x8000) | 0x3fff; __n.__xi[1] = 0x80000000; __n.__xi[0] = 0; return __n.__xld; }
# 492 "/usr/include/bits/mathinline.h" 3
extern __inline double floor (double __x) { register long double __value; __volatile unsigned short int __cw; __volatile unsigned short int __cwtmp; __asm __volatile ("fnstcw %0" : "=m" (__cw)); __cwtmp = (__cw & 0xf3ff) | 0x0400; __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); __asm __volatile ("fldcw %0" : : "m" (__cw)); return __value; } extern __inline float floorf (float __x) { register long double __value; __volatile unsigned short int __cw; __volatile unsigned short int __cwtmp; __asm __volatile ("fnstcw %0" : "=m" (__cw)); __cwtmp = (__cw & 0xf3ff) | 0x0400; __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); __asm __volatile ("fldcw %0" : : "m" (__cw)); return __value; } extern __inline long double floorl (long double __x) { register long double __value; __volatile unsigned short int __cw; __volatile unsigned short int __cwtmp; __asm __volatile ("fnstcw
  %0" : "=m" (__cw)); __cwtmp = (__cw & 0xf3ff) | 0x0400; __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); __asm __volatile ("fldcw %0" : : "m" (__cw)); return __value; }
# 503 "/usr/include/bits/mathinline.h" 3
extern __inline double ceil (double __x) { register long double __value; __volatile unsigned short int __cw; __volatile unsigned short int __cwtmp; __asm __volatile ("fnstcw %0" : "=m" (__cw)); __cwtmp = (__cw & 0xf3ff) | 0x0800; __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); __asm __volatile ("fldcw %0" : : "m" (__cw)); return __value; } extern __inline float ceilf (float __x) { register long double __value; __volatile unsigned short int __cw; __volatile unsigned short int __cwtmp; __asm __volatile ("fnstcw %0" : "=m" (__cw)); __cwtmp = (__cw & 0xf3ff) | 0x0800; __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); __asm __volatile ("fldcw %0" : : "m" (__cw)); return __value; } extern __inline long double ceill (long double __x) { register long double __value; __volatile unsigned short int __cw; __volatile unsigned short int __cwtmp; __asm __volatile ("fnstcw %0
 " : "=m" (__cw)); __cwtmp = (__cw & 0xf3ff) | 0x0800; __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); __asm __volatile ("fldcw %0" : : "m" (__cw)); return __value; }
# 521 "/usr/include/bits/mathinline.h" 3
extern __inline double
ldexp (double __x, int __y)
{
  register long double __value; __asm __volatile__ ("fscale" : "=t" (__value) : "0" (__x), "u" ((long double) __y)); return __value;
}
# 539 "/usr/include/bits/mathinline.h" 3
extern __inline double log1p (double __x) { register long double __value; if (__fabsl (__x) >= 1.0 - 0.5 * 1.41421356237309504880L) __value = logl (1.0 + __x); else __asm __volatile__ ("fldln2\n\t" "fxch\n\t" "fyl2xp1" : "=t" (__value) : "0" (__x) : "st(1)"); return __value; } extern __inline float log1pf (float __x) { register long double __value; if (__fabsl (__x) >= 1.0 - 0.5 * 1.41421356237309504880L) __value = logl (1.0 + __x); else __asm __volatile__ ("fldln2\n\t" "fxch\n\t" "fyl2xp1" : "=t" (__value) : "0" (__x) : "st(1)"); return __value; } extern __inline long double log1pl (long double __x) { register long double __value; if (__fabsl (__x) >= 1.0 - 0.5 * 1.41421356237309504880L) __value = logl (1.0 + __x); else __asm __volatile__ ("fldln2\n\t" "fxch\n\t" "fyl2xp1" : "=t" (__value) : "0" (__x) : "st(1)"); return __value; }
# 553 "/usr/include/bits/mathinline.h" 3
extern __inline double asinh (double __x) { register long double __y = __fabsl (__x); return (log1pl (__y * __y / (__sqrtl (__y * __y + 1.0) + 1.0) + __y) * __sgn1l (__x)); } extern __inline float asinhf (float __x) { register long double __y = __fabsl (__x); return (log1pl (__y * __y / (__sqrtl (__y * __y + 1.0) + 1.0) + __y) * __sgn1l (__x)); } extern __inline long double asinhl (long double __x) { register long double __y = __fabsl (__x); return (log1pl (__y * __y / (__sqrtl (__y * __y + 1.0) + 1.0) + __y) * __sgn1l (__x)); }




extern __inline double acosh (double __x) { return logl (__x + __sqrtl (__x - 1.0) * __sqrtl (__x + 1.0)); } extern __inline float acoshf (float __x) { return logl (__x + __sqrtl (__x - 1.0) * __sqrtl (__x + 1.0)); } extern __inline long double acoshl (long double __x) { return logl (__x + __sqrtl (__x - 1.0) * __sqrtl (__x + 1.0)); }


extern __inline double atanh (double __x) { register long double __y = __fabsl (__x); return -0.5 * log1pl (-(__y + __y) / (1.0 + __y)) * __sgn1l (__x); } extern __inline float atanhf (float __x) { register long double __y = __fabsl (__x); return -0.5 * log1pl (-(__y + __y) / (1.0 + __y)) * __sgn1l (__x); } extern __inline long double atanhl (long double __x) { register long double __y = __fabsl (__x); return -0.5 * log1pl (-(__y + __y) / (1.0 + __y)) * __sgn1l (__x); }




extern __inline double hypot (double __x, double __y) { return __sqrtl (__x * __x + __y * __y); } extern __inline float hypotf (float __x, float __y) { return __sqrtl (__x * __x + __y * __y); } extern __inline long double hypotl (long double __x, long double __y) { return __sqrtl (__x * __x + __y * __y); }

extern __inline double logb (double __x) { register long double __value; register long double __junk; __asm __volatile__ ("fxtract\n\t" : "=t" (__junk), "=u" (__value) : "0" (__x)); return __value; } extern __inline float logbf (float __x) { register long double __value; register long double __junk; __asm __volatile__ ("fxtract\n\t" : "=t" (__junk), "=u" (__value) : "0" (__x)); return __value; } extern __inline long double logbl (long double __x) { register long double __value; register long double __junk; __asm __volatile__ ("fxtract\n\t" : "=t" (__junk), "=u" (__value) : "0" (__x)); return __value; }
# 652 "/usr/include/bits/mathinline.h" 3
extern __inline double drem (double __x, double __y) { register double __value; register int __clobbered; __asm __volatile__ ("1:	fprem1\n\t" "fstsw	%%ax\n\t" "sahf\n\t" "jp	1b" : "=t" (__value), "=&a" (__clobbered) : "0" (__x), "u" (__y) : "cc"); return __value; } extern __inline float dremf (float __x, float __y) { register double __value; register int __clobbered; __asm __volatile__ ("1:	fprem1\n\t" "fstsw	%%ax\n\t" "sahf\n\t" "jp	1b" : "=t" (__value), "=&a" (__clobbered) : "0" (__x), "u" (__y) : "cc"); return __value; } extern __inline long double dreml (long double __x, long double __y) { register double __value; register int __clobbered; __asm __volatile__ ("1:	fprem1\n\t" "fstsw	%%ax\n\t" "sahf\n\t" "jp	1b" : "=t" (__value), "=&a" (__clobbered) : "0" (__x), "u" (__y) : "cc"); return __value; }
# 665 "/usr/include/bits/mathinline.h" 3
extern __inline int
__finite (double __x)
{
  return (__extension__
          (((((union { double __d; int __i[2]; }) {__d: __x}).__i[1]
             | 0x800fffffu) + 1) >> 31));
}
# 363 "/usr/include/math.h" 2 3
# 423 "/usr/include/math.h" 3

# 38 "math_.h" 2
# 27 "gsmatrix.c" 2
# 1 "gx.h" 1
# 30 "gx.h"
# 1 "stdio_.h" 1
# 48 "stdio_.h"
int unlink(const char *);
# 31 "gx.h" 2
# 1 "gserror.h" 1
# 32 "gx.h" 2
# 1 "gsio.h" 1
# 31 "gsio.h"
extern FILE *gs_stdin, *gs_stdout, *gs_stderr;
# 33 "gx.h" 2
# 1 "gstypes.h" 1
# 36 "gstypes.h"
typedef ulong gs_id;
# 45 "gstypes.h"
typedef struct gs_string_s {
    byte *data;
    uint size;
} gs_string;
typedef struct gs_const_string_s {
    const byte *data;
    uint size;
} gs_const_string;




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_log2_scale_point_s {
    int x, y;
} gs_log2_scale_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;
# 34 "gx.h" 2
# 1 "gsmemory.h" 1
# 43 "gsmemory.h"
# 1 "gsmemraw.h" 1
# 46 "gsmemraw.h"
typedef struct gs_memory_status_s {





    ulong allocated;




    ulong used;
} gs_memory_status_t;


typedef struct gs_raw_memory_s gs_raw_memory_t;
# 168 "gsmemraw.h"
typedef struct gs_raw_memory_procs_s {
    byte *(*alloc_bytes_immovable)(gs_raw_memory_t *mem,uint nbytes,client_name_t cname); void *(*resize_object)(gs_raw_memory_t *mem,void *obj,uint new_num_elements,client_name_t cname); void (*free_object)(gs_raw_memory_t *mem,void *data,client_name_t cname); void (*status)(gs_raw_memory_t *mem,gs_memory_status_t *status); void (*free_all)(gs_raw_memory_t *mem,uint free_mask,client_name_t cname); void (*consolidate_free)(gs_raw_memory_t *mem);
} gs_raw_memory_procs_t;





struct gs_raw_memory_s {
    gs_raw_memory_procs_t procs;
};
# 44 "gsmemory.h" 2


typedef struct gs_memory_struct_type_s gs_memory_struct_type_t;
typedef const gs_memory_struct_type_t *gs_memory_type_ptr_t;



typedef struct gs_memory_s gs_memory_t;


typedef struct gs_ptr_procs_s gs_ptr_procs_t;
typedef const gs_ptr_procs_t *gs_ptr_type_t;


typedef struct gs_gc_root_s gs_gc_root_t;



typedef client_name_t struct_name_t;


uint gs_struct_type_size(gs_memory_type_ptr_t);


struct_name_t gs_struct_type_name(gs_memory_type_ptr_t);







typedef struct gs_memory_procs_s {

    byte *(*alloc_bytes_immovable)(gs_memory_t *mem,uint nbytes,client_name_t cname); void *(*resize_object)(gs_memory_t *mem,void *obj,uint new_num_elements,client_name_t cname); void (*free_object)(gs_memory_t *mem,void *data,client_name_t cname); void (*status)(gs_memory_t *mem,gs_memory_status_t *status); void (*free_all)(gs_memory_t *mem,uint free_mask,client_name_t cname); void (*consolidate_free)(gs_memory_t *mem);
# 102 "gsmemory.h"
    byte *(*alloc_bytes)(gs_memory_t *mem,uint nbytes,client_name_t cname);
# 113 "gsmemory.h"
    void *(*alloc_struct)(gs_memory_t *mem,gs_memory_type_ptr_t pstype,client_name_t cname);


    void *(*alloc_struct_immovable)(gs_memory_t *mem,gs_memory_type_ptr_t pstype,client_name_t cname);
# 127 "gsmemory.h"
    byte *(*alloc_byte_array)(gs_memory_t *mem,uint num_elements,uint elt_size,client_name_t cname);


    byte *(*alloc_byte_array_immovable)(gs_memory_t *mem,uint num_elements,uint elt_size,client_name_t cname);
# 141 "gsmemory.h"
    void *(*alloc_struct_array)(gs_memory_t *mem,uint num_elements,gs_memory_type_ptr_t pstype,client_name_t cname);


    void *(*alloc_struct_array_immovable)(gs_memory_t *mem,uint num_elements,gs_memory_type_ptr_t pstype,client_name_t cname);
# 154 "gsmemory.h"
    uint (*object_size)(gs_memory_t *mem,const void *obj);
# 166 "gsmemory.h"
    gs_memory_type_ptr_t (*object_type)(gs_memory_t *mem,const void *obj);
# 176 "gsmemory.h"
    byte *(*alloc_string)(gs_memory_t *mem,uint nbytes,client_name_t cname);


    byte *(*alloc_string_immovable)(gs_memory_t *mem,uint nbytes,client_name_t cname);
# 190 "gsmemory.h"
    byte *(*resize_string)(gs_memory_t *mem,byte *data,uint old_num,uint new_num,client_name_t cname);
# 201 "gsmemory.h"
    void (*free_string)(gs_memory_t *mem,byte *data,uint nbytes,client_name_t cname);
# 215 "gsmemory.h"
    int (*register_root)(gs_memory_t *mem,gs_gc_root_t *root,gs_ptr_type_t ptype,void **pp,client_name_t cname);
# 226 "gsmemory.h"
    void (*unregister_root)(gs_memory_t *mem,gs_gc_root_t *root,client_name_t cname);
# 241 "gsmemory.h"
    void (*enable_free)(gs_memory_t *mem,bool enable);

} gs_memory_procs_t;


int gs_register_struct_root(gs_memory_t *mem,gs_gc_root_t *root,void **pp,client_name_t cname);



void gs_ignore_free_object(gs_memory_t *mem,void *data,client_name_t cname);
void gs_ignore_free_string(gs_memory_t *mem,byte *data,uint nbytes,client_name_t cname);


void gs_ignore_consolidate_free(gs_memory_t *mem);







void *gs_raw_alloc_struct_immovable(gs_raw_memory_t * rmem,gs_memory_type_ptr_t pstype,client_name_t cname);
# 272 "gsmemory.h"
struct gs_memory_s {
    gs_memory_procs_t procs;
};
# 35 "gx.h" 2
# 1 "gdebug.h" 1
# 61 "gdebug.h"
extern char gs_debug[128];
bool gs_debug_c(int);
# 71 "gdebug.h"
extern FILE *gs_debug_out;
# 125 "gdebug.h"
void debug_dump_bytes(const byte * from,const byte * to,const char *msg);

void debug_dump_bitmap(const byte * from,uint raster,uint height,const char *msg);

void debug_print_string(const byte * str,uint len);
# 36 "gx.h" 2






typedef struct gs_imager_state_s gs_imager_state;




typedef struct gs_state_s gs_state;
# 28 "gsmatrix.c" 2
# 1 "gserrors.h" 1
# 29 "gsmatrix.c" 2
# 1 "gxfarith.h" 1
# 30 "gxfarith.h"
# 1 "obj/gconfigv.h" 1
# 31 "gxfarith.h" 2
# 1 "gxarith.h" 1
# 35 "gxarith.h"
int imod(int m,int n);


int igcd(int x,int y);
# 32 "gxfarith.h" 2
# 135 "gxfarith.h"
double gs_sin_degrees(double angle);
double gs_cos_degrees(double angle);
typedef struct gs_sincos_s {
    double sin, cos;
    bool orthogonal;
} gs_sincos_t;
void gs_sincos_degrees(double angle,gs_sincos_t * psincos);
# 30 "gsmatrix.c" 2
# 1 "gxfixed.h" 1
# 35 "gxfixed.h"
typedef long fixed;
typedef ulong ufixed;
# 238 "gxfixed.h"
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;
# 31 "gsmatrix.c" 2
# 1 "gxmatrix.h" 1
# 30 "gxmatrix.h"
# 1 "gsmatrix.h" 1
# 36 "gsmatrix.h"
struct gs_matrix_s {
    float xx, xy, yx, yy, tx, ty;
};



typedef struct gs_matrix_s gs_matrix;
# 60 "gsmatrix.h"
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_translate(const gs_matrix *,floatp,floatp,gs_matrix *),
      gs_matrix_scale(const gs_matrix *,floatp,floatp,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_points_bbox(const gs_point[4],gs_rect *), gs_bbox_transform_only(const gs_rect *,const gs_matrix *,gs_point[4]),
      gs_bbox_transform(const gs_rect *,const gs_matrix *,gs_rect *),
      gs_bbox_transform_inverse(const gs_rect *,const gs_matrix *,gs_rect *);
# 31 "gxmatrix.h" 2
# 39 "gxmatrix.h"
typedef struct gs_matrix_fixed_s {
    float xx, xy, yx, yy, tx, ty;
    fixed tx_fixed, ty_fixed;
    bool txy_fixed_valid;
} gs_matrix_fixed;


int gs_point_transform2fixed(const gs_matrix_fixed *,floatp,floatp,gs_fixed_point *);

int gs_distance_transform2fixed(const gs_matrix_fixed *,floatp,floatp,gs_fixed_point *);
# 57 "gxmatrix.h"
typedef struct {
    long l;
    fixed f;
} coeff1;
typedef struct {
    coeff1 xx, xy, yx, yy;
    int skewed;
    int shift;
    int max_bits;
    fixed round;
} fixed_coeff;
# 32 "gsmatrix.c" 2


static const gs_matrix gs_identity_matrix =
{(float)(1), (float)(0), (float)(0), (float)(1), (float)(0), (float)(0)};




void
gs_make_identity(gs_matrix * pmat)
{
    *pmat = gs_identity_matrix;
}


int
gs_make_translation(floatp dx, floatp dy, gs_matrix * pmat)
{
    *pmat = gs_identity_matrix;
    pmat->tx = dx;
    pmat->ty = dy;
    return 0;
}


int
gs_make_scaling(floatp sx, floatp sy, gs_matrix * pmat)
{
    *pmat = gs_identity_matrix;
    pmat->xx = sx;
    pmat->yy = sy;
    return 0;
}



int
gs_make_rotation(floatp ang, gs_matrix * pmat)
{
    gs_sincos_t sincos;

    gs_sincos_degrees(ang, &sincos);
    pmat->yy = pmat->xx = sincos.cos;
    pmat->xy = sincos.sin;
    pmat->yx = -sincos.sin;
    pmat->tx = pmat->ty = 0.0;
    return 0;
}






int
gs_matrix_multiply(const gs_matrix * pm1, const gs_matrix * pm2, gs_matrix * pmr)
{
    double xx1 = pm1->xx, yy1 = pm1->yy;
    double tx1 = pm1->tx, ty1 = pm1->ty;
    double xx2 = pm2->xx, yy2 = pm2->yy;
    double xy2 = pm2->xy, yx2 = pm2->yx;

    if ((((pm1)->xy) == 0.0 && ((pm1)->yx) == 0.0)) {
        pmr->tx = tx1 * xx2 + pm2->tx;
        pmr->ty = ty1 * yy2 + pm2->ty;
        if (((xy2) == 0.0))
            pmr->xy = 0;
        else
            pmr->xy = xx1 * xy2,
                pmr->ty += tx1 * xy2;
        pmr->xx = xx1 * xx2;
        if (((yx2) == 0.0))
            pmr->yx = 0;
        else
            pmr->yx = yy1 * yx2,
                pmr->tx += ty1 * yx2;
        pmr->yy = yy1 * yy2;
    } else {
        double xy1 = pm1->xy, yx1 = pm1->yx;

        pmr->xx = xx1 * xx2 + xy1 * yx2;
        pmr->xy = xx1 * xy2 + xy1 * yy2;
        pmr->yy = yx1 * xy2 + yy1 * yy2;
        pmr->yx = yx1 * xx2 + yy1 * yx2;
        pmr->tx = tx1 * xx2 + ty1 * yx2 + pm2->tx;
        pmr->ty = tx1 * xy2 + ty1 * yy2 + pm2->ty;
    }
    return 0;
}


int
gs_matrix_invert(const gs_matrix * pm, gs_matrix * pmr)
{

    if ((((pm)->xy) == 0.0 && ((pm)->yx) == 0.0)) {
        if (((pm->xx) == 0.0) || ((pm->yy) == 0.0))
            return ((-23));
        pmr->tx = -(pmr->xx = 1.0 / pm->xx) * pm->tx;
        pmr->xy = 0.0;
        pmr->yx = 0.0;
        pmr->ty = -(pmr->yy = 1.0 / pm->yy) * pm->ty;
    } else {
        double det = pm->xx * pm->yy - pm->xy * pm->yx;
        double mxx = pm->xx, mtx = pm->tx;

        if (det == 0)
            return ((-23));
        pmr->xx = pm->yy / det;
        pmr->xy = -pm->xy / det;
        pmr->yx = -pm->yx / det;
        pmr->yy = mxx / det;
        pmr->tx = -(mtx * pmr->xx + pm->ty * pmr->yx);
        pmr->ty = -(mtx * pmr->xy + pm->ty * pmr->yy);
    }
    return 0;
}


int
gs_matrix_translate(const gs_matrix * pm, floatp dx, floatp dy, gs_matrix * pmr)
{
    gs_point trans;
    int code = gs_distance_transform(dx, dy, pm, &trans);

    if (code < 0)
        return code;
    if (pmr != pm)
        *pmr = *pm;
    pmr->tx += trans.x;
    pmr->ty += trans.y;
    return 0;
}


int
gs_matrix_scale(const gs_matrix * pm, floatp sx, floatp sy, gs_matrix * pmr)
{
    pmr->xx = pm->xx * sx;
    pmr->xy = pm->xy * sx;
    pmr->yx = pm->yx * sy;
    pmr->yy = pm->yy * sy;
    if (pmr != pm) {
        pmr->tx = pm->tx;
        pmr->ty = pm->ty;
    }
    return 0;
}


int
gs_matrix_rotate(const gs_matrix * pm, floatp ang, gs_matrix * pmr)
{
    double mxx, mxy;
    gs_sincos_t sincos;

    gs_sincos_degrees(ang, &sincos);
    mxx = pm->xx, mxy = pm->xy;
    pmr->xx = sincos.cos * mxx + sincos.sin * pm->yx;
    pmr->xy = sincos.cos * mxy + sincos.sin * pm->yy;
    pmr->yx = sincos.cos * pm->yx - sincos.sin * mxx;
    pmr->yy = sincos.cos * pm->yy - sincos.sin * mxy;
    if (pmr != pm) {
        pmr->tx = pm->tx;
        pmr->ty = pm->ty;
    }
    return 0;
}







int
gs_point_transform(floatp x, floatp y, const gs_matrix * pmat,
                   gs_point * ppt)
{
    ppt->x = x * pmat->xx + pmat->tx;
    ppt->y = y * pmat->yy + pmat->ty;
    if (!((pmat->yx) == 0.0))
        ppt->x += y * pmat->yx;
    if (!((pmat->xy) == 0.0))
        ppt->y += x * pmat->xy;
    return 0;
}



int
gs_point_transform_inverse(floatp x, floatp y, const gs_matrix * pmat,
                           gs_point * ppt)
{
    if ((((pmat)->xy) == 0.0 && ((pmat)->yx) == 0.0)) {
        if (((pmat->xx) == 0.0) || ((pmat->yy) == 0.0))
            return ((-23));
        ppt->x = (x - pmat->tx) / pmat->xx;
        ppt->y = (y - pmat->ty) / pmat->yy;
        return 0;
    } else if ((((pmat)->xx) == 0.0 && ((pmat)->yy) == 0.0)) {
        if (((pmat->xy) == 0.0) || ((pmat->yx) == 0.0))
            return ((-23));
        ppt->x = (y - pmat->ty) / pmat->xy;
        ppt->y = (x - pmat->tx) / pmat->yx;
        return 0;
    } else {

        gs_matrix imat;
        int code = gs_matrix_invert(pmat, &imat);

        if (code < 0)
            return code;
        return gs_point_transform(x, y, &imat, ppt);
    }
}


int
gs_distance_transform(floatp dx, floatp dy, const gs_matrix * pmat,
                      gs_point * pdpt)
{
    pdpt->x = dx * pmat->xx;
    pdpt->y = dy * pmat->yy;
    if (!((pmat->yx) == 0.0))
        pdpt->x += dy * pmat->yx;
    if (!((pmat->xy) == 0.0))
        pdpt->y += dx * pmat->xy;
    return 0;
}



int
gs_distance_transform_inverse(floatp dx, floatp dy,
                              const gs_matrix * pmat, gs_point * pdpt)
{
    if ((((pmat)->xy) == 0.0 && ((pmat)->yx) == 0.0)) {
        if (((pmat->xx) == 0.0) || ((pmat->yy) == 0.0))
            return ((-23));
        pdpt->x = dx / pmat->xx;
        pdpt->y = dy / pmat->yy;
    } else if ((((pmat)->xx) == 0.0 && ((pmat)->yy) == 0.0)) {
        if (((pmat->xy) == 0.0) || ((pmat->yx) == 0.0))
            return ((-23));
        pdpt->x = dy / pmat->xy;
        pdpt->y = dx / pmat->yx;
    } else {
        double det = pmat->xx * pmat->yy - pmat->xy * pmat->yx;

        if (det == 0)
            return ((-23));
        pdpt->x = (dx * pmat->yy - dy * pmat->yx) / det;
        pdpt->y = (dy * pmat->xx - dx * pmat->xy) / det;
    }
    return 0;
}


int
gs_points_bbox(const gs_point pts[4], gs_rect * pbox)
{
# 303 "gsmatrix.c"
    { double min01, max01, min23, max23; if ( pts[0].x < pts[1].x ) min01 = pts[0].x, max01 = pts[1].x; else min01 = pts[1].x, max01 = pts[0].x; if ( pts[2].x < pts[3].x ) min23 = pts[2].x, max23 = pts[3].x; else min23 = pts[3].x, max23 = pts[2].x; pbox-
>Fix:

	Remove the "-msse2 -mfpmath=sse" options from the compile command:

	gcc `cat ./obj/cc.tr` -DDISPLAYGHOSTSCRIPT -DVERSION=\"0.5.10\" -DGS_VERSION=\"5.50\" -O2 -Wall -Wcast-align -Wstrict-prototypes -Wwrite-strings -fno-common -O3 -pipe -march=pentium4 -mmmx -fexpensive-optimizations -fschedule-insns2 -fomit-frame-pointer -funroll-loops -frerun-cse-after-loop -frerun-loop-opt -falign-functions=4 -DHAVE_TCPD_H -DHAVE_SYSLOG_H -I. -I./obj  -o ./obj/gsmatrix.o -c ./gsmatrix.c
>Release-Note:
>Audit-Trail:
>Unformatted:
 >p.x = (((min01) < (min23)) ? (min01) : (min23)); pbox->q.x = (((max01) > (max23)) ? (max01) : (max23)); };
 
     { double min01, max01, min23, max23; if ( pts[0].y < pts[1].y ) min01 = pts[0].y, max01 = pts[1].y; else min01 = pts[1].y, max01 = pts[0].y; if ( pts[2].y < pts[3].y ) min23 = pts[2].y, max23 = pts[3].y; else min23 = pts[3].y, max23 = pts[2].y; pbox- >p.y = (((min01) < (min23)) ? (min01) : (min23)); pbox->q.y = (((max01) > (max23)) ? (max01) : (max23)); };
 
 
 
     return 0;
 }
 
 
 
 static int
 bbox_transform_either_only(const gs_rect * pbox_in, const gs_matrix * pmat,
                            gs_point pts[4],
      int (*point_xform) (floatp,floatp,const gs_matrix *,gs_point *))
 {
     int code;
 
     if ((code = (*point_xform) (pbox_in->p.x, pbox_in->p.y, pmat, &pts[0])) < 0 ||
         (code = (*point_xform) (pbox_in->p.x, pbox_in->q.y, pmat, &pts[1])) < 0 ||
         (code = (*point_xform) (pbox_in->q.x, pbox_in->p.y, pmat, &pts[2])) < 0 ||
      (code = (*point_xform) (pbox_in->q.x, pbox_in->q.y, pmat, &pts[3])) < 0
         )
         do { } while (0);
     return code;
 }
 
 static int
 bbox_transform_either(const gs_rect * pbox_in, const gs_matrix * pmat,
                       gs_rect * pbox_out,
      int (*point_xform) (floatp,floatp,const gs_matrix *,gs_point *))
 {
     int code;
 # 344 "gsmatrix.c"
     gs_point pts[4];
 
     if ((code = bbox_transform_either_only(pbox_in, pmat, pts, point_xform)) < 0)
         return code;
     return gs_points_bbox(pts, pbox_out);
 }
 int
 gs_bbox_transform(const gs_rect * pbox_in, const gs_matrix * pmat,
                   gs_rect * pbox_out)
 {
     return bbox_transform_either(pbox_in, pmat, pbox_out,
                                  gs_point_transform);
 }
 int
 gs_bbox_transform_only(const gs_rect * pbox_in, const gs_matrix * pmat,
                        gs_point points[4])
 {
     return bbox_transform_either_only(pbox_in, pmat, points,
                                       gs_point_transform);
 }
 int
 gs_bbox_transform_inverse(const gs_rect * pbox_in, const gs_matrix * pmat,
                           gs_rect * pbox_out)
 {
     return bbox_transform_either(pbox_in, pmat, pbox_out,
                                  gs_point_transform_inverse);
 }
 
 
 
 
 
 
 int
 gs_point_transform2fixed(const gs_matrix_fixed * pmat,
                          floatp x, floatp y, gs_fixed_point * ppt)
 {
     fixed px, py, t;
     double dtemp;
     int code;
 
     if (!pmat->txy_fixed_valid) {
 
 
         gs_point fpt;
 
         gs_point_transform(x, y, (const gs_matrix *)pmat, &fpt);
         if (!(((fpt.x) >= -2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2)) && (fpt.x) < 2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2))) && ((fpt.y) >= -2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2)) && (fpt.y) < 2.0 * (1L << (((sizeof(fixed) * 8 - 12)) -  2)))))
             return ((-13));
         ppt->x = ((fixed)((fpt.x)*(float)(1<<12)));
         ppt->y = ((fixed)((fpt.y)*(float)(1<<12)));
         return 0;
     }
     if (!((pmat->xy) == 0.0)) {
         if ((code = (dtemp = (y) * (pmat->yx), (((dtemp) >= -2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2)) && (dtemp) < 2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2))) ? (px = ((fixed)((dtemp)*(float)(1<<12))), 0) : ((-13))))) < 0 ||
             (code = (dtemp = (x) * (pmat->xy), (((dtemp) >= -2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2)) && (dtemp) < 2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2))) ? (py = ((fixed)((dtemp)*(float)(1<<12))), 0) : ((-13))))) < 0
             )
             return code;
         if (!((pmat->xx) == 0.0)) {
             if ((code = (dtemp = (x) * (pmat->xx), (((dtemp) >= -2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2)) && (dtemp) < 2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2))) ? (t = ((fixed)((dtemp)*(float)(1<<12))), 0) : ((-13))))) < 0)
                 return code;
             px += t;
         }
         if (!((pmat->yy) == 0.0)) {
             if ((code = (dtemp = (y) * (pmat->yy), (((dtemp) >= -2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2)) && (dtemp) < 2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2))) ? (t = ((fixed)((dtemp)*(float)(1<<12))), 0) : ((-13))))) < 0)
                 return code;
             py += t;
         }
     } else {
         if ((code = (dtemp = (x) * (pmat->xx), (((dtemp) >= -2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2)) && (dtemp) < 2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2))) ? (px = ((fixed)((dtemp)*(float)(1<<12))), 0) : ((-13))))) < 0 ||
             (code = (dtemp = (y) * (pmat->yy), (((dtemp) >= -2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2)) && (dtemp) < 2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2))) ? (py = ((fixed)((dtemp)*(float)(1<<12))), 0) : ((-13))))) < 0
             )
             return code;
         if (!((pmat->yx) == 0.0)) {
             if ((code = (dtemp = (y) * (pmat->yx), (((dtemp) >= -2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2)) && (dtemp) < 2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2))) ? (t = ((fixed)((dtemp)*(float)(1<<12))), 0) : ((-13))))) < 0)
                 return code;
             px += t;
         }
     }
     ppt->x = px + pmat->tx_fixed;
     ppt->y = py + pmat->ty_fixed;
     return 0;
 }
 
 
 int
 gs_distance_transform2fixed(const gs_matrix_fixed * pmat,
                             floatp dx, floatp dy, gs_fixed_point * ppt)
 {
     fixed px, py, t;
     double dtemp;
     int code;
 
     if ((code = (dtemp = (dx) * (pmat->xx), (((dtemp) >= -2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2)) && (dtemp) < 2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2))) ? (px = ((fixed)((dtemp)*(float)(1<<12))), 0) : ((-13))))) < 0 ||
         (code = (dtemp = (dy) * (pmat->yy), (((dtemp) >= -2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2)) && (dtemp) < 2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2))) ? (py = ((fixed)((dtemp)*(float)(1<<12))), 0) : ((-13))))) < 0
         )
         return code;
     if (!((pmat->yx) == 0.0)) {
         if ((code = (dtemp = (dy) * (pmat->yx), (((dtemp) >= -2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2)) && (dtemp) < 2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2))) ? (t = ((fixed)((dtemp)*(float)(1<<12))), 0) : ((-13))))) < 0)
             return code;
         px += t;
     }
     if (!((pmat->xy) == 0.0)) {
         if ((code = (dtemp = (dx) * (pmat->xy), (((dtemp) >= -2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2)) && (dtemp) < 2.0 * (1L << (((sizeof(fixed) * 8 - 12)) - 2))) ? (t = ((fixed)((dtemp)*(float)(1<<12))), 0) : ((-13))))) < 0)
             return code;
         py += t;
     }
     ppt->x = px;
     ppt->y = py;
     return 0;
 }
 
 --- cut here ---
 	


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]