public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c/3823: gcc 3.0 on sparc-solaris2.6 ICE on gimp-1.0.4 rect.c
@ 2001-12-01 20:47 rodrigc
0 siblings, 0 replies; 5+ messages in thread
From: rodrigc @ 2001-12-01 20:47 UTC (permalink / raw)
To: gcc-bugs, gcc-gnats, gcc-prs, nobody, partain
Synopsis: gcc 3.0 on sparc-solaris2.6 ICE on gimp-1.0.4 rect.c
State-Changed-From-To: analyzed->closed
State-Changed-By: rodrigc
State-Changed-When: Sat Dec 1 20:47:05 2001
State-Changed-Why:
Fixed.
http://gcc.gnu.org/ml/gcc-patches/2001-11/msg00591.html
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&pr=3823&database=gcc
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: c/3823: gcc 3.0 on sparc-solaris2.6 ICE on gimp-1.0.4 rect.c
@ 2001-12-01 20:56 rodrigc
0 siblings, 0 replies; 5+ messages in thread
From: rodrigc @ 2001-12-01 20:56 UTC (permalink / raw)
To: nobody; +Cc: gcc-prs
The following reply was made to PR c/3823; it has been noted by GNATS.
From: rodrigc@gcc.gnu.org
To: gcc-bugs@gcc.gnu.org, gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org,
nobody@gcc.gnu.org, partain@dcs.gla.ac.uk
Cc:
Subject: Re: c/3823: gcc 3.0 on sparc-solaris2.6 ICE on gimp-1.0.4 rect.c
Date: 2 Dec 2001 04:47:06 -0000
Synopsis: gcc 3.0 on sparc-solaris2.6 ICE on gimp-1.0.4 rect.c
State-Changed-From-To: analyzed->closed
State-Changed-By: rodrigc
State-Changed-When: Sat Dec 1 20:47:05 2001
State-Changed-Why:
Fixed.
http://gcc.gnu.org/ml/gcc-patches/2001-11/msg00591.html
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&pr=3823&database=gcc
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: c/3823: gcc 3.0 on sparc-solaris2.6 ICE on gimp-1.0.4 rect.c
@ 2001-11-22 14:06 ciceron
0 siblings, 0 replies; 5+ messages in thread
From: ciceron @ 2001-11-22 14:06 UTC (permalink / raw)
To: nobody; +Cc: gcc-prs
The following reply was made to PR c/3823; it has been noted by GNATS.
From: ciceron@gcc.gnu.org
To: gcc-bugs@gcc.gnu.org, gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org,
nobody@gcc.gnu.org, partain@dcs.gla.ac.uk
Cc:
Subject: Re: c/3823: gcc 3.0 on sparc-solaris2.6 ICE on gimp-1.0.4 rect.c
Date: 30 Nov 2001 14:40:42 -0000
Synopsis: gcc 3.0 on sparc-solaris2.6 ICE on gimp-1.0.4 rect.c
State-Changed-From-To: open->analyzed
State-Changed-By: ciceron
State-Changed-When: Fri Nov 30 06:40:41 2001
State-Changed-Why:
confirmed as bug for 3.0.2. It is fixed in 3.1 by Jakub Jelinek
patch: http://gcc.gnu.org/ml/gcc-patches/2001-11/msg00591.html
See PR/4410.
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&pr=3823&database=gcc
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: c/3823: gcc 3.0 on sparc-solaris2.6 ICE on gimp-1.0.4 rect.c
@ 2001-11-22 13:59 ciceron
0 siblings, 0 replies; 5+ messages in thread
From: ciceron @ 2001-11-22 13:59 UTC (permalink / raw)
To: gcc-bugs, gcc-gnats, gcc-prs, nobody, partain
Synopsis: gcc 3.0 on sparc-solaris2.6 ICE on gimp-1.0.4 rect.c
State-Changed-From-To: open->analyzed
State-Changed-By: ciceron
State-Changed-When: Fri Nov 30 06:40:41 2001
State-Changed-Why:
confirmed as bug for 3.0.2. It is fixed in 3.1 by Jakub Jelinek
patch: http://gcc.gnu.org/ml/gcc-patches/2001-11/msg00591.html
See PR/4410.
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&pr=3823&database=gcc
^ permalink raw reply [flat|nested] 5+ messages in thread
* c/3823: gcc 3.0 on sparc-solaris2.6 ICE on gimp-1.0.4 rect.c
@ 2001-07-25 13:56 Will Partain
0 siblings, 0 replies; 5+ messages in thread
From: Will Partain @ 2001-07-25 13:56 UTC (permalink / raw)
To: gcc-gnats
>Number: 3823
>Category: c
>Synopsis: gcc 3.0 on sparc-solaris2.6 ICE on gimp-1.0.4 rect.c
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: ice-on-legal-code
>Submitter-Id: net
>Arrival-Date: Wed Jul 25 13:56:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator: Will Partain
>Release: 3.0
>Organization:
>Environment:
System: SunOS slicker 5.6 Generic_105181-25 sun4u sparc SUNW,Ultra-5_10
Architecture: sun4
host: sparc-sun-solaris2.6
build: sparc-sun-solaris2.6
target: sparc-sun-solaris2.6
configured with: ./configure --prefix=/.-ark-deploy/gcc--3.0 --enable-languages=c,c++ --disable-nls : (reconfigured) ./configure --prefix=/.-ark-deploy/gcc--3.0 --enable-languages=c,c++ --disable-nls
>Description:
compiling with -O2 -fstrict-aliasing yields ICE;
this is rect.c from gimp-1.0.4
>How-To-Repeat:
=== beginning of .i
typedef struct {
int quot;
int rem;
} div_t;
typedef struct {
long quot;
long rem;
} ldiv_t;
typedef struct {
long long quot;
long long rem;
} lldiv_t;
typedef unsigned int size_t;
typedef long uid_t;
typedef long int wchar_t;
extern unsigned char __ctype[];
extern double atof(const char *);
extern int atoi(const char *);
extern long int atol(const char *);
extern double strtod(const char *, char **);
extern long int strtol(const char *, char **, int);
extern unsigned long int strtoul(const char *, char **, int);
extern int rand(void);
extern void srand(unsigned int);
extern void *calloc(size_t, size_t);
extern void free(void *);
extern void *malloc(size_t);
extern void *realloc(void *, size_t);
extern void abort(void);
extern int atexit(void (*)(void));
extern void exit(int);
extern void _exithandle(void);
extern char *getenv(const char *);
extern int system(const char *);
extern void *bsearch(const void *, const void *, size_t, size_t,
int (*)(const void *, const void *));
extern void qsort(void *, size_t, size_t,
int (*)(const void *, const void *));
extern int abs(int);
extern div_t div(int, int);
extern long int labs(long);
extern ldiv_t ldiv(long, long);
extern int mbtowc(wchar_t *, const char *, size_t);
extern int mblen(const char *, size_t);
extern int wctomb(char *, wchar_t);
extern size_t mbstowcs(wchar_t *, const char *, size_t);
extern size_t wcstombs(char *, const wchar_t *, size_t);
extern double drand48(void);
extern double erand48(unsigned short *);
extern long jrand48(unsigned short *);
extern void lcong48(unsigned short *);
extern long lrand48(void);
extern long mrand48(void);
extern long nrand48(unsigned short *);
extern unsigned short *seed48(unsigned short *);
extern void srand48(long);
extern int putenv(const char *);
extern void setkey(const char *);
extern void swab(const char *, char *, int);
extern int mkstemp(char *);
extern int mkstemp64(char *);
extern long a64l(const char *);
extern char *ecvt(double, int, int *, int *);
extern char *fcvt(double, int, int *, int *);
extern char *gcvt(double, int, char *);
extern int getsubopt(char **, char *const *, char **);
extern int grantpt(int);
extern char *initstate(unsigned, char *, size_t);
extern char *l64a(long);
extern char *mktemp(char *);
extern char *ptsname(int);
extern long random(void);
extern char *realpath(const char *, char *);
extern char *setstate(const char *);
extern void srandom(unsigned);
extern int ttyslot(void);
extern int unlockpt(int);
extern void *valloc(size_t);
extern int dup2(int, int);
extern char *qecvt(long double, int, int *, int *);
extern char *qfcvt(long double, int, int *, int *);
extern char *qgcvt(long double, int, char *);
extern char *getcwd(char *, size_t);
extern const char *getexecname(void);
extern char *getlogin(void);
extern int getopt(int, char *const *, const char *);
extern char *optarg;
extern int optind, opterr, optopt;
extern char *getpass(const char *);
extern char *getpassphrase(const char *);
extern int getpw(uid_t, char *);
extern int isatty(int);
extern void *memalign(size_t, size_t);
extern char *ttyname(int);
extern long long atoll(const char *);
extern long long llabs(long long);
extern lldiv_t lldiv(long long, long long);
extern char *lltostr(long long, char *);
extern long long strtoll(const char *, char **, int);
extern unsigned long long strtoull(const char *, char **, int);
extern char *ulltostr(unsigned long long, char *);
typedef __builtin_va_list __gnuc_va_list;
typedef void *__va_list;
typedef long long __longlong_t;
typedef long off_t;
typedef __longlong_t off64_t;
typedef long fpos_t;
typedef __longlong_t fpos64_t;
typedef struct
{
int _cnt;
unsigned char *_ptr;
unsigned char *_base;
unsigned char _flag;
unsigned char _file;
} FILE;
extern FILE __iob[20];
extern FILE *_lastbuf;
extern unsigned char *_bufendtab[];
extern unsigned char _sibuf[], _sobuf[];
extern int remove(const char *);
extern int rename(const char *, const char *);
extern FILE *tmpfile(void);
extern char *tmpnam(char *);
extern int fclose(FILE *);
extern int fflush(FILE *);
extern FILE *fopen(const char *, const char *);
extern FILE *freopen(const char *, const char *, FILE *);
extern void setbuf(FILE *, char *);
extern void setbuffer(FILE *, char *, size_t);
extern int setlinebuf(FILE *);
extern int setvbuf(FILE *, char *, int, size_t);
extern int fprintf(FILE *, const char *, ...);
extern int fscanf(FILE *, const char *, ...);
extern int printf(const char *, ...);
extern int scanf(const char *, ...);
extern int snprintf(char *, size_t, const char *, ...);
extern int sprintf(char *, const char *, ...);
extern int sscanf(const char *, const char *, ...);
extern int vfprintf(FILE *, const char *, __gnuc_va_list);
extern int vprintf(const char *, __gnuc_va_list);
extern int vsnprintf(char *, size_t, const char *, __gnuc_va_list);
extern int vsprintf(char *, const char *, __gnuc_va_list);
extern int fgetc(FILE *);
extern char *fgets(char *, int, FILE *);
extern int fputc(int, FILE *);
extern int fputs(const char *, FILE *);
extern int getc(FILE *);
extern int getchar(void);
extern char *gets(char *);
extern int putc(int, FILE *);
extern int putchar(int);
extern int puts(const char *);
extern int ungetc(int, FILE *);
extern size_t fread(void *, size_t, size_t, FILE *);
extern size_t fwrite(const void *, size_t, size_t, FILE *);
extern int fgetpos(FILE *, fpos_t *);
extern int fseek(FILE *, long, int);
extern int fsetpos(FILE *, const fpos_t *);
extern long ftell(FILE *);
extern void rewind(FILE *);
extern void clearerr(FILE *);
extern int feof(FILE *);
extern int ferror(FILE *);
extern void perror(const char *);
extern int __filbuf(FILE *);
extern int __flsbuf(int, FILE *);
extern FILE *fdopen(int, const char *);
extern char *ctermid(char *);
extern int fileno(FILE *);
extern FILE *popen(const char *, const char *);
extern char *cuserid(char *);
extern char *tempnam(const char *, const char *);
extern int getopt(int, char *const *, const char *);
extern int getsubopt(char **, char *const *, char **);
extern char *optarg;
extern int optind, opterr, optopt;
extern int getw(FILE *);
extern int putw(int, FILE *);
extern int pclose(FILE *);
extern int fseeko(FILE *, off_t, int);
extern off_t ftello(FILE *);
extern FILE *fopen64(const char *, const char *);
extern FILE *freopen64(const char *, const char *, FILE *);
extern FILE *tmpfile64(void);
extern int fgetpos64(FILE *, fpos64_t *);
extern int fsetpos64(FILE *, const fpos64_t *);
extern int fseeko64(FILE *, off64_t, int);
extern off64_t ftello64(FILE *);
typedef union _h_val {
unsigned long _i[sizeof(double) / sizeof(unsigned long)];
double _d;
} _h_val;
extern const _h_val __huge_val;
extern int signgam;
enum version {libm_ieee = -1, c_issue_4, ansi_1, strict_ansi};
extern const enum version _lib_version;
struct exception {
int type;
char *name;
double arg1;
double arg2;
double retval;
};
extern double acos (double);
extern double asin (double);
extern double atan (double);
extern double atan2 (double, double);
extern double cos (double);
extern double sin (double);
extern double tan (double);
extern double cosh (double);
extern double sinh (double);
extern double tanh (double);
extern double exp (double);
extern double frexp (double, int *);
extern double ldexp (double, int);
extern double log (double);
extern double log10 (double);
extern double modf (double, double *);
extern double pow (double, double);
extern double sqrt (double);
extern double ceil (double);
extern double fabs (double);
extern double floor (double);
extern double fmod (double, double);
extern double erf (double);
extern double erfc (double);
extern double gamma (double);
extern double hypot (double, double);
extern int isnan (double);
extern double j0 (double);
extern double j1 (double);
extern double jn (int, double);
extern double lgamma (double);
extern double y0 (double);
extern double y1 (double);
extern double yn (int, double);
extern double acosh (double);
extern double asinh (double);
extern double atanh (double);
extern double cbrt (double);
extern double logb (double);
extern double nextafter (double, double);
extern double remainder (double, double);
extern double scalb (double, double);
extern double expm1 (double);
extern int ilogb (double);
extern double log1p (double);
extern double rint (double);
extern int matherr (struct exception *);
extern double significand (double);
extern double copysign (double, double);
extern double scalbn (double, int);
extern float modff (float, float *);
enum fp_direction_type {
fp_nearest = 0,
fp_tozero = 1,
fp_positive = 2,
fp_negative = 3
};
enum fp_precision_type {
fp_extended = 0,
fp_single = 1,
fp_double = 2,
fp_precision_3 = 3
};
enum fp_exception_type {
fp_inexact = 0,
fp_division = 1,
fp_underflow = 2,
fp_overflow = 3,
fp_invalid = 4
};
enum fp_trap_enable_type {
fp_trap_inexact = 0,
fp_trap_division = 1,
fp_trap_underflow = 2,
fp_trap_overflow = 3,
fp_trap_invalid = 4
};
enum fp_class_type {
fp_zero = 0,
fp_subnormal = 1,
fp_normal = 2,
fp_infinity = 3,
fp_quiet = 4,
fp_signaling = 5
};
typedef int sigfpe_code_type;
typedef void (*sigfpe_handler_type)();
extern sigfpe_handler_type sigfpe (sigfpe_code_type, sigfpe_handler_type);
typedef float single;
typedef unsigned extended[3];
typedef long double quadruple;
typedef unsigned fp_exception_field_type;
typedef char decimal_string[512];
typedef struct {
enum fp_class_type fpclass;
int sign;
int exponent;
decimal_string ds;
int more;
int ndigits;
} decimal_record;
enum decimal_form {
fixed_form,
floating_form
};
typedef struct {
enum fp_direction_type rd;
enum decimal_form df;
int ndigits;
} decimal_mode;
enum decimal_string_form {
invalid_form,
whitespace_form,
fixed_int_form,
fixed_intdot_form,
fixed_dotfrac_form,
fixed_intdotfrac_form,
floating_int_form,
floating_intdot_form,
floating_dotfrac_form,
floating_intdotfrac_form,
inf_form,
infinity_form,
nan_form,
nanstring_form
};
extern void single_to_decimal (single *, decimal_mode *, decimal_record *, fp_exception_field_type *);
extern void double_to_decimal (double *, decimal_mode *, decimal_record *, fp_exception_field_type *);
extern void extended_to_decimal (extended *, decimal_mode *, decimal_record *, fp_exception_field_type *);
extern void quadruple_to_decimal (quadruple *, decimal_mode *, decimal_record *, fp_exception_field_type *);
extern void decimal_to_single (single *, decimal_mode *, decimal_record *, fp_exception_field_type *);
extern void decimal_to_double (double *, decimal_mode *, decimal_record *, fp_exception_field_type *);
extern void decimal_to_extended (extended *, decimal_mode *, decimal_record *, fp_exception_field_type *);
extern void decimal_to_quadruple (quadruple *, decimal_mode *, decimal_record *, fp_exception_field_type *);
extern void string_to_decimal (char **, int, int, decimal_record *, enum decimal_string_form *, char **);
extern void func_to_decimal (char **, int, int, decimal_record *, enum decimal_string_form *, char **, int (*)(void), int *, int (*)(int));
extern void file_to_decimal (char **, int, int, decimal_record *, enum decimal_string_form *, char **, FILE *, int *);
extern char *seconvert (single *, int, int *, int *, char *);
extern char *sfconvert (single *, int, int *, int *, char *);
extern char *sgconvert (single *, int, int, char *);
extern char *econvert (double, int, int *, int *, char *);
extern char *fconvert (double, int, int *, int *, char *);
extern char *gconvert (double, int, int, char *);
extern char *qeconvert (quadruple *, int, int *, int *, char *);
extern char *qfconvert (quadruple *, int, int *, int *, char *);
extern char *qgconvert (quadruple *, int, int, char *);
extern char *ecvt (double, int, int *, int *);
extern char *fcvt (double, int, int *, int *);
extern char *gcvt (double, int, char *);
extern double atof (const char *);
extern double strtod (const char *, char **);
typedef double clrmap[256][3];
extern void rgb2hsv(double *rgb, double *hsv);
extern void hsv2rgb(double *hsv, double *rgb);
extern int get_cmap(int n, clrmap c, int cmap_len);
typedef double point[3];
typedef struct {
double var[7];
double c[3][2];
double density;
double color;
} xform;
typedef struct {
xform xform[6];
clrmap cmap;
double time;
int cmap_index;
double brightness;
double contrast;
double gamma;
int width, height;
int spatial_oversample;
double center[2];
double zoom;
double pixels_per_unit;
double spatial_filter_radius;
double sample_density;
int nbatches;
int white_level;
int cmap_inter;
double pulse[2][2];
double wiggle[2][2];
} control_point;
extern void iterate(control_point *cp, int n, int fuse, point points[]);
extern void interpolate(control_point cps[], int ncps, double time, control_point *result);
extern void tokenize(char **ss, char *argv[], int *argc);
extern void print_control_point(FILE *f, control_point *cp, int quote);
extern void random_control_point(control_point *cp, int ivar);
extern void parse_control_point(char **ss, control_point *cp);
extern void estimate_bounding_box(control_point *cp, double eps, double *bmin, double *bmax);
extern void sort_control_points(control_point *cps, int ncps, double (*metric)());
extern double standard_metric(control_point *cp1, control_point *cp2);
extern double random_uniform01();
extern double random_uniform11();
extern double random_gaussian();
extern void mult_matrix(double s1[2][2], double s2[2][2], double d[2][2]);
void copy_variation(control_point *cp0, control_point *cp1);
typedef struct {
double temporal_filter_radius;
control_point *cps;
int ncps;
double time;
} frame_spec;
extern void render_rectangle(frame_spec *spec, unsigned char *out,
int out_width, int field, int nchan,
void progress(double));
extern void *memcpy(void *, const void *, size_t);
extern void *memmove(void *, const void *, size_t);
extern char *strcpy(char *, const char *);
extern char *strncpy(char *, const char *, size_t);
extern char *strcat(char *, const char *);
extern char *strncat(char *, const char *, size_t);
extern int memcmp(const void *, const void *, size_t);
extern int strcmp(const char *, const char *);
extern int strcoll(const char *, const char *);
extern int strncmp(const char *, const char *, size_t);
extern size_t strxfrm(char *, const char *, size_t);
extern void *memchr(const void *, int, size_t);
extern char *strchr(const char *, int);
extern size_t strcspn(const char *, const char *);
extern char *strpbrk(const char *, const char *);
extern char *strrchr(const char *, int);
extern size_t strspn(const char *, const char *);
extern char *strstr(const char *, const char *);
extern char *strtok(char *, const char *);
extern void *memset(void *, int, size_t);
extern char *strerror(int);
extern size_t strlen(const char *);
extern void *memccpy(void *, const void *, int, size_t);
extern char *strsignal(int);
extern int ffs(int);
extern int strcasecmp(const char *, const char *);
extern int strncasecmp(const char *, const char *, size_t);
extern char *strdup(const char *);
typedef short bucket[4];
typedef short accum_t;
typedef accum_t abucket[4];
void normalize_vector(v, n)
double *v;
int n;
{
double t = 0.0;
int i;
for (i = 0; i < n; i++)
t += v[i];
t = 1.0 / t;
for (i = 0; i < n; i++)
v[i] *= t;
}
void render_rectangle(spec, out, out_width, field, nchan, progress)
frame_spec *spec;
unsigned char *out;
int out_width;
int field;
int nchan;
void progress(double);
{
int i, j, k, nsamples, nbuckets, batch_size, batch_num, sub_batch;
bucket *buckets;
abucket *accumulate;
point *points;
double *filter, *temporal_filter, *temporal_deltas;
double bounds[4], size[2], ppux, ppuy;
int image_width, image_height;
int width, height;
int filter_width;
int oversample = spec->cps[0].spatial_oversample;
int nbatches = spec->cps[0].nbatches;
bucket cmap[256];
int gutter_width;
int sbc;
image_width = spec->cps[0].width;
if (field) {
image_height = spec->cps[0].height / 2;
if (field == 2)
out += nchan * out_width;
out_width *= 2;
} else
image_height = spec->cps[0].height;
if (1) {
filter_width = (2.0 * 2.5 * oversample *
spec->cps[0].spatial_filter_radius);
if ((filter_width ^ oversample) & 1)
filter_width++;
filter = (double *) malloc(sizeof(double) * filter_width * filter_width);
for (i = 0; i < filter_width; i++)
for (j = 0; j < filter_width; j++) {
double ii = ((2.0 * i + 1.0) / filter_width - 1.0) * 2.5;
double jj = ((2.0 * j + 1.0) / filter_width - 1.0) * 2.5;
if (field)
jj *= 2.0;
filter[i + j * filter_width] =
exp(-2.0 * (ii * ii + jj * jj));
}
normalize_vector(filter, filter_width * filter_width);
}
temporal_filter = (double *) malloc(sizeof(double) * nbatches);
temporal_deltas = (double *) malloc(sizeof(double) * nbatches);
if (nbatches > 1) {
double t;
for (i = 0; i < nbatches; i++) {
t = temporal_deltas[i] = (2.0 * ((double) i / (nbatches - 1)) - 1.0)
* spec->temporal_filter_radius;
temporal_filter[i] = exp(-2.0 * t * t);
}
normalize_vector(temporal_filter, nbatches);
} else {
temporal_filter[0] = 1.0;
temporal_deltas[0] = 0.0;
}
gutter_width = (filter_width - oversample) / 2;
height = oversample * image_height + 2 * gutter_width;
width = oversample * image_width + 2 * gutter_width;
nbuckets = width * height;
if (1) {
static char *last_block = 0;
static int last_block_size = 0;
int memory_rqd = (sizeof(bucket) * nbuckets +
sizeof(abucket) * nbuckets +
sizeof(point) * 10000);
if (memory_rqd > last_block_size) {
if (last_block != 0)
free(last_block);
last_block = (char *) malloc(memory_rqd);
if (0 == last_block) {
fprintf((&__iob[2]), "render_rectangle: cannot malloc %d bytes.\n", memory_rqd);
exit(1);
}
last_block_size = memory_rqd;
}
buckets = (bucket *) last_block;
accumulate = (abucket *) (last_block + sizeof(bucket) * nbuckets);
points = (point *) (last_block + (sizeof(bucket) + sizeof(abucket)) * nbuckets);
}
memset((char *) accumulate, 0, sizeof(abucket) * nbuckets);
for (batch_num = 0; batch_num < nbatches; batch_num++) {
double batch_time;
double sample_density;
control_point cp;
memset((char *) buckets, 0, sizeof(bucket) * nbuckets);
batch_time = spec->time + temporal_deltas[batch_num];
interpolate(spec->cps, spec->ncps, batch_time, &cp);
for (j = 0; j < 256; j++) {
for (k = 0; k < 3; k++) {
cmap[j][k] = (int) (cp.cmap[(j * 256) / 256][k] *
cp.white_level);
}
cmap[j][3] = cp.white_level;
}
if (1) {
double t0, t1, shift, corner0, corner1;
double scale;
scale = pow(2.0, cp.zoom);
sample_density = cp.sample_density * scale * scale;
ppux = cp.pixels_per_unit * scale;
ppuy = field ? (ppux / 2.0) : ppux;
switch (field) {
case 0: shift = 0.0; break;
case 1: shift = -0.5; break;
case 2: shift = 0.5; break;
}
shift = shift / ppux;
t0 = (double) gutter_width / (oversample * ppux);
t1 = (double) gutter_width / (oversample * ppuy);
corner0 = cp.center[0] - image_width / ppux / 2.0;
corner1 = cp.center[1] - image_height / ppuy / 2.0;
bounds[0] = corner0 - t0;
bounds[1] = corner1 - t1 + shift;
bounds[2] = corner0 + image_width / ppux + t0;
bounds[3] = corner1 + image_height / ppuy + t1 + shift;
size[0] = 1.0 / (bounds[2] - bounds[0]);
size[1] = 1.0 / (bounds[3] - bounds[1]);
}
nsamples = (int) (sample_density * nbuckets /
(oversample * oversample));
batch_size = nsamples / cp.nbatches;
sbc = 0;
for (sub_batch = 0;
sub_batch < batch_size;
sub_batch += 10000) {
if (progress&&!(sbc++&7))
(*progress)(0.5*sub_batch/(double)batch_size);
points[0][0] = random_uniform11();
points[0][1] = random_uniform11();
points[0][2] = random_uniform01();
iterate(&cp, 10000, 15, points);
for (j = 0; j < 10000; j++) {
int k, color_index;
double *p = points[j];
bucket *b;
if (p[0] < bounds[0] ||
p[1] < bounds[1] ||
p[0] > bounds[2] ||
p[1] > bounds[3])
continue;
color_index = (int) (p[2] * 256);
if (color_index < 0) color_index = 0;
else if (color_index > (256 -1))
color_index = 256 -1;
b = buckets +
(int) (width * (p[0] - bounds[0]) * size[0]) +
width * (int) (height * (p[1] - bounds[1]) * size[1]);
for (k = 0; k < 4; k++)
{ short tt_ = b[0][k] + cmap[color_index][k]; if (tt_ > b[0][k]) b[0][k] = tt_; };
}
}
if (1) {
double k1 =(cp.contrast * cp.brightness *
((1<<14)>>4) * 268.0 *
temporal_filter[batch_num]) / 256;
double area = image_width * image_height / (ppux * ppuy);
double k2 = (oversample * oversample * nbatches) /
(cp.contrast * area * cp.white_level * sample_density);
for (j = 0; j < height; j++)
for (i = 0; i < width; i++) {
abucket *a = accumulate + i + j * width;
bucket *b = buckets + i + j * width;
double c[4], ls;
c[0] = (double) b[0][0];
c[1] = (double) b[0][1];
c[2] = (double) b[0][2];
c[3] = (double) b[0][3];
if (0.0 == c[3])
continue;
ls = (k1 * log(1.0 + c[3] * k2))/c[3];
c[0] *= ls;
c[1] *= ls;
c[2] *= ls;
c[3] *= ls;
{ accum_t tt_ = a[0][0] + c[0] + 0.5; if (tt_ > a[0][0]) a[0][0] = tt_; };
{ accum_t tt_ = a[0][1] + c[1] + 0.5; if (tt_ > a[0][1]) a[0][1] = tt_; };
{ accum_t tt_ = a[0][2] + c[2] + 0.5; if (tt_ > a[0][2]) a[0][2] = tt_; };
{ accum_t tt_ = a[0][3] + c[3] + 0.5; if (tt_ > a[0][3]) a[0][3] = tt_; };
}
}
}
if (1) {
int x, y;
double t[4];
double g = 1.0 / spec->cps[0].gamma;
y = 0;
for (j = 0; j < image_height; j++) {
if (progress && !(j&15))
(*progress)(0.5+0.5*j/(double)image_height);
x = 0;
for (i = 0; i < image_width; i++) {
int ii, jj, a;
unsigned char *p;
t[0] = t[1] = t[2] = t[3] = 0.0;
for (ii = 0; ii < filter_width; ii++)
for (jj = 0; jj < filter_width; jj++) {
double k = filter[ii + jj * filter_width];
abucket *a = accumulate + x + ii + (y + jj) * width;
t[0] += k * a[0][0];
t[1] += k * a[0][1];
t[2] += k * a[0][2];
t[3] += k * a[0][3];
}
p = out + nchan * (i + j * out_width);
a = 256.0 * pow((double) t[0] / ((1<<14)>>4), g) + 0.5;
if (a < 0) a = 0; else if (a > 255) a = 255;
p[0] = a;
a = 256.0 * pow((double) t[1] / ((1<<14)>>4), g) + 0.5;
if (a < 0) a = 0; else if (a > 255) a = 255;
p[1] = a;
a = 256.0 * pow((double) t[2] / ((1<<14)>>4), g) + 0.5;
if (a < 0) a = 0; else if (a > 255) a = 255;
p[2] = a;
if (nchan > 3) {
a = 256.0 * pow((double) t[3] / ((1<<14)>>4), g) + 0.5;
if (a < 0) a = 0; else if (a > 255) a = 255;
p[3] = a;
}
x += oversample;
}
y += oversample;
}
}
free(filter);
}
=== end of .i
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2001-12-02 4:56 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-12-01 20:47 c/3823: gcc 3.0 on sparc-solaris2.6 ICE on gimp-1.0.4 rect.c rodrigc
-- strict thread matches above, loose matches on Subject: below --
2001-12-01 20:56 rodrigc
2001-11-22 14:06 ciceron
2001-11-22 13:59 ciceron
2001-07-25 13:56 Will Partain
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).