1/* ICE: call insn does not satisfy its constraints, MMIX port.
2   Origin: ghostscript-6.52, reduction from hp@bitrange.com.  */
3struct s0
4{
5  void (*init_color)(void *, void *);
6};
7struct s1
8{
9  void (*map_cmyk)(short, void *, void **, void *);
10  void (*map_rgb_alpha)(short, void *, void **, void *);
11};
12struct s5
13{
14  long fill1; int fill2;
15  long fill3; unsigned int fill4, fill5;
16};
17struct s2
18{
19  struct s5 x, y;
20};
21struct s3
22{
23  long dev_color;
24  unsigned int key;
25};
26struct s4
27{
28  unsigned char spp;
29  int alpha;
30  struct mc_
31  {
32    unsigned int values[14];
33    unsigned int mask, test;
34    int exact;
35  } mask_color;
36  void **pis;
37  struct s0 *pcs;
38  struct dd_
39  {
40    struct s2 row[2];
41    struct s2 pixel0;
42  } dda;
43  struct s3 clues[256];
44};
45extern struct s1 *get_cmap_procs (void **, void *);
46int image_render_color (struct s4 *, unsigned char *, int, void *);
47int
48image_render_color (struct s4 *penum, unsigned char *buffer,
49		    int data_x, void *dev)
50{
51  struct s3 *clues = penum->clues;
52  void **pis = penum->pis;
53  struct s2 pnext;
54  struct s0 *pcs = penum->pcs;
55  struct s1 *cmap_procs = get_cmap_procs(pis, dev);
56  void (*map_4)(short, void *, void **, void *) =
57    (penum->alpha ? cmap_procs->map_rgb_alpha : cmap_procs->map_cmyk);
58  unsigned int mask = penum->mask_color.mask;
59  unsigned int test = penum->mask_color.test;
60  struct s3 *pic_next = &clues[1];
61  int spp = penum->spp;
62  unsigned char *psrc = buffer + data_x * spp;
63  unsigned char v[6];
64
65  pnext = penum->dda.pixel0;
66  __builtin_memset (&v, 0, sizeof(v));
67  (*(pcs)->init_color) (0, 0);
68
69  if (spp == 4)
70    {
71      v[0] = psrc[0];
72      v[1] = psrc[1];
73      if ((buffer[0] & mask) == test && penum->mask_color.exact)
74	pic_next->dev_color = 0;
75      (*map_4)(v[0], &pic_next->dev_color, pis, dev);
76    }
77  return 0;
78}
79