https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85525

--- Comment #7 from Tom Ritter <tom at ritter dot vg> ---
I'm compiling some AVX code with MinGW+gcc.  I'm afraid it's difficult to
create a test case, but I think there's an alignment issue here.

Registers at crash site:

rbp is 0x00 % 20

> 0:000> r
> rax=0000000015ce306b rbx=0000000000656930 rcx=000000001f1ba500
> rdx=0000000000000000 rsi=0000000000000000 rdi=0000000000656440
> rip=00000000072656fa rsp=0000000000656bc0 rbp=0000000000657060
> r8=000000001fc0f0a0  r9=0000000000000018 r10=000000001fc0f0a0
> r11=000000001f75bcff r12=0000000000657c90 r13=000000000000000f
> r14=0000000000000000 r15=0000000000000000
> iopl=0         nv up ei pl nz na po nc
> cs=0033  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010204
> xul!XRE_GetBootstrap+0x256380a:
> 00000000`072656fa c5fd7f45f0      vmovdqa ymmword ptr [rbp-10h],ymm0 
> ss:00000000`00657050=17


Disassembly:

vmovdqa expects 0x20 alignment
but offset by 0x10:
00000000`072356fa c5fd7f45f0      vmovdqa ymmword ptr [rbp-10h],ymm0

I've attached the disassembly.


The c++ code is attached and also at:
https://searchfox.org/mozilla-central/rev/36dec78aecc40539ecc8d78e91612e38810f963c/gfx/skia/skia/src/opts/SkOpts_hsw.cpp

There is a function; convolve_16_pixels that corresponds to
xul!XRE_GetBootstrap+0x6676510 in the attached disassembly



It was pointed out that

00000000`07235595 48c1e805        shr     rax,5
00000000`07235599 48c1e005        shl     rax,5
00000000`0723559d 4889c3          mov     rbx,rax

aligns rbx at the entry to the function, so it can safely do things like
vmovdqa ymmword ptr [rbx+3E0h],ymm0

However rbp does not get the same alignment treatment, and operations offset
from it may not be correctly aligned.

Reply via email to