Fixed overflow internal buffer bug of (s/d/c/z)gemv on x86.
This commit is contained in:
+13
-16
@@ -76,7 +76,7 @@
|
||||
#endif
|
||||
|
||||
#define STACKSIZE 16
|
||||
#define ARGS 16
|
||||
#define ARGS 20
|
||||
|
||||
#define M 4 + STACKSIZE+ARGS(%esp)
|
||||
#define N 8 + STACKSIZE+ARGS(%esp)
|
||||
@@ -89,10 +89,9 @@
|
||||
#define STACK_INCY 44 + STACKSIZE+ARGS(%esp)
|
||||
#define BUFFER 48 + STACKSIZE+ARGS(%esp)
|
||||
|
||||
#define MMM 0+STACKSIZE(%esp)
|
||||
#define AA 4+STACKSIZE(%esp)
|
||||
#define LDAX 8+STACKSIZE(%esp)
|
||||
#define NN 12+STACKSIZE(%esp)
|
||||
#define MMM 0+ARGS(%esp)
|
||||
#define AA 4+ARGS(%esp)
|
||||
#define XX 8+ARGS(%esp)
|
||||
|
||||
#define I %eax
|
||||
#define J %ebx
|
||||
@@ -117,10 +116,8 @@
|
||||
PROFCODE
|
||||
|
||||
|
||||
movl STACK_LDA, LDA
|
||||
movl LDA,LDAX # backup LDA
|
||||
movl N,J
|
||||
movl J,NN # backup N
|
||||
movl STACK_X, X
|
||||
movl X,XX
|
||||
movl A,J
|
||||
movl J,AA # backup A
|
||||
movl M,J
|
||||
@@ -130,7 +127,6 @@
|
||||
addl $1,J
|
||||
sall $21,J # J=2^21*sizeof(double)=buffer size(16MB)
|
||||
subl $4, J # Don't use last 4 double in the buffer.
|
||||
# Now, split M by block J
|
||||
subl J,MMM # MMM=MMM-J
|
||||
movl J,M
|
||||
jge .L00t
|
||||
@@ -142,15 +138,13 @@
|
||||
movl %eax,M
|
||||
|
||||
.L00t:
|
||||
movl XX,%eax
|
||||
movl %eax, X
|
||||
|
||||
movl AA,%eax
|
||||
movl %eax,A # mov AA to A
|
||||
|
||||
movl NN,%eax
|
||||
movl %eax,N # reset N
|
||||
|
||||
|
||||
movl LDAX, LDA # reset LDA
|
||||
movl STACK_X, X
|
||||
movl STACK_LDA, LDA
|
||||
movl STACK_INCX, INCX
|
||||
movl STACK_INCY, INCY
|
||||
|
||||
@@ -605,6 +599,9 @@
|
||||
movl M,J
|
||||
leal (,J,SIZE),%eax
|
||||
addl %eax,AA
|
||||
movl STACK_INCX,INCX
|
||||
imull INCX,%eax
|
||||
addl %eax,XX
|
||||
jmp .L0t
|
||||
ALIGN_4
|
||||
|
||||
|
||||
Reference in New Issue
Block a user