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