--- a/hotspot/src/os_cpu/linux_x86/vm/linux_x86_32.s Wed Jun 09 18:50:45 2010 -0700
+++ b/hotspot/src/os_cpu/linux_x86/vm/linux_x86_32.s Thu Jun 10 13:04:20 2010 -0700
@@ -121,10 +121,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
@@ -159,10 +159,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)
@@ -214,10 +214,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
@@ -250,9 +250,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)
@@ -287,11 +287,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
@@ -454,12 +455,13 @@
ret
.=.+10
2: subl %esi,%edi
+ jmp 4f
.p2align 4,,15
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
@@ -467,19 +469,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
.p2align 4,,15
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