-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
missing clobber in x86/x86_64 blas_quickdivide #2014
Comments
Good catch, thanks. Unfortunately this kind of coding used to work (by chance) with earlier compilers, and several variations of this theme have been exposed by gcc8/gcc9 recently. |
For modern architectures , like this century, quickdivide can be |
Probably does not hurt to keep doing it in inline assembly as long as it is done right... |
This now seems to have unwanted side effects on at least a few of the Travis setups, when I try to declare blas_quickdivide as "unsigned int" rather than just "int" I get what looks like just the same crashes. Possibly tying the input operand to the output collides with the "input/output" designation of the latter at least for some versions of gcc and/or binutils. |
"mul" returns its value in EDX:EAX, i.e. the eax register no longer contains its initial value.
An input register can no be specified as clobbered directly
https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
The following change in common_x86.h, common_x86_64.h solves the problem:
The current code crashes in e.g. inner_thread on x86, x86_64 is fine by chance.
x86:
x86_64:
The text was updated successfully, but these errors were encountered: