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
      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  }