(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr45352-2.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O1 -mtune=amdfam10 -fexpensive-optimizations -fgcse -freorder-blocks -fschedule-insns2 -funswitch-loops -fgcse-las -fselective-scheduling2 -fsel-sched-pipelining -funroll-all-loops" } */
       3  
       4  typedef char uint8_t;
       5  typedef int uint32_t;
       6  typedef int vo_frame_t;
       7  __extension__ typedef __SIZE_TYPE__ size_t;
       8  
       9  struct vo_frame_s
      10  {
      11      uint8_t base[3];
      12    int pitches[3];};
      13  typedef struct
      14  {
      15  void
      16      (*proc_macro_block)
      17      (void);
      18  }
      19  xine_xvmc_t;
      20  typedef struct
      21  {
      22    uint8_t ref[2][3];
      23  int pmv;
      24  }
      25  motion_t;
      26  typedef struct
      27  {
      28    uint32_t bitstream_buf;
      29    int bitstream_bits;
      30      uint8_t * bitstream_ptr;
      31      uint8_t dest[3];
      32    int pitches[3];
      33    int offset;
      34      motion_t b_motion;
      35      motion_t f_motion;
      36    int v_offset;
      37    int coded_picture_width;
      38    int picture_structure;
      39  struct vo_frame_s *current_frame;}
      40  picture_t;
      41  typedef struct
      42  {
      43  int xvmc_last_slice_code;}
      44  mpeg2dec_accel_t;
      45  static int bitstream_init (picture_t * picture, void *start)
      46  {
      47    picture->bitstream_ptr = start;
      48    return (int) (size_t) start;
      49  }
      50  static void slice_xvmc_init (picture_t * picture, int code)
      51  {
      52    int offset;
      53    struct vo_frame_s *forward_reference_frame;
      54    offset = picture->picture_structure == 2;
      55    picture->pitches[0] = picture->current_frame->pitches[0];
      56    picture->pitches[1] = picture->current_frame->pitches[1];
      57    if (picture)
      58      picture->f_motion.ref
      59        [0]
      60        [0]
      61        = (char) (size_t) (forward_reference_frame->base + (offset ? picture->pitches[0] : 0));
      62    picture->f_motion.ref[0][1] = (offset);
      63    if (picture->picture_structure)
      64        picture->pitches[0] <<= picture->pitches[1] <<= 1;
      65    offset = 0;
      66    while (1)
      67      {
      68        if (picture->bitstream_buf >= 0x08000000)
      69  	  break;
      70        switch (picture->bitstream_buf >> 12)
      71  	{
      72  	case 8:
      73  	  offset += 33;
      74  		picture->bitstream_buf
      75  		  |=
      76  		  picture->bitstream_ptr[1] << picture->bitstream_bits;
      77  	}
      78      }
      79    picture->offset = (offset);
      80    while (picture->offset - picture->coded_picture_width >= 0)
      81      {
      82        picture->offset -= picture->coded_picture_width;
      83        if (picture->current_frame)
      84  	{
      85  	  picture->dest[0] += picture->pitches[0];
      86  	  picture->dest[1] += picture->pitches[1];
      87  	}
      88        picture->v_offset += 16;
      89      }
      90  }
      91  
      92  void
      93  mpeg2_xvmc_slice
      94    (mpeg2dec_accel_t * accel, picture_t * picture, int code, uint8_t buffer,int mba_inc)
      95  {
      96    xine_xvmc_t * xvmc = (xine_xvmc_t *) (size_t) bitstream_init (picture, (void *) (size_t) buffer);
      97    slice_xvmc_init (picture, code);
      98      while (1)
      99        {
     100  	if (picture)
     101  	    break;
     102  	switch (picture->bitstream_buf)
     103  	  {
     104  	  case 8:
     105  	    mba_inc += accel->xvmc_last_slice_code = code;
     106  		  xvmc->proc_macro_block   ();
     107  	    while (mba_inc)
     108  	      ;
     109  	  }
     110        }
     111  }