--- a/hotspot/src/os_cpu/solaris_x86/vm/solaris_x86_32.s Wed Jun 09 18:50:45 2010 -0700
+++ b/hotspot/src/os_cpu/solaris_x86/vm/solaris_x86_32.s Thu Jun 10 13:04:20 2010 -0700
@@ -154,10 +154,10 @@
jnz 3b
addl %esi,%edi
4: movl %eax,%ecx / byte count less prefix
- andl $3,%ecx / suffix byte count
+5: andl $3,%ecx / suffix byte count
jz 7f / no suffix
/ copy suffix
-5: xorl %eax,%eax
+ xorl %eax,%eax
6: movb (%esi,%eax,1),%dl
movb %dl,(%edi,%eax,1)
addl $1,%eax
@@ -192,10 +192,10 @@
/ copy dwords, aligned or not
3: rep; smovl
4: movl %eax,%ecx / byte count
- andl $3,%ecx / suffix byte count
+5: andl $3,%ecx / suffix byte count
jz 7f / no suffix
/ copy suffix
-5: subl %esi,%edi
+ subl %esi,%edi
addl $3,%esi
6: movb (%esi),%dl
movb %dl,(%edi,%esi,1)
@@ -246,10 +246,10 @@
/ copy aligned dwords
3: rep; smovl
4: movl %eax,%ecx
- andl $3,%ecx
+5: andl $3,%ecx
jz 7f
/ copy suffix
-5: xorl %eax,%eax
+ xorl %eax,%eax
6: movb (%esi,%eax,1),%dl
movb %dl,(%edi,%eax,1)
addl $1,%eax
@@ -282,9 +282,9 @@
jnz 3b
addl %esi,%edi
4: movl %eax,%ecx
- andl $3,%ecx
+5: andl $3,%ecx
jz 7f
-5: subl %esi,%edi
+ subl %esi,%edi
addl $3,%esi
6: movb (%esi),%dl
movb %dl,(%edi,%esi,1)
@@ -318,11 +318,12 @@
andl $3,%eax / either 0 or 2
jz 1f / no prefix
/ copy prefix
+ subl $1,%ecx
+ jl 5f / zero count
movw (%esi),%dx
movw %dx,(%edi)
addl %eax,%esi / %eax == 2
addl %eax,%edi
- subl $1,%ecx
1: movl %ecx,%eax / word count less prefix
sarl %ecx / dword count
jz 4f / no dwords to move
@@ -482,12 +483,13 @@
ret
.=.+10
2: subl %esi,%edi
+ jmp 4f
.align 16
3: movl (%esi),%edx
movl %edx,(%edi,%esi,1)
addl $4,%esi
- subl $1,%ecx
- jnz 3b
+4: subl $1,%ecx
+ jge 3b
popl %edi
popl %esi
ret
@@ -495,19 +497,20 @@
std
leal -4(%edi,%ecx,4),%edi / to + count*4 - 4
cmpl $32,%ecx
- ja 3f / > 32 dwords
+ ja 4f / > 32 dwords
subl %eax,%edi / eax == from + count*4 - 4
+ jmp 3f
.align 16
2: movl (%eax),%edx
movl %edx,(%edi,%eax,1)
subl $4,%eax
- subl $1,%ecx
- jnz 2b
+3: subl $1,%ecx
+ jge 2b
cld
popl %edi
popl %esi
ret
-3: movl %eax,%esi / from + count*4 - 4
+4: movl %eax,%esi / from + count*4 - 4
rep; smovl
cld
popl %edi