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