1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Test for long-form encodings of push %reg */
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h>
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint foo ( int x )
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int block[2];
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  block[0] = x;
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  block[1] = 0;
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __asm__ __volatile__(
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    "movl $0,%%edi\n\t"
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    "movl $0,%%esi\n\t"
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    "movl %0,%%edi\n\t"
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    ".byte   0xFF,0xF7\n\t" /*pushl %edi */
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    "popl %%esi\n\t"
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    "movl %%esi, %1"
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    : : /*in*/ "m"(block[0]), "m"(block[1]) : "esi","edi","memory"
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  );
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return block[1];
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main ( void )
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int i;
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  for (i = 0; i < 100000000; i += 11111111)
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    printf("%d %d\n",i,foo(i));
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return 0;
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
30