1. A method for assigning registers for use by a multithreaded processor that is capable of concurrently executing instructions from a plurality of threads out-of-order, where each of the plurality of threads has a separate context and the plurality of threads can include threads running within a single application, threads running within different applications, and/or threads for different processes, comprising the steps of: (a) providing a plurality of registers for use by the processor in executing the plurality of threads, each register among the plurality of registers being allocable to be used as an architectural register and as a renaming register; and (b) dynamically allocating and assigning said plurality of registers to a thread being processed by the multithreaded processor, as required to support out-of-order execution of instructions for said thread.