Thanks for the help. I’ve tried the executable you sent, but it still makes use of SSE2/SSE3 instructions, so it does not work on my CPU. I’ve checked that these instructions come from the executable file, not one of the DLLs it uses.
Did you clean the project before compiling it with SSE-only support?
Reading through the disassembly code, I have the feeling the problem does not come from Audacity directly, but from one of the static library it uses: libnyquist. Can you recompile it or do you use a pre-compiled library file?
BTW, you linked it against Visual Studio 12 (2013), and since the official 2.1.0 Audacity executable is linked against VS 9 (2008), only the DLLs for VS 9 are present in the Audacity install folder (MSVCP90.DLL & MSVCR90.DLL) while your executable requires the DLLs for VS12 (MSVCP120.DLL & MSVCR120.DLL). I retrieved them using the corresponding VC++ redistributable packages anyway.
Sorry, by AC I meant Audacity, because I used to call it AudioCity in the past, hence the irrelevant abbreviation
As for adding support for old CPUs in next versions, no problem. Anyway, as long as older releases are downloadable, I guess users with old CPUs can content themselves with the 2.0.6 release. Maybe adding a message on the download page about the need for SSE2/SSE3 support in new releases could help these users to download the correct files though.
Ignore what I wrote about the wrong VS version: I put the executable in the 2.0.6 folder, not the 2.1.0 folder. Anyway, the rest is correct.
Also, the file “wxmsw28u_core_vc_custom.dll” also contains SSE2 instructions, so recompiling only the Audacity executable will probably not be enough. I’ll understand if you think recompiling all those files is too much work
I believe I cleaned it. I simply followed /arch (x86) | Microsoft Learn to change code generation for Audacity to SSE.
Libnyquist is just source code in the lib-src tree for third-party libraries.
Changing Audacity to SSE does not change any of the third-party libraries to SSE according to their property pages, so if any of those libraries presents a problem those would have to be changed to SSE too.
It could perhaps be added to the system requirements when we are 100% clear what the issues are.
The five wx* DLL’s Audacity uses come from compiling the wxWidgets sources with Visual Studio. So yes the Widgets libs could be recompiled with SSE instructions. Yes I could do that when I have time but I would have to make a new widgets tree so that I don’t mess up the builds that we are supposed to be providing.
Have you considered installing VS2008 (which would default to SSE and which is the supported VS version for XP) and compiling wxWidgets 2.8.12 then Audacity yourself? Audacity 2.1.0 “may” still compile with VS2008 as long as you use the “audacity-vs2008_OBSOLETE.sln”. This might be the quickest solution for you for 2.1.0 if it can still be compiled with VS2008.
Audacity will eventually move from wx2.8.12 to wx3.x (we’re making some changes now). When that process completes it will probably be increasingly unlikely that the VS2008 solution will still work.
Good suggestion! Actually, I managed to install VS2013 on my laptop, so I’m now able to build Audacity 2.1.0 the same way as for the official release. Of course, the result still does not run on my old computer, but at least I can now tweak the build configuration to force SSE only for all projects (wxWidgets, Audacity and its libs). I didn’t have the time to do so yet, but I’ll post the result when available.
After compiling both Audacity and wxWidgets using VS2013 with and without SSE only support, I can confirm that the only solution that works with my SSE only CPU is when both Audacity and wxWidgets projects are compiled with SSE only support. When only one of them is compiled with SSE only support, the illegal instruction error makes Audacity crash at startup. Also, all the projects of both VS solutions need to be compiled with SSE only support (i.e., each vcxproj files need to be set with SSE only).
I’ve attached the patches I used to end up with Audacity binaries that work with my CPU. As there are lots of project and build configuration, I’ve used the sed command to modify all the vcxproj files automatically. Unfortunately, I can’t distribute these binaries.
So, this should confirm that the issue this thread is about is only related to SSE2 instructions. Of course, the decision about the solutions that should be applied in order to address this issue is up to the Audacity team, but there are only two choices in my opinion: drop SSE2 support in the next releases, or indicate (on the download page?) to the users that SSE2 support is required for the 2.1.0 release and above. sse_only-patches.zip (7.31 KB)