1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# When trying (and failing) to instrument at the basic block level 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# I thought up a lot of corner-cases in the rep code. This tries 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# to catch some of them 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# Performance counters give us 8207 insns 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# 11 + 8*1024 + 3 = 8206 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .globl _start 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown_start: 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown cld # we want these to happen forward 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $0xfeb1378,%eax # value to store 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test back-to-back rep/stosb's 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $1024,%ecx 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %edi # set destination 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep stosb # store 1024 times 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep stosb # should store 0 times 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep stosb # should store 0 times 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test stosb where cx is 0 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown xor %ecx,%ecx 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %edi # set destination 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep stosb # should not load at all 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # test rep inside of a loop 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $1024, %ebx 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownrep_loop: 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $1024,%ecx 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %edi # set destination 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep stosb 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $1024,%ecx 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $buffer1, %edi # set destination 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rep stosb 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown dec %ebx 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown jnz rep_loop 44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #================================ 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown # Exit 48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown #================================ 49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownexit: 50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown mov $1,%eax 51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef VGO_darwin 52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pushl $0 53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else 54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown xor %ebx,%ebx # we return 0 55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int $0x80 # and exit 57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#.bss 60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown.lcomm buffer1, 16384 62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 63