In a stored program data processor formed on an integrated circuit chip, having a pipelined instruction mechanism including four time-sequential stages with a first stage for instruction sequencing and fetch, a second stage for data store address generation, a third stage for data store access, and a fourth stage for arithmetic execution, said stages operating in an overlapped mode on successive instructions each including an op code and an operand, which are accessed from an instruction store external to said chip, to carry our arithmetic operations on data accessed from a data store external to said chip, an improved instruction branching mechanism, comprising:
- a last-in-first-out instruction address stack in a partitioned area of said data store, for storing addresses for said instruction store;
- an instruction address multiplexer in said first stage having an output connected to an address input of said instruction store and having a plurality of inputs, for inputting instruction addresses to said instruction store;
- an instruction address incrementer in said first stage having an input connected to said output of said multiplexer and an output connected through a sequential address register to one of said inputs of said multiplexer, for sequentially incrementing said instruction store addresses by unity;
- a stack register in said first stage having an input selectively connected to either an output of said sequential address register or to an output from said instruction address stack in said data store, for storing the last instruction store address outputted from said incrementer or storing the last instruction store address outputted from said instruction address stack in said data store and having an output selectively connected to either an input to said multiplexer or to an input to said instruction address stack in said data store;
- an instruction sequencing decoder in said first stage having an input connected to an output of said instruction store and an output connected to said multiplexer, for selectively controlling the connection of said instruction store address input, through said multiplexer, to either said sequential address register output or to said stack register output in response to the op code of the last instruction word accessed from said instruction store;
- said multiplexer having one of its said plurality of inputs connected to said output of said instruction store for selectively transferring the operand of the last instruction accessed therefrom as a branch address input to said instruction store in response to the decoding of the associated op code in said instruction sequencing decoder;
- a data store accessing decoder in said second stage having an input connected to said instruction store output, for decoding the op code from the last instruction accessed from said instruction store;
- a data store address generator in said second stage having an input connected to said instruction store output, a control input connected to said data store accessing decoder, and an output, for selectively generating a data store address from the operand of said last accessed instruction word in response to the decoding of the associated op code in said data store accessing decoder;
- a stack pointer in said second stage having a control input connected to said data store accessing decoder and an output, for selectively incrementing or decrementing a data store address value for accessing the last instruction address stored in said instruction address stack in said data store;
- a data store address register in said third stage, having an input connected to said data store address generator output and to said stack pointer output, and an output connected to the address input of said data store, for accessing a location in said data store;
- said instruction sequencing decoder selectively controlling the transfer of the operand of a branch instruction through said multiplexer to said address input of said instruction store in response to the associated branch op code and selectively controlling the loading of the next sequential address in said sequential address register into said stack register in response to said associated branch op code;
- an op code decoder in said third stage having an input connected to said instruction store output and a control output connected to said data store, for selectively controlling the nondestructive inputting of the contents of said stack register to the data input of said data store in response to said associated branch op code;
- said data store accessing decoder, in response to said branch op code, selectively controlling the incrementing of said stack pointer by unity and the outputting of its contents to said data store address register as the address of the location in said instruction address stack for storing said contents of said stack register as the return address from the branch specified in said branch op code;
- whereby said otherwise unused second and third stages are employed during a branching operation to access said instruction stack which is not located on said integrated circuit chip.