hotspot/src/os_cpu/solaris_x86/vm/solaris_x86_32.s
changeset 5883 8dc4bdc132d5
parent 5547 f4b087cbb361
child 7662 5f31baaff55b
equal deleted inserted replaced
5882:6b2aecc4f7d8 5883:8dc4bdc132d5
   152         addl     $4,%esi
   152         addl     $4,%esi
   153         subl     $1,%ecx
   153         subl     $1,%ecx
   154         jnz      3b
   154         jnz      3b
   155         addl     %esi,%edi
   155         addl     %esi,%edi
   156 4:      movl     %eax,%ecx            / byte count less prefix
   156 4:      movl     %eax,%ecx            / byte count less prefix
   157         andl     $3,%ecx              / suffix byte count
   157 5:      andl     $3,%ecx              / suffix byte count
   158         jz       7f                   / no suffix
   158         jz       7f                   / no suffix
   159         / copy suffix
   159         / copy suffix
   160 5:      xorl     %eax,%eax
   160         xorl     %eax,%eax
   161 6:      movb     (%esi,%eax,1),%dl
   161 6:      movb     (%esi,%eax,1),%dl
   162         movb     %dl,(%edi,%eax,1)
   162         movb     %dl,(%edi,%eax,1)
   163         addl     $1,%eax
   163         addl     $1,%eax
   164         subl     $1,%ecx
   164         subl     $1,%ecx
   165         jnz      6b
   165         jnz      6b
   190         addl     %esi,%edi
   190         addl     %esi,%edi
   191         jmp      4f
   191         jmp      4f
   192         / copy dwords, aligned or not
   192         / copy dwords, aligned or not
   193 3:      rep;     smovl
   193 3:      rep;     smovl
   194 4:      movl     %eax,%ecx            / byte count
   194 4:      movl     %eax,%ecx            / byte count
   195         andl     $3,%ecx              / suffix byte count
   195 5:      andl     $3,%ecx              / suffix byte count
   196         jz       7f                   / no suffix
   196         jz       7f                   / no suffix
   197         / copy suffix
   197         / copy suffix
   198 5:      subl     %esi,%edi
   198         subl     %esi,%edi
   199         addl     $3,%esi
   199         addl     $3,%esi
   200 6:      movb     (%esi),%dl
   200 6:      movb     (%esi),%dl
   201         movb     %dl,(%edi,%esi,1)
   201         movb     %dl,(%edi,%esi,1)
   202 	subl     $1,%esi
   202 	subl     $1,%esi
   203         subl     $1,%ecx
   203         subl     $1,%ecx
   244         addl     %esi,%edi
   244         addl     %esi,%edi
   245         jmp      4f
   245         jmp      4f
   246         / copy aligned dwords
   246         / copy aligned dwords
   247 3:      rep;     smovl
   247 3:      rep;     smovl
   248 4:      movl     %eax,%ecx
   248 4:      movl     %eax,%ecx
   249         andl     $3,%ecx
   249 5:      andl     $3,%ecx
   250         jz       7f
   250         jz       7f
   251         / copy suffix
   251         / copy suffix
   252 5:      xorl     %eax,%eax
   252         xorl     %eax,%eax
   253 6:      movb     (%esi,%eax,1),%dl
   253 6:      movb     (%esi,%eax,1),%dl
   254         movb     %dl,(%edi,%eax,1)
   254         movb     %dl,(%edi,%eax,1)
   255         addl     $1,%eax
   255         addl     $1,%eax
   256         subl     $1,%ecx
   256         subl     $1,%ecx
   257         jnz      6b
   257         jnz      6b
   280         subl     $4,%esi
   280         subl     $4,%esi
   281         subl     $1,%ecx
   281         subl     $1,%ecx
   282         jnz      3b
   282         jnz      3b
   283         addl     %esi,%edi
   283         addl     %esi,%edi
   284 4:      movl     %eax,%ecx
   284 4:      movl     %eax,%ecx
   285         andl     $3,%ecx
   285 5:      andl     $3,%ecx
   286         jz       7f
   286         jz       7f
   287 5:      subl     %esi,%edi
   287         subl     %esi,%edi
   288         addl     $3,%esi
   288         addl     $3,%esi
   289 6:      movb     (%esi),%dl
   289 6:      movb     (%esi),%dl
   290         movb     %dl,(%edi,%esi,1)
   290         movb     %dl,(%edi,%esi,1)
   291 	subl     $1,%esi
   291 	subl     $1,%esi
   292         subl     $1,%ecx
   292         subl     $1,%ecx
   316         / align source address at dword address boundary
   316         / align source address at dword address boundary
   317         movl     %esi,%eax            / original from
   317         movl     %esi,%eax            / original from
   318         andl     $3,%eax              / either 0 or 2
   318         andl     $3,%eax              / either 0 or 2
   319         jz       1f                   / no prefix
   319         jz       1f                   / no prefix
   320         / copy prefix
   320         / copy prefix
       
   321         subl     $1,%ecx
       
   322         jl       5f                   / zero count
   321         movw     (%esi),%dx
   323         movw     (%esi),%dx
   322         movw     %dx,(%edi)
   324         movw     %dx,(%edi)
   323         addl     %eax,%esi            / %eax == 2
   325         addl     %eax,%esi            / %eax == 2
   324         addl     %eax,%edi
   326         addl     %eax,%edi
   325         subl     $1,%ecx
       
   326 1:      movl     %ecx,%eax            / word count less prefix
   327 1:      movl     %ecx,%eax            / word count less prefix
   327         sarl     %ecx                 / dword count
   328         sarl     %ecx                 / dword count
   328         jz       4f                   / no dwords to move
   329         jz       4f                   / no dwords to move
   329         cmpl     $32,%ecx
   330         cmpl     $32,%ecx
   330         jbe      2f                   / <= 32 dwords
   331         jbe      2f                   / <= 32 dwords
   480         popl     %edi
   481         popl     %edi
   481         popl     %esi
   482         popl     %esi
   482         ret
   483         ret
   483         .=.+10
   484         .=.+10
   484 2:      subl     %esi,%edi
   485 2:      subl     %esi,%edi
       
   486         jmp      4f
   485         .align   16
   487         .align   16
   486 3:      movl     (%esi),%edx
   488 3:      movl     (%esi),%edx
   487         movl     %edx,(%edi,%esi,1)
   489         movl     %edx,(%edi,%esi,1)
   488         addl     $4,%esi
   490         addl     $4,%esi
   489         subl     $1,%ecx
   491 4:      subl     $1,%ecx
   490         jnz      3b
   492         jge      3b
   491         popl     %edi
   493         popl     %edi
   492         popl     %esi
   494         popl     %esi
   493         ret
   495         ret
   494 ci_CopyLeft:
   496 ci_CopyLeft:
   495         std
   497         std
   496         leal     -4(%edi,%ecx,4),%edi / to + count*4 - 4
   498         leal     -4(%edi,%ecx,4),%edi / to + count*4 - 4
   497         cmpl     $32,%ecx
   499         cmpl     $32,%ecx
   498         ja       3f                   / > 32 dwords
   500         ja       4f                   / > 32 dwords
   499         subl     %eax,%edi            / eax == from + count*4 - 4
   501         subl     %eax,%edi            / eax == from + count*4 - 4
       
   502         jmp      3f
   500         .align   16
   503         .align   16
   501 2:      movl     (%eax),%edx
   504 2:      movl     (%eax),%edx
   502         movl     %edx,(%edi,%eax,1)
   505         movl     %edx,(%edi,%eax,1)
   503         subl     $4,%eax
   506         subl     $4,%eax
   504         subl     $1,%ecx
   507 3:      subl     $1,%ecx
   505         jnz      2b
   508         jge      2b
   506         cld
   509         cld
   507         popl     %edi
   510         popl     %edi
   508         popl     %esi
   511         popl     %esi
   509         ret
   512         ret
   510 3:      movl     %eax,%esi            / from + count*4 - 4
   513 4:      movl     %eax,%esi            / from + count*4 - 4
   511         rep;     smovl
   514         rep;     smovl
   512         cld
   515         cld
   513         popl     %edi
   516         popl     %edi
   514         popl     %esi
   517         popl     %esi
   515         ret
   518         ret