bug135421-x86.c revision ed07e00d438c74b7a23c01bfffde77e3968305e4
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/* Test for long-form encodings of push %reg */
35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <stdio.h>
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattnerint foo ( int x )
75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer{
85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  int block[2];
95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  block[0] = x;
105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  block[1] = 0;
115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  __asm__ __volatile__(
125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    "movl $0,%%edi\n\t"
135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    "movl $0,%%esi\n\t"
145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    "movl %0,%%edi\n\t"
155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    ".byte   0xFF,0xF7\n\t" /*pushl %edi */
165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    "popl %%esi\n\t"
17a9d9145741ef77db45890911674705b81605b10bChris Lattner    "movl %%esi, %1"
185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    : : /*in*/ "m"(block[0]), "m"(block[1]) : "esi","edi","memory"
19f47724bf78299c7a50f008e0443c5f9f9f279ddcChris Lattner  );
20500d3297d2a21edeac4d46cbcbe21bc2352c2a28Chris Lattner  return block[1];
215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}
225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
23ff759a66526d6a985fb4efae69c6b798d83364dfDaniel Dunbarint main ( void )
245505413ee8e4e2924f52ba81181071f3a492e7d9Daniel Dunbar{
252e22253e03e175144aeb9d13350a12fd83f858beDouglas Gregor  int i;
265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  for (i = 0; i < 100000000; i += 11111111)
275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    printf("%d %d\n",i,foo(i));
285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  return 0;
295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}
305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer