DOUBLE PRECISION (64 BIT) SHIFT OPERATIONS USING A 32 BIT DATA PATH

Abstract: The present invention relates to a microprocessor execution unit which permits double precision shift operations. A barrel shifter (120) and associated multiplexors (121, 122) in the 32 bit data path are used to carry out double precision (64 bit) shift operations. To this effect, and depending on operand length and shift amount, a series of rotate, shift and exclusive OR operations are performed on the lower and possibly upper parts of operands.

Description: DOUBLE PRECISION (64 BIT) SHIFT OPERATIONS USING A 32 BIT DATA PATH BACKGROUND OF THE INVENTION The present invention relates generally to microprocessor architecture, and more particularly to the architecture of a microprocessor execution unit which permits double precision shift operations. Many modern microprocessors have a "pipelined architecture" whereby the processor is divided into stages. This permits the processor to perform several tasks at once thereby allowing the processor to work on different parts of the instructions simultaneously as they are advanced through the pipe with each clock cycle. Under ideal conditions, one instruction can leave the pipeline and another instruction enter the pipeline every clock cycle. One such microprocessor is the Intel486™ microprocessor. Compatible x86-type microprocessors include those made by Advanced Micro Devices and Cyrix. Arising out of the need for compatibility with older Intel microprocessor designs and the fact that it is a general purpose microprocessor, the x86 microprocessor has a complex instruction set architecture which includes over 400 instructions. However, some of these instructions are rarely used by either the operating system or the compiler. Thus, it would be desirable to optimize the architecture for commonly used instructions. SUMMARY OF THE INVENTION An architecture for a microprocessor execution unit is disclosed. The architecture is generally described as having an arithmetic unit and an addressing unit. The arithmetic unit performs arithmetic and logical operations on a pair of operands in response to control signals. The addressing unit operates in conjunction with the arithmetic unit to calculate linear addresses as well as offsets and limits. The arithmetic unit includes a first portion for performing addition, subtraction and logical operations, a second portion for performing multiply, divide and single-bit shift operations, and a third portion for performing multi-bit shift and rotate operations. The addressing unit is coupled to the output of the arithmetic unit. When an addressing instruction is received, the base component is input to the addresing unit and the index and displacement components are input to the arithmetic unit. The results are summed in a single cycle to yield a linear address. A better understanding of the features and advantages of the present invention will be obtained by reference to the following detailed description of the invention and accompanying drawings which set forth an illustrative embodiment in which the principles of the invention are utilized. BRIEF DESCRIPTION OF THE DRAWINGS Figure 1 is a block diagram showing portions of an integrated microprocessor system. Figure 2 is a functional block diagram of the execution unit portion of the integrated microprocessor system of Figure 1. Figure 3 is a more detailed block diagram of the execution unit of Figure 2. Figure 4 is a schematic diagram of the result registers for a division operation. Figure 5 is a schematic diagram of the result registers for a multiplication operation. Figures 6a and 6b are flow charts for a double precision shift operation. DETAILED DESCRIPTION OF THE INVENTION Referring now to Figure 1, the preferred embodiment of the present invention is an integrated microprocessor system 1 having a pipelined architecture, wherein the pipeline includes, for example, a decoder stage 2, an execution unit 3 and a writeback stage 4. The present disclosure is directed to the execution unit 3, which provides a 32-bit data path for operands and instructions stored in general registers, including register file 6 and shadow register 7, and wherein arithmetic, logical and addressing computations are performed by the execution unit for programming instructions executed by the integrated microprocessor system 1. The microprocessor system 1 includes a control logic unit 5 which is coupled to send control signals CTRL to the execution unit 3 and to receive data signals SGNL from the execution unit. The control logic unit 5 is also coupled to other components of the microprocessor system 1 and receives microcode and other input for making programmed control decisions. The execution un.' 3 is implemented to be substantially compatible with the Intel x86 instruction set, as set forth in the "Intel486™ MICROPROCESSOR FAMILY PROGRAMMER'S REFERENCE MANUAL," which is expressly incorporated herein by reference. The x86 instructions will be referenced herein in their common mnemonic form, such as ADD, SUB, MUL, DIV, etc. A simplified functional diagram of the execution unit 3 is shown in Figure 2. An arithmetic unit 50 has two inputs 51 and 52 for receiving operands OpA and OpB, respectively, from register file 6. The arithmetic unit 50 generates an arithmetic or logical result 53 in a single cycle for many x86 instructions. The arithmetic unit 50 includes a first portion for performing addition, subtraction and logical operations, a second portion for performing multiply, divide and single-bit shift operations, and a third portion for performing multi-bit shift and rotate operations, as will be shown and described in more detail below. An addressing unit 55 has one input selectively coupled to the output of the arithmetic unit 50 or to OpA. When an addressing instruction is received, the segment base component is provided to the addressing unit 55 on input 56, and the base, index, or displacement components, or immediate segment address operands, are provided to the arithmetic unit 50 on inputs 51 and 52. The addressing unit 55 then sums the address components to yield output 57 which is a linear address. A limit check unit 60 is provided to make sure the offset 58, i.e., output 53 or OpA, is not addressing a location outside of the segment as determined by the control signal LIMIT. Referring now to Figure 3, the execution unit 3 is illustrated in greater detail. It should be apparent to one versed in the art that each component of the execution unit described below is controlled or selected by one or more control signals provided by the control logic unit 5. However, a detailed description of these control signals in not necessary for a complete understanding of the invention. Operand A is received into a sign extension unit 101. Sign extension unit 101 is a 3:1 multiplexor that selects a byte and sign extends it into 32 bits, or selectes a word and sign extends it into 32 bits, or selects a dword, and then outputs the 32 bit result a, n onto data line 201. The term "sign extend" means copying the sign bit into the 24 highest order bits for a byte or into the 16 highest order bits for a word. Operand B is received into a sign extension unit 102. Sign extension unit 102 includes a 5:1 multiplexor that selects a signed byte and sign extends it into 32 bits, or a signed word and sign extends it into 32 bits, or an unsigned byte and sign extends it into 32 bits, or an unsigned word and sign extends it into 32 bits, or a dword. The output 202 is a 32 bit result b, n . Sign extension unit 102 also includes a 2: 1 multiplexor that selects OpB or its complement. An adder 103 receives and operates upon data lines 202 and 203 and carry input CI 204. Data line 203 is from the output of a 2:1 multiplexor 104, which selects either a, n data line 201 or UpperQ data line 205. Adder 103 performs logical operations on data lines 202 and 203 to generate logic output 207, which is available to the user through output gate 111. The adder 103 also performs addition on data lines 202, 203 and 204 to generate sum output 206, which is available to the user through output gate 112. Two 32 bit registers are provided for performing multiply, divide and single-bit shift operauons. For the upper 32 bits, a 3: 1 multiplexor 105 selects from a,_ data line 201, UpperQ data line 205, or SUM data line 207. The selected value may be shifted either left or πght by one bit by left/right shifter 106 and then stored in register 107. For the lower 32 bits, a 2:1 multiplexor 108 selects from b ir data line 202 or from LowerQ data line 208. The selected value may be shifted either left or right by one bit by left right shifter 109 and then stored in register 110. The least significant bit (LSB) of left/right shifter 106 is coupled to the most significant bit (MSB) of left right shifter 109 to permit up to 64 single bit position shifts. The UpperQ register 107 provides an output data line 205 which is fed back to multiplexor 104 or multiplexor 105, as dei bribed above, or made available to the user through output gate 113. The LowerQ register 110 provides an output data line 208 which is fed back to multiplexor 108 as described above, or available to the user through output gate 114. A barrel shifter 120 comprising a 32 by 32 transistor array is provided for performing multi-bit shift and rotate operations. A pair of 32 bit 2:1 multiplexors 121, 122 couple the a^, data line 201 to the barrel shifter 120. A 5 bit decoder 123 provides 32 output signals, only one of which is true, to the barrel shifter 120, thus selecting one row of the barrel shifter. The output 209 of the barrel shifter 120 is available to the user through output gate 115. A multiplexor 130 selectively outputs status flags from the execution unit 3 through output gate 116, as shown in Table I: TABLE I Flag Function CF Carry flag: Carrv or Borrow from most-significant bit PF Parity Flag: Exclusive NOT of lower 8 bits of result AF Auxiliary Flag: Carry of Borrow from bit 8 ZF Zero Flag: Zero result set ZF to 1 ; else ZF is cleared SF Sign Flag: set to most-significant bit of result OF Overflow Flag: set to 1 is two's complement overflow occurs: else cleared The addressing unit includes a 4: 1 multiplexor 152 that selects the „ data line 201 if it is a dword, or zero extends the a in data line 201 if it is a word, or the SUM output 206 if a dword, or zero extends the SUM output if a word. The term "zero extend" means copying a zero into the 24 highest order bits for a byte or into the 16 highest order bits for a word. An adder 154 receives the output from multiplexor 152 as well as the segment base value on data line 56 and adds the two values together, thereby generating a linear address 57. A limit check unit 160 is also provided in execution unit 3. The address includes a 20 bit limit value 162 which is stored in the shadow register 7. This limit value is provided to multiplexor 164, where it is scaled to 32 bits, depending on the value of the granularity bit, then inverted through 32 bit inverter 166. The output of inverter 166 is coupled to an adder 168, in which only the carry out function is used, and to a multiplexor 170. The output of multiplexor 152 is also coupled to adder 168. The output B of adder 168 indicates that the offset is below the scaled limit value. The multiplexor 170 is provided with constants HC (half ceiling) and FC (full ceiling), which provide the maximum value for addressing computations and cause selection of either 16 bit addresses (HC) or 32 bits addresses (FC). The output of multiplexor 170, which is the upper limit for address computations, is fed to adder 174, which is a carry save adder (CSA). Additional inputs to CSA 174 are from multiplexor 152 and multiplexor 176. Additional constant inputs 0, 1 and 3 are provided to the multiplexor 176 to define the instruction length, i.e., 0 = byte, 1 = word, and 3 = dword. The output of CSA 174 is fed to the input of adder 178 and to a single bit left shift unit 180, which effectively multiplies the value of the carry bits by 2. The output of shift unit 180 is fed to the adder 178. The output SegSpace of adder 178 is used for a limit calculation by a prefetch unit (not shown) and the output A of adder 178 indicates that the offset in above the scaled limit value. The operation of execution unit 3 for arithmetic and logical instructions will now be described in more detail. Instructions for addition, subtraction, and logical operations are carried out in a conventional manner by utilizing the resources of adder 103. Instructions for m implication and division are carried out by using the adder 103, the upper shifter comprising multiplexor 105, shifter 106 and register 107, and the lower shifter comprising multiplexor 108, shifter 109 and register 110. Generally, most multiplication and division instructions are performed according to conventional algorithms, i.e., shift and add for multiplication, and subtract and shift for division operations. For a division operation, if the value of ^ is greater than the value stored in registers 107, 110, then 0 is entered and the shifter is selected, else 1 is entered and the adder 103 is selected. For a multiplication operation, if OpA equals 1, then the adder 103 is selected, else the shifter is selected. A division example of 50 by 7 yields a quotient of 7 with a remainder of 1, as shown in Table II (truncated to 8 bits): Table II Cycle Register Shifter 106+109 Adder 107+110 103 1 00110010 01100100 1111 2 01100100 11001001 0101 3 0101 1001 10110011 0100 4 01000011 10000111 0001 5 00010111 xxxx xxxx xxxx Register 1 10 is used to provide the quotient while register 107 is used to provide the remainder, as illustrated in Figure 5. Thus, for byte operations, the lower 8 bits of register 110 contain the quotient while the lower 8 bits of register 107 contain the remainder. For word operations, the lower 16 bits of register 110 contain the quotient while the lower 16 bits of register 107 contain the remainder. For dword operations, all 32 bits of register 110 contain the quotient while all 32 bits of register 107 contain the remainder. Further discussion of the IDIV instruction can be found in commonly assigned, copending application entitled "METHOD FOR PERFORMING SIGNED DIVISION" by H. John Tam and filed on May 26, 1995. A multiplication example of 10 by 5 yields a product of 50, as shown in Table III (truncated to 8 bits): Table III Cycle Register Shifter 106+109 Adder 107+110 103 1 00000000 00000000 1111 2 10100000 01010000 0101 3 01010000 00101000 0100 4 11001000 01100100 0001 5 01100100 00110010 1101 6 00110010 xxxx xxxx xxxx The product of a multiplication operation is contained in registers 110 and 107 as illustrated in Figure 5. Thus, for byte operations, a 16-bit result is contained in the upper 8 bits of register 110 and the lower 8 bits of register 107. For word operations, a 32-bit result is contained in the upper 16 bits of register 110 and the lower 16 bits of register 107. For dword operations, a 64-bit result is contained all 32 bits of register 110 and all 32 bits of register 107. The barrel shifter 120 and associated multiplexors 121 and 122 may be used to carry out multi-bit shift and rotate operatic is, as is more fully described in the following commonly assigned, copending applications: "BARREL SHIFTER" by Thomas W.S. Thomson and H. John Tam as filed on May 26, 1995; (2) "BIT SEARCHING THROUGH 8, 16, OR 32-BIT OPERANDS USING A 32-BIT DATA PATH" by Thomas W.S. Thomson as filed on May 26, 1995; and (3) "METHOD FOR PERFORMING ROTATE THROUGH CARRY USING A 32-BIT BARREL SHIFTER AND COUNTER" by H. John Tam as filed on May 26, 1995. Double precision shift operations are also fully supported by the execution unit 3. For example, a double precision shift left is illustrated in Figure 6. In step 200, the shift amount is made less than or equal to 31. In step 300, the shift amount is set to less than or equal to 31. In step 302, the operand is examined to determine if it is 16 bits in length. If so, the program continues to step 304; if not, the program jumps to step 308. In step 304, the shift amount is examined. If the shift amount is greater than 16, then in step 306 the operand is rotated, the flags are set, and the instruction is completed. If the shift amount is not greater than 16, then the lower half of the operand is rotated in step 308, and the lower half of the operand is shifted left by one bit position in step 310. The exclusive OR of the operations in steps 308 and 310 is taken in step 312. In step 314, the shift amount is again examined. If the shift amount is zero, then do nothing in step 316 and exit the instruction. If the shift amount is non-zero, then shift the upper half of the operand in step 318, then combine the operations performed on both halfs of the operand in step 320. The invention embodiments described herein have been implemented in an integrated circuit which includes a number of additional functions and features which are described in the following co-pending, commonly assigned patent applications, the disclosure of each of which is incorporated herein by reference: U.S. patent application Serial No. 08/ entitled "DISPLAY CONTROLLER CAPABLE OF ACCESSING AN EXTERNAL MEMORY FOR GRAY SCALE MODULATION DATA" (atty. docket no. NSC1-62700); U.S. patent application Serial No. 08/ , entitled "SERIAL INTERFACE CAPABLE OF OPERATING IN TWO DIFFERENT SERIAL DATA TRANSFER MODES" (atty. docket no. NSC1-62800); U.S. patent application Serial No. 08/ , entitled "HIGH PERFORMANCE MULTIFUNCTION DIRECT MEMORY ACCESS (DMA) CONTROLLER" (atty. docket no. NSC 1-62900); U.S. patent application Serial No. 08/ , entitled "OPEN DRAIN MULTI-SOURCE CLOCK GENERATOR HAVING MINIMUM PULSE WIDTH" (atty. docket no. NSC1-63000); U.S. patent application Serial No. 08/ , entitled "INTEGRATED CIRCUIT WITH MULTIPLE FUNCTIONS SHARING MULTIPLE INTERNAL SIGNAL BUSES ACCORDING TO DISTRIBUTED BUS ACCESS AND CONTROL ARBITRATION" (atty. docket no. NSC1-63100); U.S. patent application Serial No. 08/ entitled "EXECUTION UNIT ARCHITECTURE TO SUPPORT x86 INSTRUCTION SET AND x86 SEGMENTED ADDRESSING" (atty. docket no. NSC1-63300); U.S. patent application Serial No. 08/ , entitled "BARREL SHIFTER" (atty. docket no. NSC1-63400); U.S. patent application Serial No. 08/ entitled "BIT SEARCHING THROUGH 8, 16, OR 32-BIT OPERANDS USING A 32-BIT DATA PATH" (atty. docket no. NSC1-63500); U.S. patent application Serial No. 08/ , entitled "DOUBLE PRECISION (64-BIT) SHIFT OPERATIONS USING A 32-BIT DATA PATH" (atty. docket no. NSC 1-63600); U.S. patent application Serial No. 08/ , entitled "METHOD FOR PERFORMING SIGNED DIVISION" (atty. docket no. NSCl-63700); U.S. patent application Serial No. 08/ , entitled "METHOD FOR PERFORMING ROTATE THROUGH CARRY USING A 32-BIT BARREL SHIFTER AND COUNTER" (atty. docket no. NSC1-63800); U.S. patent application Serial No. 08/ __, entitled "AREA AND TIME EFFICIENT FIELD EXTRACTION CIRCUIT" (atty. docket no. NSC 1-63900); U.S. patent application Serial No. 08/ , entitled "NON-ARITHMETICAL CIRCULAR BUFFER CELL AVAILABILITY STATUS INDICATOR CIRCUIT" (atty. docket no. NSC 1-64000); U.S. patent application Serial No. 08/ entitled "TAGGED PREFETCH AND INSTRUCTION DECODER FOR VARIABLE LENGTH INSTRUCΗON SET AND METHOD OF OPERAΗON" (atty. docket no. NSC1-64100); U.S. patent application Serial No. 08/ , entitled "PARTITIONED DECODER CIRCUIT FOR LOW POWER OPERAΗON" (atty. docket no. NSC 1-64200); U.S. patent application Serial No. 08/ , entitled "CIRCUIT FOR DESIGNATING INSTRUCΗON POINTERS FOR USE BY A PROCESSOR DECODER" (atty. docket no. NSC1-64300); U.S. patent application Serial No. 08/ , entitled "CIRCUIT FOR GENERATING A DEMAND-BASED GATED CLOCK" (atty. docket no. NSC1-64500); U.S. patent application Serial No. 08/ _, entitled "INCREMENTOR/DECREMENTOR" (atty. docket no. NSC1-64700); U.S. patent application Serial No. 08/ , entitled "A PIPELINED MICROPROCESSOR THAT PIPELINES MEMORY REQUESTS TO AN EXTERNAL MEMORY" (atty. docket no. NSC1-64800); U.S. patent application Serial No. 08/ , entitled "CODE BREAKPOINT DECODER" (atty. docket no. NSCl-64900); U.S. patent application Serial No. 08/ , entitled "TWO TIER PREFETCH BUFFER STRUCTURE AND METHOD WITH BYPASS" (atty. docket no. NSC 1-65000); U.S. patent application Serial No. 08/ entitled "INSTRUCΗON LIMIT CHECK FOR MICROPROCESSOR" (atty. docket no. NSC1-65100); U.S. patent application Serial No. 08/ , entitled "A PIPELINED MICROPROCESSOR THAT MAKES MEMORY REQUESTS TO A CACHE MEMORY AND AN EXTERNAL MEMORY CONTROLLER DURING THE SAME CLOCK CYCLE" (atty. docket no. NSC1-65200); U.S. patent application Serial No. 08/ , entitled "APPARATUS AND METHOD FOR EFFICIENT COMPUTATION OF A 486™ MICROPROCESSOR COMPATIBLE POP INSTRUCΗON" (atty. docket no. NSC1-65700); U.S. patent application Serial No. 08/ , entitled "APPARATUS AND METHOD FOR EFFICIENTLY DETERMINING ADDRESSES FOR MISALIGNED DATA STORED IN MEMORY" (atty. docket no. NSCl-65800); U.S. patent application Serial No. 08/ entitled "METHOD OF IMPLEMENTING FAST 486™ MICROPROCESSOR COMPATIBLE STRING OPERAΗON" (atty. docket no. NSC1-65900); U.S. patent application Serial No. 08/ , entitled "A PIPELINED MICROPROCESSOR THAT PREVENTS THE CACHEFROM BEINGREAD WHENTHE CONTENTS OFTHE CACHEARE INVALID" (atty. docket no. NSC1-66000); U.S. patent application Serial No. 08/ , entitled "DRAM CONTROLLER THAT REDUCES THE TIME REQUIRED TO PROCESS MEMORY REQUESTS" (atty. docket no. NSC1-66300); U.S. patent application Serial No. 08/ , entitled "INTEGRATED PRIMARY BUS AND SECONDARY BUS CONTROLLER WITH REDUCED PIN COUNT" (atty. docket no. NSC 1-66400); U.S. patent application Serial No. 08/ , entitled "SUPPLY AND INTERFACE CONFIGURABLE INPUT/OUTPUT BUFFER" (atty. docket no. NSC1-66500); U.S. patent application Serial No. 08/ , entitled "CLOCK GENERATION CIRCUIT FOR A DISPLAY CONTROLLER HAVING A FINE TUNEABLE FRAME RATE" (atty. docket no. NSC1-66600); U.S. patent application Serial No. 08/ , entitled "CONFIGURABLE POWER MANAGEMENT SCHEME" (atty. docket no. NSC 1-66700); U.S. patent application Serial No. 08/ entitled "BIDIRECTIONAL PARALLEL SIGNAL INTERFACE" (atty. docket no. NSC1-67000); U.S. patent application Serial No. 08/ , entitled "LIQUID CRYSTAL DISPLAY (LCD) PROTECTION CIRCUIT" (atty. docket no. NSC 1-67100); U.S. patent application Serial No. 08/ entitled "IN-CIRCUIT EMULATOR STATUS INDICATOR CIRCUIT" (atty. docket no. NSC1-67400); U.S. patent application Serial No. 08/ , entitled "DISPLAY CONTROLLER CAPABLE OF ACCESSING GRAPHICS DATA FROM A SHARED SYSTEM MEMORY" (atty. docket no. NSC1-67500); U.S. patent application Serial No. 08/ , entitled "INTEGRATED CIRCUIT WITH TEST SIGNAL BUSES AND TEST CONTROL CIRCUITS" (atty. docket no. NSC 1-67600); U.S. patent application Serial no. 08/ , entitled "DECODE BLOCK TEST METHOD AND APPARATUS" (atty. docket no. NSCl-68000). It should be understood that the invention is not intended to be limited by the specifics of the above-described embod ' ent, but rather defined by the accompanying claims.

Claims: WHAT IS CLAIMED IS: 1. A method for performing a double precision shift operation, comprising the sequential steps of: a. setting a shift amount to less than or equal to 31; b. examining an operand, wherein if the operand is 16 bits in length, then perform step c, otherwise jump to step e; c. examining the shift amount, wherein if the shift amount is greater than 16, then perform step d, otherwis. jump to step e; d. rotating the operand and setting the status flags, then ending the routine; e. rotating the lower half of the operand; f. shifting the lower half of the operand; g. taking the exclusive OR of steps e and f; h. examining the shift amount, wherein if the shift amount is zero, then exit the instruction, otherwise, go to step i; i. shifting the upper half of the operand; and j. combining the operations performed on both the upper and lower halfs of the operand.

Inventors: THOMSON THOMAS, THOMSON, THOMAS
Applicants: NAT SEMICONDUCTOR CORP, NATIONAL SEMICONDUCTOR CORPORATION
Application year: 1996
Main classification: G06F9
IPC codes: G06F9