Ok, once more around the block with capabilities checks.
Edit: made some changes and added more examples.
Edit2: changed checking order to all AES variables first. For this quasi-debug release it
wil continue to perform all checks. The production version will only check SSE2 in AES fails.
For the debug release SSE2 support is taken literally but in the production version it will
mean (SSE2 && !AES) to the YES/NO response is more appropriate.
I am trying out a more detailed permissive check that will display all variables used
and hopefuly give an informative message to the user. I hope this balances out the need
for technical info and user-friendliness. The only risk is that the miner will always attempt
to mine and may crash if incompatible.
Here are some examples of the output most users are likely to see. I don't check for the newer features like AVX2
because they are not used in the decision making that determines the final message.
AES:
Checking CPU capatibility...
Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
CPU arch has AES...........YES.
CPU arch has AVX...........YES.
SW built for AES & AVX.....YES.
Algo supports AES & AVX....YES.
System supports AES & AVX..YES.
CPU arch has SSE2..........YES.
SW built for SSE2..........YES.
System supports SSE2.......YES.
Start mining with AES-AVX optimizations...
SSE2:
Checking CPU capatibility...
Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
CPU arch has AES...........NO.
CPU arch has AVX...........NO.
CPU arch has SSE2..........YES.
SW built for AES & AVX.....NO.
SW built for SSE2..........YES.
Algo supports AES & AVX....YES.
System supports AES & AVX..NO.
System supports SSE2.......YES.
AES not available, starting mining with SSE2 optimizations...
Nehalem CPU using Westmere build:
Checking CPU capatibility...
Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
CPU arch has AES...........YES.
CPU arch has AVX...........NO.
CPU arch has SSE2..........YES.
SW built for AES & AVX.....YES.
SW built for SSE2..........YES.
Algo supports AES & AVX....YES.
System supports AES & AVX..NO.
System supports SSE2.......YES.
Unsupported CPU or SW configuration, miner will likely crash!
This will hopefully solve the issue for good. Only when this code has proven itself
will I consider turning enforcement back on.
At this time there are no pressing issues to prompt a new release. Too many releases in the past week.
I'll wait for more feedback from users especially those with 1st gen corei CPUs before releasing.
However I can provide the source code to those who can compile their own and are willing to share
their test results. This change only affects the CPU capabilities check at miner startup so if you don't
have any problems with that you don't need this and can wait for the general release.