A machine-implemented method comprising: identifying a request invoked by an instruction generated by a software program, at a first hardware thread included in a multi-threaded processor, to initiate a second hardware thread, the first hardware thread including a first execution unit, and the second hardware thread including a second execution unit that is different from the first execution unit; having checked by the first hardware thread that the second hardware thread is available, identifying one or more register values included in one or more first registers accessed by the first hardware thread; copying by the first hardware thread the one or more register values to one or more second registers accessible by the second hardware thread; and executing instructions generated by the software program on the second hardware thread, wherein the executing includes the second hardware thread accessing one or more of the copied register values located in the one or more second registers; wherein the first hardware thread executes a branch and initiate instruction to invoke the request for initiation of the second hardware thread, characterized in that, the one or more second registers are a first subset of a plurality of second hardware thread registers, the method further comprising: identifying by the first hardware thread a second subset of second registers included in the plurality of second hardware thread registers, wherein the second subset of second registers are each accessible by the second hardware thread and fail to include one of the copied register values; and clearing by the first hardware thread each of the second subset of second registers. identifying a request invoked by an instruction generated by a software program, at a first hardware thread included in a multi-threaded processor, to initiate a second hardware thread, the first hardware thread including a first execution unit, and the second hardware thread including a second execution unit that is different from the first execution unit; having checked by the first hardware thread that the second hardware thread is available, identifying one or more register values included in one or more first registers accessed by the first hardware thread; copying by the first hardware thread the one or more register values to one or more second registers accessible by the second hardware thread; and executing instructions generated by the software program on the second hardware thread, wherein the executing includes the second hardware thread accessing one or more of the copied register values located in the one or more second registers; wherein the first hardware thread executes a branch and initiate instruction to invoke the request for initiation of the second hardware thread, characterized in that, the one or more second registers are a first subset of a plurality of second hardware thread registers, the method further comprising: identifying by the first hardware thread a second subset of second registers included in the plurality of second hardware thread registers, wherein the second subset of second registers are each accessible by the second hardware thread and fail to include one of the copied register values; and clearing by the first hardware thread each of the second subset of second registers. identifying by the first hardware thread a second subset of second registers included in the plurality of second hardware thread registers, wherein the second subset of second registers are each accessible by the second hardware thread and fail to include one of the copied register values; and clearing by the first hardware thread each of the second subset of second registers.