Multiple threads are divided into buddy groups of two or more threads, so
that each thread has assigned to it one or more buddy threads. Only one
thread in each buddy group actively executes instructions and this allows
buddy threads to share hardware resources, such as registers. When an
active thread encounters a swap event, such as a swap instruction, the
active thread suspends execution and one of its buddy threads begins
execution using that thread's private hardware resources and the buddy
group's shared hardware resources. As a result, the thread count can be
increased without replicating all of the per-thread hardware resources.