Merge pull request #1542 from martin-frbg/quickdiv64

Avoid out-of-bounds accesses in blas_quickdivide on big X86 systems
This commit is contained in:
Martin Kroeker 2018-05-02 18:11:50 +02:00 committed by GitHub
commit 88e224f4c0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 1 deletions

View File

@ -178,6 +178,12 @@ static __inline int blas_quickdivide(unsigned int x, unsigned int y){
result = x/y; result = x/y;
return result; return result;
#else #else
#if (MAX_CPU_NUMBER > 64)
if ( y > 64) {
result = x/y;
return result;
}
#endif
y = blas_quick_divide_table[y]; y = blas_quick_divide_table[y];

View File

@ -196,6 +196,13 @@ static __inline int blas_quickdivide(unsigned int x, unsigned int y){
if (y <= 1) return x; if (y <= 1) return x;
#if (MAX_CPU_NUMBER > 64)
if (y > 64) {
result = x / y;
return result;
}
#endif
y = blas_quick_divide_table[y]; y = blas_quick_divide_table[y];
__asm__ __volatile__ ("mull %0" :"=d" (result) :"a"(x), "0" (y)); __asm__ __volatile__ ("mull %0" :"=d" (result) :"a"(x), "0" (y));