You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
1.7 KiB

/*
* Copyright 2002-2019 Intel Corporation.
*
* This software is provided to you as Sample Source Code as defined in the accompanying
* End User License Agreement for the Intel(R) Software Development Products ("Agreement")
* section 1.L.
*
* This software and the related documents are provided as is, with no express or implied
* warranties, other than those that are expressly stated in the License.
*/
/*! @file
* This file contains the assembly source of Pin unit test repcmpsz_tool
*/
.data
one:
.string "IAMHEREE"
strlen = . - one
two:
.string "IWASHERE"
.text
.globl _start
#ifdef TARGET_LINUX
.type _start, @function
#endif
_start:
fnop
cld
xor %ebx, %ebx # %ebx holds test number (used as exit code on failure)
# Test different string comparison
inc %ebx
lea one, %esi
lea two, %edi
mov $strlen,%ecx
repe cmpsb
cmp $(strlen-2),%ecx # Should fail at second byte
jne 2f
# Test same string comparison
inc %ebx
lea one, %esi
lea one, %edi
mov $strlen,%ecx
repe cmpsb
test %ecx,%ecx # Should run full length
jne 2f
# Test same string comparison, but with no count...
inc %ebx
lea one, %esi
lea one, %edi
xor %ecx,%ecx
repe cmpsb
test %ecx,%ecx # Should still be zero
jne 2f
# Test scasd
inc %ebx
movl one, %eax
lea two, %edi
scasw
mov %eax,%ecx
# and exit
movl $0,%ebx # Linux first argument: exit code
2:
push %ebx # macOS* expects args on the stack
push %ebx
movl $0x1,%eax # system call number (sys_exit)
int $0x80 # call kernel
fnop