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