Abstract:
A register file comprising a plurality of register entries for storing data values for use in the execution of data processing instructions is provided, and comprises at least one write port and at least one read port, and circuitry responsive to a write request received at said at least one write port to update one of said plurality of register entries identified by an address specified by said write request with a data value specified by said write request. The register file also comprises further circuitry responsive to a received control signal to set at least a portion of a predetermined register entry to a predetermined value. In this way, certain register file updating instructions can be executed in parallel with other instructions without the need for additional full write-ports as would be required for typical dual-issue, thereby reducing area and routing complexity and cost compared with the use of an additional write-port due to the lower gate count required by the proposed further circuitry.

Description:
BACKGROUND OF THE INVENTION 
       [0001]    1. Field of the Invention 
         [0002]    This invention relates to a register file, a data processing apparatus having a register file, and a method of updating a register file. More particularly, this invention relates to a register file, data processing apparatus and method in which a plurality of register entries are provided for storing data values for use in the execution of data processing instructions. 
         [0003]    2. Description of the Prior Art 
         [0004]    A register file is a set of registers typically provided in, or in association with, a processor such as a central processing unit (CPU). The register file temporarily stores data while it is being operated on by the processor. For example, data may be transferred from a memory to the register file when it is required to be operated on as part of a data processing operation, and data generated by a data processing operation may be stored to a register file before either being transferred to the memory or used by a subsequent data processing operation. 
         [0005]    A register file has at least one write port, via which data is written into one or more registers of the register file, and at least one read port, via which data are read from one or more registers of the register file. A read port may comprise circuitry responsive to a read request received at the read port to output a data value contained in one or more registers identified by an address specified by the read request. A write port may comprise circuitry responsive to a write request received at the write port to update one or more registers identified by an address specified by the write request with a data value specified by the write request. In this way, data can be written to and read from the register file. 
         [0006]    One way of increasing the performance of a processor is to allow folding, or dual-issue of certain operations, thereby reducing the effective number of cycles per instruction (CPI) of the processor. Supporting dual-issue requires the extension of the register file to provide additional read ports (to support the increased number of input operands required per cycle) and additional write ports (to allow commitment of the multiple computed results). Adding read and/or write ports to a processor design is expensive in terms of gate-count, and is thus undesirable in low-area designs. Folding is the ability to execute instructions that do not require register file access in parallel with other instructions, for example NOPs (no-operation instructions), branch instructions and in the case IF-THEN-ELSE instructions, where no source operands are required and only flags are updated. Folding therefore allows improved performance without the provision of additional read and/or write ports, but only where one of the instructions to be executed in parallel does not require access to the lo register file. 
         [0007]    In US-A-2004/0225838, a register cache is provided in order to assist in alleviating demands on access ports associated with the register file. 
       SUMMARY OF THE INVENTION 
       [0008]    Viewed from one aspect the present invention provides a register file comprising a plurality of register entries for storing data values for use in the execution of data processing instructions, said register file comprising: 
         [0009]    at least one write port and at least one read port; 
         [0010]    circuitry responsive to a write request received at said at least one write port to update one of said plurality of register entries identified by an address specified by said write request with a data value specified by said write request; and 
         [0011]    further circuitry responsive to a received control signal to set at least a portion of a predetermined register entry to a predetermined value. 
         [0012]    In this way, certain register file updating instructions can be executed in parallel with other instructions without the need for additional full write-ports as would be required for typical dual-issue, thereby reducing area and routing complexity and cost compared with the use of an additional write-port due to the lower gate count required by the proposed further circuitry. This technique effectively extends the principle of folding to include instructions which require certain types of register file access, and in particular to instructions which require at least a portion of one or more predetermined register entries to be set to a predetermined value. 
         [0013]    Advantages of this technique may include faster execution of certain functions, a potential magnitude of difference between the percentage increase in gate count and the percentage improvement in performance, and improved flexibility and performance compared with traditional instruction folding. Additionally, because the same code can be executed in less time due to parallel execution, the total energy requirement per line of code may be reduced. 
         [0014]    The further circuitry may comprise control circuitry which is associated with a particular register entry and which receives the control signal, the control signal being dedicated to the control circuitry. In this way, separate control signals can be used to control the setting of data values in different register entries of the register file. Alternatively, the further circuitry may comprise control circuitry which is associated with a subset of the register entries and which receives the control signal, the control signal being dedicated to the control circuitry. In this case, a single control signal may be conveniently be used to control the setting of data values in several register entries of the register file. 
         [0015]    The predetermined register entry may be set to a predetermined value in response to the control signal in parallel with one of the plurality of register entries identified by the address being updated with the data value in response to the write request or in parallel with one of the plurality of register entries being read in response to a read request. As a result, a form of parallel processing can be performed, thereby providing more rapid and efficient code execution. 
         [0016]    An embodiment of the present invention provides a data processing apparatus, comprising a register file as described above, and decoding logic for decoding a set of data processing instructions for execution, the decoding logic being responsive to an instruction from a first subset of the set of data processing instructions to generate the write request and being responsive to an instruction from a second subset of the set of data processing instructions to generate the control signal; wherein the first subset is different to the second subset. It will be appreciated that the first subset of instructions may include those which require a form of write access to the register file which cannot readily be performed simply by setting a register entry to a predetermined value. As a result, these instructions cannot form part of the second subset. In one example, instructions of the second subset of data processing instructions do not require an access to the at least one read port. 
         [0017]    Embodiments of the present invention can be utilized to enable various different types of instructions to be processed in parallel. For example, at least one of the instructions of the second subset of data processing instructions may comprise an instruction for setting a predetermined one of the register entries to a zero value, the control signal causing the predetermined register to be set to the zero value. Such instructions are widely used, for example for resetting variables stored in the register file. 
         [0018]    In another example, at least one of the instructions of the second subset of data processing instructions may comprise an instruction for setting a return value for a function to a predetermined value, the control signal causing the predetermined register to be set to the return value. 
         [0019]    As an example, a typical C function of the form: 
         [0000]    
       
         
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 int func(...) 
               
               
                   
                 { 
               
               
                   
                 a 
               
               
                   
                 b 
               
               
                   
                 return 0; 
               
               
                   
                 } 
               
               
                   
                   
               
             
          
         
       
     
         [0020]    could be thus accelerated, because the instruction to set a return value to zero (return 0), which is achieved by setting a particular register entry to a zero value (for instance using a MOVS r0,#0 instruction in the ARM Thumb-2 instruction set), can be conducted in parallel with one or both of instructions “a” and “b”. 
         [0021]    This principle could also be used in respect of other common C return values, such as one (1) or minus one (−1). 
         [0022]    In yet another example, at least one of the second subset of data processing instructions may comprise an instruction for initialising a loop counter in a predetermined register, the control signal causing said predetermined register to be set to an initialised value. 
         [0023]    For instance, a loop counter function of the form “for(i=0;i&lt;x)” can be accelerated, because the initialisation of the counter value i (in this case to a value of zero) can be conducted in parallel with an instruction forming part of the loop by providing that the counter value i is held in a register which can be set using the further circuitry. 
         [0024]    In still another example, at least one of said second subset of data processing instructions may comprise an instruction for reducing a range of a value of integer type to a range of a different integer type, said control signal causing a predetermined number of most significant bits of said predetermined register entry to be set to a zero value. 
         [0025]    In yet another example, at least one of said second subset of data processing instructions comprises an instruction for performing sign extension on a value stored in a predetermined register, said control signal causing a predetermined number of most significant bits of said predetermined register entry to be set to a predetermined value. 
         [0026]    A good example of the desire for partial register zero/sign-extension results from the ISO/IEC 9899:1999 normative (the ‘C’ standard) and its typical implementation on processors containing 32-bit registers. Each of these registers could hold (amongst other types) a 32-bit implementation of a C ‘int’ variable, or a 32-bit sign-extended implementation of an 8-bit C ‘char’ variable. The standard requires that variables of type ‘char’ should be promoted to type ‘int’ before any arithmetic operation. In the case of an ARM processor this is free because the representation is already identical to an ‘int’ having the same value as the ‘char’. However, it requires that the range of any assigned ‘char’ variable be reduced to that of a ‘char’, which requires an extraction to be performed. 
         [0027]    For example: 
         [0000]    
       
         
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 char increment_by_one(char a) 
               
               
                   
                 { 
               
               
                   
                  return a + 1; 
               
               
                   
                 } 
               
               
                   
                   
               
             
          
         
       
     
         [0028]    might compile to: 
         [0000]    
       
         
               
               
             
           
               
                   
               
             
             
               
                 ADD r0,r0,#1 
                 ; increment entire 32-bit register by 1 
               
               
                 SXTB r0,r0 
                 ; signed-extract byte (set bits[31:8] equal to bit[7]) 
               
               
                 BX lr 
                 ; return to caller 
               
               
                   
               
             
          
         
       
     
         [0029]    Likewise, for ‘unsigned char’ bits [31:8] would be flushed to zero using a UXTB instruction. This is useful in the case of ARM instructions, because no ARM instruction exists which performs a single 8-bit addition. 
         [0030]    Embodiments of the present invention would allow folding of the SXTB/UXTB instruction. 
         [0031]    The data processing apparatus may be configured to issue the generated write request and the generated control signal to the register file at substantially a same time, such that they are executed in parallel. 
         [0032]    The data processing apparatus may be configured such that the set of data processing instructions comprise a third subset, the third subset comprising instructions comprising a read request, the decoding logic being responsive to an instruction from the third subset of instructions to generate the read request, wherein the data processing apparatus is configured to issue the generated read request and the generated control signal to the register file at substantially a same time, such that they are executed in parallel. 
         [0033]    One embodiment of the invention can be realised in the form of an adaptation of the ARM Cortex-M3 architecture, which handles Thumb-2 instructions, has two read ports, one write port and provides instruction folding for instructions which do not require a register file access. In particular, the ARM Cortex-M3 architecture can be adapted by adding an extension to the folding logic to detect certain instructions (such as MOVS r0,#0) and to generate in response a new signal into the instruction execution logic indicating that the instruction has been folded. As will be appreciated this will result in some increase in the gate count of the register file. In particular, in lo one implementation thirty two AND gates will be added at the inputs of the R0 register file D-type flip flops, an OR gate onto the R0 register file D-type enables, an AND gate onto the Negative-flag input and an OR gate onto the Zero-Flag input—all connected to the new control signal. The total cost of this configuration, in terms of gate count, on top of the pre-existing folding, is approximately 60 gates. This is substantially less than the number of gates required for a full additional write port, which will be approximately 1500 gates (16 registers each requiring 32 gates). 
         [0034]    Viewed from another aspect the present invention provides a method of updating a register file comprising a plurality of register entries for storing data values for use in the execution of data processing instructions, comprising the steps of: 
         [0035]    receiving a write request at a write port of said register file; 
         [0036]    updating one of said plurality of register entries identified by an address specified by said write request with a data value specified by said write request in response to said write request; 
         [0037]    receiving a control signal at said register file; and 
         [0038]    setting at least a portion of a predetermined register entry to a predetermined value in response to said control signal. 
         [0039]    Viewed from yet another aspect the present invention provides a register file comprising a plurality of register entries for storing data values for use in the execution of data processing instructions, said register file comprising: 
         [0040]    input means and output means; 
         [0041]    updating means for updating, in response to a write request received at said input means, one of said plurality of register entries identified by an address specified by said write request with a data value specified by said write request; and 
         [0042]    setting means for setting, in response to a received control signal, at least a portion of a predetermined register entry to a predetermined value. 
         [0043]    The above, and other objects, features and advantages of this invention will be apparent from the following detailed description of illustrative embodiments which is to be read in connection with the accompanying drawings. 
     
    
     
       BRIEF DESCRIPTION OF TIM DRAWINGS 
         [0044]      FIG. 1  schematically illustrates a data processing system comprising a data processor, an interrupt controller, a system memory and a plurality of peripherals; 
           [0045]      FIG. 2  schematically illustrates a data processor having a register file according to an embodiment of the present invention; 
           [0046]      FIGS. 3A to 3C  schematically illustrate a portion of a register file having further circuitry for setting portions of register entries to predetermined values; 
           [0047]      FIG. 4  schematically illustrates a logic circuit arrangement of a single bit of a register in a register file according to an embodiment of the present invention; and 
           [0048]      FIG. 5  is a schematic flow diagram illustrating a decoder operation and register file operation according to an embodiment of the present invention. 
       
    
    
     DESCRIPTION OF THE PREFERRED EMBODIMENTS 
       [0049]    A data processing apparatus  1  is schematically illustrated in  FIG. 1 . The data processing apparatus  1  comprises a data processor  10  for executing data processing instructions, a system memory  20  for storing data, a plurality of peripherals  30   a ,  30   b ,  30   c  which are hardware devices forming part of the data processing apparatus  1 . The data processing apparatus also comprises an interrupt controller  40 , which is responsive to interrupt requests received from, for example, the peripherals  30   a ,  30   b ,  30   c  to issue interrupt information to the data processor  10 . The interrupt information causes the data processor  10  to interrupt a current operation to perform an operation indicated by the interrupt information. The interrupt controller  40  may also be responsive to interrupt requests generated by devices external to the data processing apparatus, and to software interrupts generated by the data processor  10  in response to particular data processing instructions. 
         [0050]    The data processor  10  comprises a register file  12  which includes a plurality of registers for temporarily storing data while it is being operated on by the data processor  10 . The register file serves as a bridge between the data processor  10  and the system memory  20 . In this way, data from the system memory  20  may be transferred to the register file  12  when it is required to be operated on as part of a data processing operation, and data generated by a data processing operation may be stored to the register file  12  before either being transferred to the system memory  20  or used by a subsequent data processing operation. 
         [0051]    The data processor  10 , the peripherals  30   a ,  30   b ,  30   c  and the interrupt controller  40  are coupled to each other, and to the system memory  20 , by an address bus  50 , a write data bus  60  and a read data bus  70 . Data can be written into the system memory  20  using the address bus  50  (to identify a memory address of the system memory  20  at which the data is to be stored) and the write data bus  60 , which carries the data to be written into the system memory  20 . Data can be read from the system memory  20  using the address bus  50  (to identify a memory address of the system memory  20  from which the data is to be read) and the read data bus  70 , which carries the data read from the system memory  20 . 
         [0052]    The data processor  10  of  FIG. 1  is schematically illustrated in more detail in  FIG. 2 . The data processor  10  is shown to include, in addition to the register file  12 , decode logic  110  and execute logic  120 . The decode logic  110  decodes incoming data processing instructions from an instruction pipeline  105  and generates, in response to the incoming data processing instructions, an operation to perform and register addresses for accessing the register file  12 . Signals s 1  and s 2  indicative respectively of the operation to perform and of a destination address for writing a result of the operation into the register file  12  are communicated from the decode logic  110  to the execute logic  120 . 
         [0053]    Signals s 3  and s 4  indicative respectively of first and second read addresses for reading operand data for use in the operation from the register file  12  are communicated from the decode logic  110  to the register file  12 . 
         [0054]    The register file  12  comprises a first read port comprising read address input circuitry  136  for receiving the read address signal s 3  and read value output circuitry  138  for outputting a data value held in a register entry indicated by the read address signal s 3  received at the read address input circuitry  136 . The register file  12  also comprises a second read port comprising read address input circuitry  146  for receiving the read address signal s 4  and read value output circuitry  148  for outputting a data value held in a register entry indicated by the read address signal s 4  received at the read address input circuitry  146 . The data values output from the read value output circuitry  138  and the read value output circuitry  148  are communicated from the register file  12  to the execute logic  120  as operand values in association with the signals indicative of the operation to perform and the result destination. These signals in combination allow the execute logic  120  to perform the operation indicated by the signal s 1  on the operand data provided by the signals s 5  and s 6  to generate a result data value. 
         [0055]    The result data value is then communicated to the register file  12  as a signal s 7  in association with the signal s 2  indicating the destination address to which the result data value should be stored. The register file  12  comprises write address input circuitry  134  for receiving the signal s 2 , and write value input circuitry  132  for receiving the signal s 7 . The write address input circuitry  134  and the write value input circuitry  132  together form a write port, which is configured to store the result data value carried by the signal s 7  into a register entry indicated by the signal s 2 . 
         [0056]    The decode logic  110  also provides folding logic  112  which permits, under certain circumstances, a second instruction to be executed concurrently with an instruction executed conventionally by the decode logic  110 . In order to achieve this, the folding logic  112  examines a secondary data processing instruction  109  occurring after the primary data processing instruction  107  in the instruction pipeline  105  while the decode logic  110  is processing the primary data processing instruction  107 , and determines whether the secondary data processing instruction  109  can be executed concurrently with the primary data processing instruction  107 . If such concurrent execution is determined to be possible, the folding logic  112  generates a register file special function and communicates it to the register file  12  via the execute logic  120  as a control signal s 8 . The register file  12  comprises further circuitry  152  for receiving the control signal s 8  and setting at least a portion of at least one predetermined register entry to a predetermined value in response to the signal s 8 . In this way, a secondary instruction which requires all or part of one or more register entries to be set to a predetermined value can be executed concurrently with a primary data processing instruction which requires a register file access. 
         [0057]    It will be appreciated that the folding logic  112  need not necessarily be restricted to handling a secondary data processing instruction which immediately follows the primary data processing instruction, but might also handle data processing instructions at other positions following the primary data processing instruction within the instruction pipeline  105 . Alternatively, a secondary data processing instruction handled by the folding logic  112  might be positioned in advance of the primary data processing instruction within the instruction pipeline  105 . 
         [0058]    Instructions received at the decode logic  110  may be considered to belong to a first subset of instructions which require full write access to the register file  12 , and therefore trigger the decode logic  110  to generate a write request, a second subset of instructions which require read access to the register file  12 , and therefore trigger the decode logic  110  to generate a write request, or a third subset of instructions which can be executed by generating the control signal to set one or more register entries to a predetermined value. A fourth subset could also be considered which do not require any access to the register file at all. Instructions of the third subset or the fourth subset can be handled by the folding logic concurrently with instructions of the first subset or the second subset. In the case of the third subset this is because the instructions can be affected by using the control signal to set predetermined register entries to a predetermined value without using the read or write ports of the register file  12 , which are at that time being used by an instruction of the first or second subset. In the case of the fourth subset this is because no access to the register file  12  is required at all. It will also be appreciated that an instruction of the fourth subset could be handled by the folding logic  112  concurrently with an instruction of the third subset, or concurrently with another instruction of the fourth subset which sets different register entries to a predetermined value. 
         [0059]    Example register files are schematically illustrated in  FIGS. 3A to 3C , in which only the register entries and further control circuitry are shown for the sake of clarity. It will be appreciated that the register file would also include one or more read and write ports which would be connected to the register entries. In  FIG. 3A , a portion of a register file  300   a  is shown, and comprises a plurality of register entries  310   a ,  312   a  and  314   a , each of which comprises 16 bits. The register entries have been illustrated here with  16  bits for the sake of clarity, and it will be appreciated that the register entries may comprise a different number of bits, for instance  32 . While  FIG. 3A  only shows three register entries for clarity, a register file would usually include more than this, commonly  16  registers. 
         [0060]    In  FIG. 3A , the register file  300   a  comprises first control circuitry  320   a  which is dedicated to the first register entry  310   a , and second control circuitry  322   a  which is dedicated to the second register entry  312   a . In this example the third register entry  314   a  is not connected to control circuitry, and may be accessed only using standard read and write ports. It should be understood that the first register entry  310   a  and the second register entry  312   a  can be accessed using standard read and write ports in addition to being controlled by the control circuitry. The first control circuitry  320   a  is connected to each bit of the first register entry  310   a  via a connection  330   a , and is responsive to a received control signal to set all the bits of the first register entry  310   a  to a predetermined value. The second control circuitry  322   a  is connected to each bit of the second register entry  312   a  via a connection  332   a , and is responsive to a received control signal to set all the bits of the second register entry  312   a  to a predetermined value. In this way, separate control signals can be used to separately set the first register entry  310   a  and the second register entry  312   a  to respective predetermined values. For instance, each bit of the first register entry  310   a  might be set to a zero value while each bit of the second register entry  312   a  might be separately set to a value of one. 
         [0061]    Referring now to  FIG. 3B , a register file  300   b  comprises first control circuitry  320   b  which is dedicated to the first register entry  310   b , and second control circuitry  322   b  which is dedicated to the second register entry  312   b . As with  FIG. 3A , the third register entry  314   b  is not connected to control circuitry, and is accessed only using standard read and write ports. The first control circuitry  320   b  is connected to only the eight least significant bits of the first register entry  310   b  via a connection  330   b , and is responsive to a received control signal to set the eight least significant bits of the first register entry  310   b  to a predetermined value. The second control circuitry  322   b  is connected to each bit of the second register entry  312   b  via a connection  332   b  in the same way as the second control circuitry  322   a  of  FIG. 3A , and is responsive to a received control signal to set all the bits of the second register entry  312   b  to a predetermined value. In this way, separate control signals can be used to separately set a subset of the first register entry  310   b  to a predetermined value and all of the bits of the second register entry  312   b  to a predetermined value. The first register entry  310   b  could therefore be used to reduce a range of a value of integer type to a range of a different integer type or to perform sign extension on a value stored in the register. 
         [0062]    Referring now to  FIG. 3C , a register file  300   c  comprises first control circuitry  320   c  which is dedicated to both the first register entry  310   c  and the second register entry  312   c . As with  FIGS. 3A and 3B , the third register entry  314   c  is not connected to control circuitry, and is accessed only using standard read and write ports. The first control circuitry  320   c  is connected to each bit of both the first register entry  310   c  and the second register entry  312   c  via a connection  330   c , and is responsive to a received control signal to set all the bits of both the first register entry  310   c  and the second register entry  312   c  to a predetermined value. In this way, a single control signal can be used to simultaneously set both the first register entry  310   c  and the second register entry  312   c  to a predetermined value. 
         [0063]      FIG. 4  schematically illustrates circuitry suitable for setting a single bit of a register entry to a zero value. It will be appreciated that the circuitry shown in  FIG. 4  can be replicated for each bit of one or more register entries which are required to be set to a zero value in response to a control signal from the folding logic. It will also be appreciated that the circuitry shown in  FIG. 4  could be adapted to set the single bit of the register entry to a value of one. The register bit illustrated in  FIG. 4  comprises a flip flop  410  which stores and retains a data value applied to the flip flop  10 . The flip flop  410  comprises a write input  412  for receiving a data value to be stored in the flip flop  410 , a read output  414  for providing a data value currently stored in the flip flop  410  on a read data line  420  for output. The flip flop  410  also comprises a write enable input  416  which is responsive to a write enable signal to permit the data value received at the write input  412  to be stored into the flip flop  410  in response to a transition of a clock signal received at a clock input  418 . A data value asserted at the write input  412  is therefore stored into the flip flop  410  in response to a clock transition at the clock input  418  while a write enable signal is being asserted at the write enable input  416 . 
         [0064]    Conventionally, the setting of a data value in a flip flop requires a write data signal, a write enable signal, and a clock signal. The circuitry shown in  FIG. 4  uses these signals, but additionally utilises a control signal which can directly set the value of the flip flop  410  to a desired value, in this case zero. The circuitry comprises an AND gate  430  having a non-inverting input which receives the write data signal, and an inverting input which receives, and inverts, the control signal. The output of the AND gate  430  will therefore correspond to the write data signal when the control signal is a zero value, and will always have a zero value when the control signal has a value of one. The output of the AND gate  430  is provided to the write input  412  of the flip flop  410 . 
         [0065]    The circuitry also comprises an OR gate  440  which receives the write enable signal at one input, and the control signal at the other input. The output of the OR gate  440  will therefore be high whenever either the write enable signal or the control signal are high. The output of the OR gate  440  is provided to the write enable input  416  of the flip flop  410 . A data value asserted at the write input  412  will therefore be stored into the flip flop  410  (in response to a clock transition) when either the write enable signal or the control signal are high. 
         [0066]    In this way, when the control signal is low, the flip flop  410  will be responsive to a write data signal, a write enable signal and a clock signal to store a data value in the usual way. However, when the control signal is high, the output of the AND gate  430  will be caused to take on a zero value, and the output of the OR gate  440  will be high to permit the zero value asserted by the AND gate  430  onto the flip flop  410  to be stored. This provides a low gate count method of permitting a flip flop forming part of a register entry to be set to a predetermined (in this case zero) value. 
         [0067]    Referring now to  FIG. 5 , an example method of operation of the data processor of  FIG. 2  is schematically illustrated by way of a flow diagram. In  FIG. 5 , steps A 1  to A 7  and A 12  to A 17  can be considered to be processes of the decoder, and in particular of the decode logic  110  and execute logic  120  illustrated in  FIG. 2 . Steps A 8  to A 11 , A 18  and A 19  can be considered to be processes of the register file  12  illustrated in  FIG. 2 . 
         [0068]    At a step A 1 , the decoder receives a primary instruction from an incoming instruction stream. At a step A 2  the decoder decodes the primary instruction to identify a data processing operation which is to be performed, and read and/or write addresses for accessing the register file. Then, at a step A 3 , the decoder determines whether the decoded primary instruction requires the register file to be read from, and if so, generates a read request at a step A 4  for transmission to the register file. The process then moves on to a step A 5 , where an operation dictated by the primary instruction is executed. If at the step A 3  the decoder determines that the decoded primary instruction does not require the register file to be read from, the process moves directly on to the step A 5  for the instruction to be executed. At a step A 6 , the decoder determines whether the decoded primary instruction requires the register file to be written to. If at the step A 6  the decoder determines that the decoded primary instruction requires the register file to be written to, the process moves on to a step A 7 , where a write request is generated for transmission to the register file. If, at the step A 6 , no write access to the register file is required, the process ends and a subsequent instruction can be processed. 
         [0069]    In the register file, at a step A 8 , the register file receives a read request from the decoder generated at the step A 4 . The read request indicates an address within the register file from which data values are to be read out and provided to the decoder. At a step A 9 , the register file reads out the required data values from a register entry designated by the address and provides them to the decoder to enable execution of the primary instruction at the step A 5 . At a step A 10 , the register file receives a write request from the decoder generated at the step A 7 . The write request indicates a data value to be stored into the register file, and an address within the register file at which the data value is to be written. In this way, the instruction can be executed at the step A 5  using operands requested from the register file at the step A 4 , and the result of the operation can be stored into the register file at the step A 7 . 
         [0070]    At a step A 12 , a secondary instruction is received at the decoder. The secondary instruction can be handled concurrently with the primary instruction. In other words, steps A 12  to A 19  can be handled concurrently with the steps A 1  to A 11 . At a step A 13  the decoder decodes the secondary instruction to identify the nature of the data processing operation which is to be performed. At the step A 14 , the decoder determines whether the secondary instruction is foldable with the primary instruction. In other words, it is determined whether the secondary instruction is of a type which can be executed without interfering with the execution of the primary instruction. In particular, the secondary instruction may be foldable if either it does not require a register file access, or if it requires the whole or part of a particular register entry to be set to a predetermined value. 
         [0071]    If it is determined at the step A 14  that the secondary instruction is not foldable, the process ends. If however it is determined at the step A 14  that the secondary instruction is foldable, the secondary instruction is executed at a step A 15 . Then, at a step A 16  it is determined whether simple write access to the register file is required to set all or part of one or more register entries to a predetermined value. If it is determined at the step A 16  that such a write is required, a control signal is generated at a step A 17 , and is communicated to the register file. At a step A 18 , the register file receives the control signal generated by the decoder at the step A 17 , and sets, at a step A 18 , the required register bits to the predetermined value. 
         [0072]    Although illustrative embodiments of the invention have been described in detail herein with reference to the accompanying drawings, it is to be understood that the invention is not limited to those precise embodiments, and that various changes and modifications can be effected therein by one skilled in the art without departing from the scope and spirit of the invention as defined by the appended claims.