| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fno-strict-aliasing -fdump-tree-optimized" } */ |
| |
| typedef unsigned u32; |
| typedef unsigned short u16; |
| typedef unsigned char u8; |
| struct biosregs { |
| union { |
| struct { |
| u32 edi; |
| u32 esi; |
| u32 ebp; |
| u32 _esp; |
| u32 ebx; |
| u32 edx; |
| u32 ecx; |
| u32 eax; |
| u32 _fsgs; |
| u32 _dses; |
| u32 eflags; |
| }; |
| struct { |
| u16 di, hdi; |
| u16 si, hsi; |
| u16 bp, hbp; |
| u16 _sp, _hsp; |
| u16 bx, hbx; |
| u16 dx, hdx; |
| u16 cx, hcx; |
| u16 ax, hax; |
| u16 gs, fs; |
| u16 es, ds; |
| u16 flags, hflags; |
| }; |
| struct { |
| u8 dil, dih, edi2, edi3; |
| u8 sil, sih, esi2, esi3; |
| u8 bpl, bph, ebp2, ebp3; |
| u8 _spl, _sph, _esp2, _esp3; |
| u8 bl, bh, ebx2, ebx3; |
| u8 dl, dh, edx2, edx3; |
| u8 cl, ch, ecx2, ecx3; |
| u8 al, ah, eax2, eax3; |
| }; |
| }; |
| }; |
| void initregs(struct biosregs *regs); |
| void intcall(u8 int_no, const struct biosregs *ireg, struct biosregs *oreg); |
| static u32 *const gp = (u32*) 0x32; |
| void keyboard_set_repeat(void) |
| { |
| struct biosregs ireg; |
| *gp = 10; |
| initregs(&ireg); |
| ireg.ax = 0x0305; |
| intcall(0x16, &ireg, ((void *)0)); |
| } |
| |
| /* { dg-final { scan-tree-dump-times "ireg.*ax" 1 "optimized"} } */ |
| |