< prev index next >

src/os_cpu/solaris_x86/vm/solaris_x86_32.s

Print this page




 626         subl     $4,%esi
 627         subl     $1,%ecx
 628         jnz      2b
 629         addl     %esi,%edi
 630         jmp      4f
 631 3:      rep;     smovl
 632 4:      andl     $1,%eax
 633         je       6f
 634         addl     $2,%esi
 635         addl     $2,%edi
 636 5:      movw     (%esi),%dx
 637         movw     %dx,(%edi)
 638 6:      cld
 639         popl     %edi
 640         popl     %esi
 641         ret
 642 
 643 
 644         / Support for jlong Atomic::cmpxchg(jlong exchange_value,
 645         /                                   volatile jlong* dest,
 646         /                                   jlong compare_value,
 647         /                                   bool is_MP)
 648         / Used only for Solaris/gcc builds
 649         .align 16
 650 _Atomic_cmpxchg_long_gcc:
 651                                    /  8(%esp) : return PC
 652         pushl    %ebx              /  4(%esp) : old %ebx
 653         pushl    %edi              /  0(%esp) : old %edi
 654         movl     12(%esp), %ebx    / 12(%esp) : exchange_value (low)
 655         movl     16(%esp), %ecx    / 16(%esp) : exchange_value (high)
 656         movl     24(%esp), %eax    / 24(%esp) : compare_value (low)
 657         movl     28(%esp), %edx    / 28(%esp) : compare_value (high)
 658         movl     20(%esp), %edi    / 20(%esp) : dest
 659         cmpl     $0, 32(%esp)      / 32(%esp) : is_MP
 660         je       1f
 661         lock
 662 1:      cmpxchg8b (%edi)
 663         popl     %edi
 664         popl     %ebx
 665         ret


 626         subl     $4,%esi
 627         subl     $1,%ecx
 628         jnz      2b
 629         addl     %esi,%edi
 630         jmp      4f
 631 3:      rep;     smovl
 632 4:      andl     $1,%eax
 633         je       6f
 634         addl     $2,%esi
 635         addl     $2,%edi
 636 5:      movw     (%esi),%dx
 637         movw     %dx,(%edi)
 638 6:      cld
 639         popl     %edi
 640         popl     %esi
 641         ret
 642 
 643 
 644         / Support for jlong Atomic::cmpxchg(jlong exchange_value,
 645         /                                   volatile jlong* dest,
 646         /                                   jlong compare_value)

 647         / Used only for Solaris/gcc builds
 648         .align 16
 649 _Atomic_cmpxchg_long_gcc:
 650                                    /  8(%esp) : return PC
 651         pushl    %ebx              /  4(%esp) : old %ebx
 652         pushl    %edi              /  0(%esp) : old %edi
 653         movl     12(%esp), %ebx    / 12(%esp) : exchange_value (low)
 654         movl     16(%esp), %ecx    / 16(%esp) : exchange_value (high)
 655         movl     24(%esp), %eax    / 24(%esp) : compare_value (low)
 656         movl     28(%esp), %edx    / 28(%esp) : compare_value (high)
 657         movl     20(%esp), %edi    / 20(%esp) : dest
 658         lock cmpxchg8b (%edi)



 659         popl     %edi
 660         popl     %ebx
 661         ret
< prev index next >