You might want to try linking with wl.exe (wlink) as it seems to me the linker handles larger alignment
Unfortunately, wlink/wl does not have an option/command to set "between parts alignment" within object.
Does it need it? The version I built previously used wl for linking and seemed to align stuff correctly, though I guess maybe a coincidence.
Data for AVX instruction can be situated in many places, for .ex - stack, dynamically allocated memory, static vars, etc.
I am speaking about static variables now. Our last GCC is able generate proper .obj files with necessary alignments. But if final data object in LX module is linked from parts (from several files) we can meet and we indeed meet wrong alignment.
Compiler reflects in obj file a demand that it has to be linked with previous file with certain alignment in case current file contains data with specific alignment.
But not in our case. Historically, GCC for OS/2 uses a.out as object format. A.out is not able to carry info about requested alignment to linker that is why we meet wrong alignment in final binary.
The best solution is to use ELF format for objects files (it requested a lot of time for coding and fixing GCC for OS/2). One more way - could be just request from linker to link every data parts with 64 bytes align - but wlink does not have such option/command - so no way here.