Earlier quoted context omitted.
They aren't faking the number. A hyperthreaded core is two separate cores that share alu, fpu etc.
I think it's more correct to say that a single core has two "sets of registers" (and I guess instruction decoders/dispatchers perhaps)... so it's a single core with 2 "execution entry points"?
Yeah, out-of-order processors are weird. (https://en.wikipedia.org/wiki/Tomasulo_algorithm)
If you have one thread that doesn't need a lot of registers for some reason (ie: most of its dependency chains are short, and it has very few memory operations), then you can have a 2nd thread eat up the ~180 registers that it wasn't using. "Sharing" the malloc pool of registers.