Thank you for the additional information on this.
Using uninitialized data would certainly explain some presence of denorms. But Jon Tyler's claim of 100% of the data set consisting of denorms seems very bizarre. If we're talking about single-precision floats the exponent field has to be 0 for a denorm and this doesn't include zero and negative zero. So given a uniform distribution there'd be a less than 1/256 (0.4%) chance of an uninitialized 32-bit floating being a denorm. Uninitialized data doesn't tend to really follow uniform distributions, it may well have a lot of stuff that looks like denorms due to containing 32-bit integers that aren't large enough (> 0x7FFFFF) to trip out of denorms. But they could also have a lot of zeroes, negative numbers, < 32-bit int datatypes, strings, pointers, code, etc etc that would tend to sway away from this. If you just so happen to have really bad luck in what sort of stuff you were doing beforehand it could have ended up with a dataset that's fully denormal, but I still find this pretty bizarre. It'd be good to get some measurements on this.
I do have to ask, is Geekbench doing anything to verify that the results of the benches are correct, like a checksum? IMO this is an important step in benchmarks, you want to at least make sure that the compiled code is doing what it's supposed to and not cutting corners that result in the wrong answers.
I'm not sure why Jon Tyler claimed 100% of the data set contained denormals. Given the nature of the bug between 30% and 40% of the operations were at risk of using denormals. I don't know how many of these operations actually used denormals, though; I'll have to write a test to check the actual data being referenced.
Geekbench 2 did not verify that the results of the workloads were correct (results were verified during development on the platform the developer was working on, but there were no automated checks in place that would run on all platforms).
Geekbench 3, on the other hand, will have extensive build-time tests that verify the workloads are operating as expected. Geekbench 3 will also have lightweight run-time tests as well, but we're putting most of our validation effort on tests that we run internally so that we can keep the Geekbench run-time as low as possible.