1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h> 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid do_pushb_pos ( void ) 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int block[3]; 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ( 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %0, %%edx\n\t" 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "pushl $0x55555555\n\t" 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 0(%%edx)\n\t" 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ".byte 0x6A,0x22\n\t" 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 4(%%edx)\n\t" 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "popl %%eax\n\t" 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%eax,8(%%edx)\n\t" 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl 0(%%edx),%%esp\n\t" 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "addl $4, %%esp" 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : : "r"(&block) : "eax","edx","cc","memory" 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" pushb_pos: delta %d, top32 0x%08x\n", 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown block[0] - block[1], block[2]); 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid do_pushb_neg ( void ) 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int block[3]; 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ( 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %0, %%edx\n\t" 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "pushl $0x55555555\n\t" 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 0(%%edx)\n\t" 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ".byte 0x6A,0xEE\n\t" 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 4(%%edx)\n\t" 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "popl %%eax\n\t" 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%eax,8(%%edx)\n\t" 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl 0(%%edx),%%esp\n\t" 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "addl $4, %%esp" 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : : "r"(&block) : "eax","edx","cc","memory" 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" pushb_neg: delta %d, top32 0x%08x\n", 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown block[0] - block[1], block[2]); 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid do_pushw_pos ( void ) 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int block[3]; 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ( 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %0, %%edx\n\t" 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "pushl $0x55555555\n\t" 48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 0(%%edx)\n\t" 49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "pushw $0x3344\n\t" 50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 4(%%edx)\n\t" 51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "popl %%eax\n\t" 52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%eax,8(%%edx)\n\t" 53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl 0(%%edx),%%esp\n\t" 54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "addl $4, %%esp" 55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : : "r"(&block) : "eax","edx","cc","memory" 56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" pushw_neg: delta %d, top32 0x%08x\n", 58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown block[0] - block[1], block[2]); 59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid do_pushw_neg ( void ) 62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int block[3]; 64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ( 65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %0, %%edx\n\t" 66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "pushl $0x55555555\n\t" 67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 0(%%edx)\n\t" 68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "pushw $0xDDCC\n\t" 69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 4(%%edx)\n\t" 70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "popl %%eax\n\t" 71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%eax,8(%%edx)\n\t" 72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl 0(%%edx),%%esp\n\t" 73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "addl $4, %%esp" 74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : : "r"(&block) : "eax","edx","cc","memory" 75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" pushw_pos: delta %d, top32 0x%08x\n", 77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown block[0] - block[1], block[2]); 78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid do_pushl_pos ( void ) 81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int block[3]; 83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ( 84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %0, %%edx\n\t" 85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "pushl $0x55555555\n\t" 86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 0(%%edx)\n\t" 87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "pushl $0x67675656\n\t" 88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 4(%%edx)\n\t" 89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "popl %%eax\n\t" 90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%eax,8(%%edx)\n\t" 91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl 0(%%edx),%%esp\n\t" 92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "addl $4, %%esp" 93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : : "r"(&block) : "eax","edx","cc","memory" 94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" pushl_pos: delta %d, top32 0x%08x\n", 96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown block[0] - block[1], block[2]); 97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid do_pushl_neg ( void ) 100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int block[3]; 102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ( 103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %0, %%edx\n\t" 104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "pushl $0x55555555\n\t" 105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 0(%%edx)\n\t" 106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "pushl $0x98988787\n\t" 107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 4(%%edx)\n\t" 108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "popl %%eax\n\t" 109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%eax,8(%%edx)\n\t" 110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl 0(%%edx),%%esp\n\t" 111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "addl $4, %%esp" 112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : : "r"(&block) : "eax","edx","cc","memory" 113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf(" pushl_neg: delta %d, top32 0x%08x\n", 115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown block[0] - block[1], block[2]); 116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid do_66pushb_pos ( void ) 120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int block[3]; 122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ( 123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %0, %%edx\n\t" 124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "pushl $0x55555555\n\t" 125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 0(%%edx)\n\t" 126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ".byte 0x66,0x6A,0x22\n\t" 127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 4(%%edx)\n\t" 128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "popl %%eax\n\t" 129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%eax,8(%%edx)\n\t" 130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl 0(%%edx),%%esp\n\t" 131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "addl $4, %%esp" 132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : : "r"(&block) : "eax","edx","cc","memory" 133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("66pushb_pos: delta %d, top32 0x%08x\n", 135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown block[0] - block[1], block[2]); 136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid do_66pushb_neg ( void ) 139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned int block[3]; 141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown __asm__ __volatile__ ( 142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %0, %%edx\n\t" 143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "pushl $0x55555555\n\t" 144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 0(%%edx)\n\t" 145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ".byte 0x66,0x6A,0xEE\n\t" 146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%esp, 4(%%edx)\n\t" 147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "popl %%eax\n\t" 148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl %%eax,8(%%edx)\n\t" 149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "movl 0(%%edx),%%esp\n\t" 150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown "addl $4, %%esp" 151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown : : "r"(&block) : "eax","edx","cc","memory" 152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ); 153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("66pushb_neg: delta %d, top32 0x%08x\n", 154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown block[0] - block[1], block[2]); 155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main ( void ) 159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_pushb_pos(); 161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_pushb_neg(); 162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_pushw_pos(); 163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_pushw_neg(); 164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_pushl_pos(); 165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_pushl_neg(); 166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_66pushb_pos(); 168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_66pushb_neg(); 169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 171