1  /* { dg-do compile }  */
       2  
       3  struct unipair 
       4  {
       5    unsigned short unicode;
       6    unsigned short fontpos;
       7  };
       8  
       9  struct __large_struct
      10  {
      11    unsigned long buf[100];
      12  };
      13  
      14  struct vc_data
      15  {
      16    unsigned long *vc_uni_pagedir_loc;
      17  };
      18  
      19  struct uni_pagedir 
      20  {
      21    unsigned short **uni_pgdir[32];
      22  };
      23  
      24  void con_get_unimap (struct vc_data *vc, unsigned short ct, unsigned short *uct,
      25  		     struct unipair *list)
      26  {
      27    int i, j, k, ect;
      28    unsigned short **p1, *p2;
      29    struct uni_pagedir *p;
      30  
      31    ect = 0;
      32  
      33    if (*vc->vc_uni_pagedir_loc)
      34    {
      35      p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
      36      for (i = 0; i < 32; i++)
      37      if ((p1 = p->uni_pgdir[i]))
      38      for (j = 0; j < 32; j++)
      39      if ((p2 = *(p1++)))
      40      for (k = 0; k < 64; k++)
      41      {
      42        if (*p2 < 512 && ect++ < ct)
      43        {
      44  	{
      45  	  long __pu_err;
      46  	  __typeof__(*((&list->unicode))) *__pu_addr = ((&list->unicode));
      47  	  __typeof__(*((&list->unicode))) __pu_val =
      48  		((unsigned short)((i<<11)+(j<<6)+k));
      49  	  __pu_err = 0;
      50  	  switch ((sizeof(*(&list->unicode))))
      51  	  {
      52  	    case 1:
      53  		__asm__ __volatile__ (
      54  		"1:\n\t"
      55  			"mov." "b" "	%1, %2\n\t"
      56  		"2:\n"
      57  		".section	.fixup,\"ax\"\n"
      58  		"3:\n\t"
      59  			"mov.l	4f, %0\n\t"
      60  			"jmp	@%0\n\t"
      61  			" mov	%3, %0\n\t"
      62  			".balign	4\n"
      63  		"4:	.long	2b\n\t"
      64  			".previous\n"
      65  		".section	__ex_table,\"a\"\n\t"
      66  			".long	1b, 3b\n\t"
      67  			".previous"
      68  		: "=&r" (__pu_err)
      69  		: "r" (__pu_val), "m" ((*(struct __large_struct *)(__pu_addr))),
      70  		  "i" (-14), "0" (__pu_err) : "memory" );
      71  
      72  	      break;
      73  
      74  	    case 2:
      75  		__asm__ __volatile__ (
      76  		"1:\n\t"
      77  			"mov." "w" "	%1, %2\n\t"
      78  		"2:\n"
      79  		".section	.fixup,\"ax\"\n"
      80  		"3:\n\t"
      81  			"mov.l	4f, %0\n\t"
      82  			"jmp	@%0\n\t"
      83  			" mov	%3, %0\n\t"
      84  			".balign	4\n"
      85  			"4:	.long	2b\n\t"
      86  			".previous\n"
      87  		".section	__ex_table,\"a\"\n\t"
      88  			".long	1b, 3b\n\t"
      89  			".previous"
      90  		: "=&r" (__pu_err)
      91  		: "r" (__pu_val), "m" ((*(struct __large_struct *)(__pu_addr))),
      92  		  "i" (-14), "0" (__pu_err) : "memory" );
      93  	      break;
      94  
      95  	    default:
      96  	      break;
      97  	  }
      98  	}
      99  
     100  
     101  	{
     102  	  long __pu_err;
     103  	  __typeof__(*((&list->fontpos))) *__pu_addr = ((&list->fontpos));
     104  	  __typeof__(*((&list->fontpos))) __pu_val = ((unsigned short) *p2);
     105  	  __pu_err = 0;
     106  	  switch ((sizeof(*(&list->fontpos))))
     107  	  {
     108  	    case 1:
     109  		__asm__ __volatile__ (
     110  		"1:\n\t"
     111  			"mov." "b" "	%1, %2\n\t"
     112  		"2:\n"
     113  		".section	.fixup,\"ax\"\n"
     114  		"3:\n\t"
     115  			"mov.l	4f, %0\n\t"
     116  			"jmp	@%0\n\t"
     117  			" mov	%3, %0\n\t"
     118  			".balign	4\n"
     119  			"4:	.long	2b\n\t"
     120  			".previous\n"
     121  		".section	__ex_table,\"a\"\n\t"
     122  			".long	1b, 3b\n\t"
     123  			".previous"
     124  		: "=&r" (__pu_err)
     125  		: "r" (__pu_val), "m" ((*(struct __large_struct *)(__pu_addr))),
     126  		  "i" (-14), "0" (__pu_err) : "memory" );
     127  	      break;
     128  
     129  	    case 2:
     130  	      __asm__ __volatile__ (
     131  		"1:\n\t"
     132  			"mov." "w" "	%1, %2\n\t"
     133  		"2:\n"
     134  			".section	.fixup,\"ax\"\n"
     135  		"3:\n\t"
     136  			"mov.l	4f, %0\n\t"
     137  			"jmp	@%0\n\t"
     138  			" mov	%3, %0\n\t"
     139  		".balign	4\n"
     140  			"4:	.long	2b\n\t"
     141  		".previous\n"
     142  		".section	__ex_table,\"a\"\n\t"
     143  			".long	1b, 3b\n\t"
     144  			".previous"
     145  		: "=&r" (__pu_err)
     146  		: "r" (__pu_val), "m" ((*(struct __large_struct *)(__pu_addr))),
     147  		  "i" (-14), "0" (__pu_err) : "memory" );
     148  	      break;
     149  
     150  	    default:
     151  	      break;
     152  	  }
     153  	}
     154  
     155          list++;
     156        }
     157        p2++;
     158      }
     159    }
     160  }