1/* { dg-do compile } */ 2/* { dg-options "-O2 -fno-strict-aliasing -fdump-tree-optimized" } */ 3 4typedef unsigned u32; 5typedef unsigned short u16; 6typedef unsigned char u8; 7struct biosregs { 8 union { 9 struct { 10 u32 edi; 11 u32 esi; 12 u32 ebp; 13 u32 _esp; 14 u32 ebx; 15 u32 edx; 16 u32 ecx; 17 u32 eax; 18 u32 _fsgs; 19 u32 _dses; 20 u32 eflags; 21 }; 22 struct { 23 u16 di, hdi; 24 u16 si, hsi; 25 u16 bp, hbp; 26 u16 _sp, _hsp; 27 u16 bx, hbx; 28 u16 dx, hdx; 29 u16 cx, hcx; 30 u16 ax, hax; 31 u16 gs, fs; 32 u16 es, ds; 33 u16 flags, hflags; 34 }; 35 struct { 36 u8 dil, dih, edi2, edi3; 37 u8 sil, sih, esi2, esi3; 38 u8 bpl, bph, ebp2, ebp3; 39 u8 _spl, _sph, _esp2, _esp3; 40 u8 bl, bh, ebx2, ebx3; 41 u8 dl, dh, edx2, edx3; 42 u8 cl, ch, ecx2, ecx3; 43 u8 al, ah, eax2, eax3; 44 }; 45 }; 46}; 47void initregs(struct biosregs *regs); 48void intcall(u8 int_no, const struct biosregs *ireg, struct biosregs *oreg); 49static u32 *const gp = (u32*) 0x32; 50void keyboard_set_repeat(void) 51{ 52 struct biosregs ireg; 53 *gp = 10; 54 initregs(&ireg); 55 ireg.ax = 0x0305; 56 intcall(0x16, &ireg, ((void *)0)); 57} 58 59/* { dg-final { scan-tree-dump-times "ireg.*ax" 1 "optimized"} } */ 60 61/* { dg-final { cleanup-tree-dump "optimized" } } */ 62