1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# rep, repe (repz) and repne (repnz) prefixed string instructions 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# only count as one instruction, even though they repeat many times 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# This test makes sure the bbv plugin counts these instructions properly 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# The answer is validated to hw perf counters. 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .globl _start 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown_start: 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown cld # we want these to happen forward 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #=================================== 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # Check varied order of the size prefix 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # with the rep prefix. Older binutils 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # did this one way, newer binutils the other 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #=================================== 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownsize_prefix: 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 16-bit load 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $8192, %ecx 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %esi # set source 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .byte 0x66, 0xf3, 0xad # lodsw 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $8192, %ecx 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %esi # set source 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .byte 0xf3, 0x66, 0xad # lodsw 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #=================================== 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # Load and Store Instructions 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #=================================== 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownloadstore: 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown xor %eax, %eax 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $0xd, %al # set eax to d 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 8-bit store 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $16384, %ecx 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %edi # set destination 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep stosb # store d 16384 times, auto-increment 44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 8-bit load 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $16384, %ecx 48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %esi # set source 49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep lodsb # load byte 16384 times, auto-increment 50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown cmp $0xd,%al # if we loaded wrong value 52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jne print_error # print an error 53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 16-bit store 55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $0x020d,%ax # store 0x020d 57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $8192, %ecx 59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %edi # set destination 60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep stosw # store 8192 times, auto-increment 61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 16-bit load 63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $8192, %ecx 65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %esi # set source 66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep lodsw # load 8192 times, auto-increment 67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown cmp $0x020d,%ax # if we loaded wrong value 69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jne print_error # print an error 70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 32-bit store 72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $0x0feb1378,%eax # store 0x0feb1378 74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $4096, %ecx 76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %edi # set destination 77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep stosl # store 4096 times, auto-increment 78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 32-bit load 80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $4096, %ecx 82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %esi # set source 83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep lodsl # load 4096 times, auto-increment 84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown cmp $0x0feb1378,%eax # if we loaded wrong value 86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jne print_error # print an error 87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #============================= 89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # Move instructions 90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #============================= 91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownmoves: 92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 8-bit move 93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $16384, %ecx 95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %esi 96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer2, %edi 97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep movsb 98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 16-bit move 100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $8192, %ecx 102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer2, %esi 103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %edi 104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep movsw 105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 32-bit move 107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $4096, %ecx 109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %esi 110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer2, %edi 111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep movsl 112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #================================== 114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # Compare equal instructions 115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #================================== 116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browncompare_equal: 117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # first set up the areas to compare 118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $0xa5a5a5a5,%eax 120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %edi 121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $4096, %ecx 122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep stosl 123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $0xa5a5a5a5,%eax 125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer2, %edi 126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $4096, %ecx 127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep stosl 128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 8-bit 130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1,%esi 132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer2,%edi 133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $16384, %ecx 134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown repe cmpsb 135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jnz print_error 136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 16-bit 138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1,%esi 140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer2,%edi 141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $8192, %ecx 142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown repe cmpsw 143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jnz print_error 144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 32-bit 146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1,%esi 148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer2,%edi 149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $4096, %ecx 150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown repe cmpsl 151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jnz print_error 152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #================================== 154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # Compare not equal instructions 155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #================================== 156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browncompare_noteq: 157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # change second buffer 158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $0x5a5a5a5a,%eax 160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer2, %edi 161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $4096, %ecx 162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep stosl 163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 8-bit 165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1,%esi 167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer2,%edi 168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $16384, %ecx 169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown repne cmpsb 170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown je print_error 171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 16-bit 173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1,%esi 175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer2,%edi 176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $8192, %ecx 177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown repne cmpsw 178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown je print_error 179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 32-bit 181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1,%esi 183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer2,%edi 184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $4096, %ecx 185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown repne cmpsl 186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown je print_error 187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #==================================== 189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # Check scan equal instruction 190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #==================================== 191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 8-bit 193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $0xa5,%al 195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1,%edi 196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $16384, %ecx 197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown repe scasb 198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jnz print_error 199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 16-bit 201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $0xa5a5,%ax 203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1,%edi 204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $8192, %ecx 205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown repe scasw 206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jnz print_error 207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 32-bit 209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $0xa5a5a5a5,%eax 211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1,%edi 212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $4096, %ecx 213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown repe scasl 214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jnz print_error 215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #==================================== 217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # Check scan not-equal instruction 218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #==================================== 219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 8-bit 221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $0xa5,%al 223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer2,%edi 224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $16384, %ecx 225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown repne scasb 226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jz print_error 227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 16-bit 229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $0xa5a5,%ax 231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer2,%edi 232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $8192, %ecx 233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown repne scasw 234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jz print_error 235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test 32-bit 237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $0xa5a5a5a5,%eax 239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer2,%edi 240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $4096, %ecx 241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown repne scasl 242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jz print_error 243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jmp exit # no error, skip to exit 245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownprint_error: 247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $4, %eax # Write syscall 249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef VGO_darwin 250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl $1 251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl $error_string 252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl $16 253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $1, %ebx # print to stdout 255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $error_string, %ecx # string to print 256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $16, %edx # strlen 257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int $0x80 # call syscall 259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #================================ 261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # Exit 262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #================================ 263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownexit: 264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef VGO_darwin 265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown xor %ebx,%ebx # we return 0 266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl $0 # we return 0 268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown xor %eax,%eax 270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown inc %eax # put exit syscall number (1) in eax 271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int $0x80 # and exit 272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown.data 275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownerror_string: .asciz "Error detected!\n" 276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#.bss 278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown.lcomm buffer1, 16384 280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown.lcomm buffer2, 16384 281