Abstract:
An operation method has processing for applying a same type of operation in parallel to N M-bit operands to obtain N M-bit operation results executed on a computer. Here, N is an integer equal to or greater than 2 and M is an integer equal to or greater than 1. The operation method includes: an operation step of applying the type of operation to an N*M-bit provisional operand that is formed by concatenating the N M-bit operands, to obtain one N*M-bit provisional operation result, and generating correction information based on an effect had, by applying the operation, on each M bits of the provisional operation result from a bit that neighbors the M bits; and a correction step of correcting the provisional operation result in M-bit units with use of the correction information, to obtain the N M-bit operation results.

Description:
BACKGROUND OF THE INVENTION  
         [0001]    (1) Field of the Invention  
           [0002]    The present invention relates to SIMD (Single Instruction Multiple Data), which is a technique for increasing processing speed in a microprocessor by applying a same operation to a plurality of operands with one instruction.  
           [0003]    (2) Description of the Related Art  
           [0004]    In multimedia data processing of images and audio it is often necessary to apply the same calculation processing to an enormous amount of data, for example when a filter is applied to an image to change the color, quality or the like of the image.  
           [0005]    An ordinary processor that does not implement SIMD must execute one instruction for each piece of data, and consequently takes a long time to process multimedia data.  
           [0006]    In contrast, a processor that implements SIMD is capable of simultaneously processing a plurality of pieces of data with one instruction, and therefore greatly reducing the amount of time required to process multimedia data.  
           [0007]    The rise in recent years in multimedia devices has been accompanied by various types of processors being constructed to implement SIMD operation instructions, due to the considerable effectiveness of SIMD as a technique for multimedia data processing.  
           [0008]    A 64-bit processor, for example, implements three types of SIMD instructions that execute parallel addition operations: an ADDS 8 instruction that executes eight parallel operations to add pieces of 8-bit data, an ADDS 16 instruction that executes four parallel operations to add pieces of 16-bit data, and an ADDS 32 instruction that executes two parallel operations to add pieces of 32-bit data.  
           [0009]    The total number of SIMD operation instructions is the product of the number of data sizes subject to parallel operation and the number of types of operations. Therefore, the number of instructions increases dramatically when a there are a plurality of data sizes.  
           [0010]    A large number of instructions makes bit allocation of machine language instructions difficult, and means that a relatively large instruction decoder circuit is required in the processor. This results in increases in cost and power consumption.  
           [0011]    In addition, implementing SIMD operations in a RISC instruction set architecture causes problems in that the original advantage of the RISC instruction set architecture, i.e. only executing several tens of instructions, is lost.  
         SUMMARY OF THE INVENTION  
         [0012]    The object of the present invention is to provide an operation method, an operation apparatus, a program conversion apparatus that converts a program for the operation apparatus, a compiler that generates the program for the operation apparatus, a program conversion method, a compiling method, a program conversion program, a compiling program, an operation program, and a recording medium on which an operation program is recorded, that implement SIMD operations without a large increase in the number of instructions.  
           [0013]    An operation method of the present invention is an operation method for having processing executed on a computer, the processing applying a same type of operation in parallel to N M-bit operands to obtain N M-bit operation results, N being an integer equal to or greater than 2 and M being an integer equal to or greater than 1, the operation method including: an operation step of applying the type of operation to an N*M-bit provisional operand that is formed by concatenating the N M-bit operands, to obtain one N*M-bit provisional operation result, and generating correction information based on an effect had, by applying the operation, on each M bits of the provisional operation result from a bit that neighbors the M bits; and a correction step of correcting the provisional operation result in M-bit units with use of the correction information, to obtain the N M-bit operation results.  
           [0014]    According to the stated structure, N M-bit operands are subject to operation at once, and N M-bit operation results are obtained by correcting the operation result with use of the correction information. This enables a considerable reduction in the amount of time taken to apply the same type of operation to a large amount of data.  
           [0015]    Furthermore, in a processor in which the operation method is used, an operation instruction can be commonly used for existing operations and SIMD operations, and the correction instructions are not related to the type of operation. Therefore, since the number of instructions does not increase relative to the number of types of operations, the present invention can implement SIMD operations with relatively few increases in costs and power consumption that are brought about by problems with bit allocation for machine language instructions and large scale decoder circuits, compared with an operation method that implements conventional SIMD operation instructions.  
           [0016]    Accordingly, the present invention is able to implement SIMD operations without a large increase in the number of instructions.  
           [0017]    Here, in the correction step, M least significant bits of the provisional operation result may be excluded from being corrected.  
           [0018]    According to the stated structure, by excluding the M least significant bits of the provisional operation result from correction, it is not necessary to correct the M least significant bits, which are not influenced by the operation, in cases in which a carry from an operation before a carry flag was used is not taken into account.  
           [0019]    Here, the operation method may further execute on a computer, processing that applies the same type of operation in parallel to N/P M*P-bit operands to obtain N/P M*P-bit operation results, P being an integer equal to or greater than 2 and equal to or less than N/2, wherein the operation step applies the type of operation to an N*M-bit provisional operand to obtain one N*M-bit provisional operation result, the N*M-bit provisional operand being formed by concatenating one of (a) the N M-bit operands and (b) the N/P M*P-bit operands, and generates the correction information, and the correction step corrects, in M*P-bit units, the provisional operation results that correspond to only parts of an effect on each M*P bits of the correction information, to obtain the N/P M*P-bit operation results.  
           [0020]    According to the stated structure, by subjecting N/P M*P-bit operands to an operation at once and correcting the result using only the portions in the correction information that correspond to each M*P bit, N/P M*P-bit operation results can be obtained.  
           [0021]    Furthermore, in a processor in which the operation method is used, operation instructions can be commonly used for existing operations and SIMD operations, and the correction instruction is not related to the type of operation. Since the number of instructions is not the product of the number of types of operations and the number of sizes, and a dramatic increase in the number of instructions is avoided, the present invention can implement SIMD operations with relatively few increases in costs and power consumption that are brought about by problems with bit allocation for machine language instructions and large scale decoder circuits, compared with an operation method that implements conventional SIMD operation instructions.  
           [0022]    Accordingly, the present invention is able to implement SIMD operations without a large increase in the number of instructions.  
           [0023]    Here, respective values of N, M and P may be one of (a) N=8, M=8 and P=one of (i) 2, (ii) 4, and (iii) 2 and 4, and (b) N=4, M=16 and P=2 . . .  
           [0024]    According to the stated structure, in a 64-bit microprocessor, by processing eight 8-bit operands, four 16-bit operands, or two 32-bit operands at once, and correcting every eight bits, sixteen bits, or thirty-two bits, respectively, eight 8-bit operation results, four 16-bit operation results, or two 32-bit operation results, respectively, are obtained.  
           [0025]    Here, the type of operation may be any one of a plurality of types of operations, the operation step, when a least significant bit is considered to be a first bit, may generate the correction information, in M-bit units, based on the type of operation and a carry from an M*L-th bit to an M*L+1-th bit according to the operation, the M*L+1-th bit having a value of one of (a) 0 or 1 and (b) 0 or −1, L being N integers from 0 to N−1, and the correction step may perform, regardless of the type of the operation, one of (a) adding the correction information to the provisional operation result in M-bit units, and (b) subtracting the correction information from the provisional operation result in M-bit units, to obtain the N M-bit operation results.  
           [0026]    According to the stated structure, correction information is generated based on the type of operation and whether there is a carry for each M bits. In the correction operation 0 and 1, or 0 and −1 are used to show whether there is a carry for each M bits. The correction information is either added to or subtracted from the provisional operation result in M-bit units. Accordingly, N M-bit operation results are obtained.  
           [0027]    Here, the plurality of types of operations may include at least one of increment, decrement, dyadic add, and dyadic subtract, the operation step, (a) when the type is increment, may generate the correction information, each M*L+1-th bit without a carry according to the operation being represented by a value −1 in the correction information, and each M*L+1-th bit with a carry according to the operation being represented by a value 0 in the correction information, (b) when the type is decrement, may generate the correction information, each M*L+1-th bit without a carry according to the operation being represented by a value 0 in the correction information, and each M*L+1-th bit with a carry according to the operation being represented by a value 1 in the correction information, (c) when the type is dyadic add, may add a first provisional operand and a second provisional operand to obtain one N*M-bit provisional operation result, the first provisional operand being formed by concatenating N M-bit operands, and the second provisional operand being formed by concatenating N M-bit operands, and generate the correction information, each M*L+1-th bit without a carry according to the operation being represented by a value 0 in the correction information, and each M*L+1-th bit with a carry according to the operation being represented by a value 1 in the correction information, and (d) when the type is dyadic subtract, may subtract the second provisional operand from the first provisional operand to obtain one N*M-bit provisional operation result, and generate the correction information, each M*L+1-th bit without a carry according to the operation being represented by a value −1 in the correction information, and each M*L+1-th bit with a carry according to the operation being represented by a value 0 in the correction information, and the correction step may subtract the correction information from the provisional operation result in M-bit units, to obtain the N M-bit operation results.  
           [0028]    According to the stated structure, when the operation type is increment or dyadic add, carry information is generated in which an M*L+1-th bit that does not have a carry is represented by −1, and an M*L+1-th bit that does have a carry is represented by 0. Furthermore, when the operation type is decrement or dyadic subtract, carry information is generated in which an M*L+1-th bit that does not have a carry is represented by 0, and an M*L+1-th bit that does have a carry is represented by 1. By subtracting the correction information from the provisional operation result in M-bit units, N M-bit operation results can be obtained.  
           [0029]    Here, the plurality of types of operations may include at least one of increment, decrement, dyadic add, and dyadic subtract, the operation step, (a) when the type is increment, may generate the correction information, each M*L+1-th bit without a carry according to the operation being represented by a value 1 in the correction information, and each M*L+1-th bit with a carry according to the operation being represented by a value 0 in the correction information, (b) when the type is decrement, may generate the correction information, each M*L+1-th bit without a carry according to the operation being represented by a value 0 in the correction information, and each M*L+1-th bit position with a carry according to the operation being represented by a value −1 in the correction information, (c) when the type is dyadic add, may add a first provisional operand and a second provisional operand to obtain one N*M-bit provisional operation result, the first provisional operand being formed by concatenating N M-bit operands, and the second provisional operand being formed by concatenating N M-bit operands, and generate the correction information, each M*L+1-th bit without a carry according to the operation being represented by a value 0 in the correction information, and each M*L+1-th bit with a carry according to the operation being represented by a value −1 in the correction information, and (d) when the type is dyadic subtract, may subtract the second provisional operand from the first provisional operand to obtain one N*M-bit provisional operation result, and generates the correction information, each M*L+1-th bit without a carry according to the operation being represented by a value 1 in the correction information, and each M*L+1-th bit with a carry according to the operation being represented by a value 0 in the correction information, and the correction step may add the correction information and the provisional operation result in M-bit units, to obtain the N M-bit operation results.  
           [0030]    According to the stated structure, when the operation type is increment or dyadic add, carry information is generated in which an M*L+1-th bit that does not have a carry is represented by 1, and an M*L+1-th bit that does have a carry is represented by 0. Furthermore, when the operation type is decrement or dyadic subtract, carry information is generated in which an M*L+1-th bit that does not have a carry is represented by 0, and an M*L+1-th bit that does have a carry is represented by −1. By adding the correction information and the provisional operation result in M-bit units, N M-bit operation results can be obtained.  
           [0031]    Here, the type of operation may be any one of a plurality of types of operations, the operation step may further store type information showing the type, and the correction step may correct the provisional operation result according to the stored type information.  
           [0032]    According to the stated structure, the type of operation is stored while the operation is performed, and the provisional operation result is corrected according to the type of operation. Therefore, correction information can be generated without having to take the type of operation into account.  
           [0033]    Here, the operation step may generate, as the correction information, information showing whether there is a carry from lower bits to corresponding higher bits.  
           [0034]    According to the stated structure, as well as storing the type of instruction, the information showing whether there is a carry from each less significant bit to the corresponding more significant bit is stored, then the correction information is converted according to the stored type of operation. Accordingly, the provisional operation result can be corrected correctly.  
           [0035]    Here, the plurality of types of operations may include at least one of increment, decrement, dyadic add, and dyadic subtract, the correction step, in order to obtain the N M-bit operation results, where L is N integers from 0 to N−1, and when a least significant bit is considered to be a first bit, (a) when the stored type information shows one of increment and dyadic add, may add 1 to each M*L+1-th bit without a carry in the provisional operation result, based on the generated correction information, and (b) when the stored type information shows one of decrement and dyadic subtract, may subtract 1 from each M*L+1-th bit with a carry in the provisional calculation result, based on the generated correction information.  
           [0036]    According to the stated structure, when the stored type of operation is increment or dyadic add, 1 is added to an M*L+1-th bit that does not have a carry, and when the when the stored type of operation is decrement or dyadic subtract, 1 is subtracted from an M*L+1-th bit that has a carry. Accordingly, the provisional operation result can be corrected correctly.  
           [0037]    An operation method of the present invention is an operation method for having processing executed on a computer, the processing applying a same type of operation in parallel to N operands to obtain N operation results, N being an integer equal to or greater than 2, the operation method including: an operation step of applying the type of operation to a provisional operand that is formed by concatenating the N operands, to obtain one first provisional operation result that is N times a size of each of the N operation results, and generating correction information that corresponds to a difference between the first provisional operation result and a second provisional operation result, the second provisional operation result being formed by concatenating the N operation results; and a correction step of correcting the first provisional operation result with use of the correction information, and dividing a result of the correction into N pieces, to obtain the N operation results.  
           [0038]    According to the stated structure, N operands are subject to operation at once, and N operation results are obtained by correcting the operation result with use of the correction information. This enables a considerable reduction in the amount of time taken to apply the same type of operation to a large amount of data.  
           [0039]    Furthermore, in a processor in which the operation method is used, operation instructions can be commonly used for existing operations and SIMD operations, and the correction instruction is not related to the type of operation. Therefore, since the number of instructions does not increase relative to the number of types of operations, the present invention can implement SIMD operations with relatively few increases in costs and power consumption that are brought about by problems with bit allocation for machine language instructions and large scale decoder circuits, compared with an operation method that implements conventional SIMD operation instructions.  
           [0040]    Accordingly, the present invention is able to implement SIMD operations without a large increase in the number of instructions.  
           [0041]    Here, when M is an integer equal to or greater than 1, each operand is M bits in length, and each operation result is M*2 bits in length, the operation step may apply the type of operation to an N*M-bit provisional operand that is formed by concatenating the N operands, to obtain one N*M*2-bit provisional operation result, and generate correction information based on an effect had, by applying the operation, on each M*2 bits of the provisional operation result from another M*2 bits.  
           [0042]    According to the stated structure, by subjecting N M-bit operands to an operation at once and correcting the result using the correction information, N M*2-bit operation results can be obtained.  
           [0043]    Here, the operation method may further execute on a computer, processing that applies a same type of operation in parallel to N/P M*P-bit operands to obtain N/P M*P*2-bit operation results, P being an integer equal to or greater than 2 and equal to or less than N/2, wherein the operation step applies the type of operation to one N*M-bit provisional operand to obtain one N*M*2-bit provisional operation result, the N*M-bit provisional operand being formed by concatenating one of (a) the N M-bit operands and (b) the N/P M*P-bit operands, and, when L is N−1 integers from  1  to N−1 and a least significant bit is considered to be a first bit, generates first correction information, for each M*2 bits, based N−1 effects by the type of operation between (i) the M*2*L-th bit and lower bits and (ii) the M*2*L+1 bit and higher bits, and generates second correction information, for each M*2*P bits, based on N/P-1 effects by the type of operation between (iii) the M*2*P*L-th bit and lower bits and (iv) the M*2*L+1-th bit and higher bits, and the correction step corrects the provisional operation result with use of the first correction information, to obtain the N M*2-bit operation results, and corrects the provisional operation result with use of the second correction information, to obtain the N/P M*P*2-bit operation results.  
           [0044]    According to the stated structure, by subjecting N M-bit operands or N/P M*P-bit operations to an operation at once and generating first correction information and second correction information, N M-bit operation results can be obtained by correcting using the first correction information, and N/P M*P-bit operation results can be obtained by correcting using the second correction information.  
           [0045]    Here, it is preferable that N=8, M=4, P=2, and the type of operation is multiply.  
           [0046]    According to the stated structure, in a 64-bit microprocessor, when four 8-bit operands or two 16-bit operands are subject to an operation, four 16(=8*2)-bit operation results are obtained when the provisional operation result is corrected using the first correction information, and two 32(=16*2)-bit operation results are obtained when the provisional operation result is corrected using the second correction information.  
           [0047]    An operation apparatus of the present invention executes (a) an existing operation for applying a predetermined type of operation to a first-bit-length operand, and (b) an SIMD (Single Instruction Multiple Data) operation for applying the same predetermined type of operation in parallel to a plurality of second-bit-length operands, the second bit-length being shorter than the first bit-length, the operation apparatus implementing: an operation instruction for instructing application of the predetermined type of operation on one of (c) the first-bit-length operand, and (d) the plurality of second-bit-length operands concatenated and considered to be a first-bit-length operand; and an SIMD correction instruction for instructing correction of an operation result of the operation instruction to an operation result of the SIMD operation.  
           [0048]    According to the stated structure, the operation apparatus implements an operation instruction and an SIMD correction instruction, the operation instruction being performed on one long operand or on a plurality of short operands that are considered to be one long operand.  
           [0049]    Furthermore, the operation apparatus is able to use operation instructions commonly for existing operations and SIMD operations, and the correction instruction is not related to the type of operation. Since the number of instructions is not the product of the number of types of operations and the number of sizes, and a dramatic increase in the number of instructions is avoided, the present invention can implement SIMD operations with relatively few increases in costs and power consumption that are brought about by problems with bit allocation for machine language instructions and large scale decoder circuits, compared with an operation method that implements conventional SIMD operation instructions.  
           [0050]    Accordingly, the present invention is able to implement SIMD operations without a large increase in the number of instructions.  
           [0051]    Here, when N is an integer equal to or greater than 2, and M is an integer equal to or greater than 1, the operation apparatus may execute (a) the existing operation that applies the predetermined type of operation to one N*M-bit first-bit-length operand, to obtain one N*M-bit first-bit-length operation result, and (b) the SIMD operation used for applying N parallel operations that applies the same predetermined type of operation in parallel to N M-bit second-bit-length second operands, to obtain N M-bit second-bit-length operation results, and include: a storage unit operable to store the first-bit-length operation result, and correction information that is used in the correction; a decoding unit operable to decode the operation instruction and the SIMD correction instruction used for applying N parallel operations; and an execution unit operable, (a) when the operation instruction is decoded, to apply the predetermined type of operation to one of (i) the first-bit-length operand, and (ii) the N second-bit-length operands concatenated and considered to be a first-bit-length operand, to obtain one N*M-bit first-bit-length operation result, store the obtained N*M-bit first-bit-length operation result in the storage unit, and generate correction information based on an effect had, by applying the predetermined type of operation, on each M bits of the N*M-bit first-bit-length operation result from a bit that neighbors the M bits, and store the generated correction information in the storage unit, and (b) when the SIMD correction instruction used for applying N parallel operations is decoded, to correct the stored first-bit-length operation result in M-bit units using the stored correction information, to obtain the N second-bit-length operation results.  
           [0052]    According to the stated structure, by subjecting N/P M*P-bit operands to an operation at once and correcting the result using only the portions in the correction information that correspond to each M*P bit, N/P M*P-bit operation results can be obtained.  
           [0053]    Here, the execution unit, when the SIMD correction instruction used for applying N parallel operations is decoded, may exclude M least significant bits of the first-bit-length operation result from being corrected.  
           [0054]    According to the stated structure, by excluding the M least significant bits of the first bit-length operation result from correction, it is not necessary to correct the M least significant bits, which are not influenced by the operation, in cases in which a carry from an operation before a carry flag was used is not taken into account.  
           [0055]    Here, the operation apparatus may further execute the SIMD operation used for applying N/P parallel operations that applies the same predetermined type of operation in parallel to N/P M*P-bit third-bit-length operands, to obtain N/P M*P-bit third-bit-length operation results, P being an integer equal to or greater than 2 and equal to or less than N/2, wherein the decoding unit further decodes the SIMD correction instruction used for applying N/P parallel operations, and the execution unit, (a) when the operation instruction is decoded, applies the predetermined type of operation to the first-bit-length operand, the first bit-length operand being one of (i) the N second-bit-length operands concatenated and considered to be a first-bit-length operand, and (ii) the N/P third-bit-length operands concatenated and considered to be a first-bit-length operand, to obtain a first-bit-length operation result, stores the obtained first-bit-length operation result in the storage unit, generates the correction information based on an effect had, by applying the operation, on each M bits of the first bit-length operation result from a bit that neighbors the M bits, and stores the generated correction information in the storage unit, and (b) when the SIMD operation used for applying N/P parallel operations is decoded, corrects the stored first-bit-length operation result in M*P-bit units, using only parts of the stored correction information that correspond to an effect on each M*P-bit unit.  
           [0056]    According to the stated structure, by subjecting N/P M*P-bit operands to an operation at once and correcting the result using only the portions in the correction information that that correspond to each M*P bit, N/P M*P-bit operation results can be obtained.  
           [0057]    Furthermore, the operation apparatus is able to use operation instructions commonly for existing operations and SIMD operations, and the correction instruction is not related to the type of operation. Since the number of instructions is not the product of the number of types of operations and the number of sizes, and a dramatic increase in the number of instructions is avoided, the present invention can implement SIMD operations with relatively few increases in costs and power consumption that are brought about by problems with bit allocation for machine language instructions and large scale decoder circuits, compared with an operation method that implements conventional SIMD operation instructions.  
           [0058]    Accordingly, the present invention is able to implement SIMD operations without a large increase in the number of instructions.  
           [0059]    Here, wherein respective values of N, M and P may be one of (a) N=8, M=8 and P=one of (i) 2, (ii) 4, and (iii) 2 and 4, and (b) N=4, M=16 and P=2.  
           [0060]    According to the stated structure, in a 64-bit microprocessor, by processing eight 8-bit operands, four 16-bit operands, or two 32-bit operands at once, and correcting every eight bits, sixteen bits, or thirty-two bits, respectively, eight 8-bit operation results, four 16-bit operation results, or two 32-bit operation results, respectively, are obtained.  
           [0061]    Here, the type of operation may be any one of a plurality of types of operations, and the execution unit, where L is N integers from 0 to N−1, when a least significant bit is considered to be a first bit, and when the operation instruction is decoded, may generate correction information, in M-bit units, based on the type of operation and a carry from an M*L-th bit to an M*L+1-th bit according to the operation, the correction information showing for M bits the value of the M*L+1-th as one of (a) 0 or 1 and (b) 0 or −1, and when the SIMD correction instruction is decoded, may perform, regardless of the type of the operation, one of (a) adding the stored correction information to the first-bit-length operation result in M-bit units, and (b) subtracting the correction information from the first-bit-length operation result in M-bit units.  
           [0062]    According to the stated structure, correction information is generated based on the type of operation and whether there is a carry for each M bits. In the correction operation 0 and 1, or 0 and −1 are used to show whether there is a carry for each M bits. The correction information is either added to or subtracted from the provisional operation result in M-bit units. Accordingly, N M-bit operation results are obtained.  
           [0063]    Here, the plurality of types of operations may include at least one of increment, decrement, dyadic add, and dyadic subtract, and the execution unit (a) when the operation instruction is decoded and the predetermined type is increment, may increment the first-bit-length operand, to obtain a first-bit-length operation result, and generate the correction information, each M*L+1-th bit without a carry according to the operation being represented by a value −1 in the correction information, and each M*L+1-th bit with a carry according to the operation being represented by a value 0 in the correction information, (b) when the operation instruction is decoded and the predetermined type is decrement, may decrement the first-bit-length operand, to obtain a first-bit-length operation result, and generate the correction information, each M*L+1-th bit without a carry according to the operation being represented by a value 0 in the correction information, and each M*L+1-th bit with a carry according to the operation being represented by a value 1 in the correction information, (c) when the operation instruction is decoded and the predetermined type is dyadic add, may add a first first-bit-length operand and a second first-bit-length operand to obtain a first-bit-length operation result, the first first-bit-length operand being formed by concatenating N M-bit operands, and the second first-bit-length operand being formed by concatenating N M-bit operands, and may generate correction information, each M*L+1-th without a carry according to the operation being represented by a value 0 in the correction information, and M*L+1-th bit with a carry according to the operation being represented by a value 1 in the correction information, (d) when the operation instruction is decoded and the predetermined type is dyadic subtract, may subtract a second first-bit-length operand from a first first-bit-length operand to obtain a first-bit-length operation result, the first first-bit-length operand being formed by concatenating N M-bit operands, and the second first bit-length operand being formed by concatenating N M-bit operands, and may generate correction information, each M*L+1-th bit without a carry according to the operation being represented by a value −1 in the correction information, and each M*L+1-th bit position with a carry according to the operation being represented by a value 0 in the correction information, and (e) when the SIMD correction instruction is decoded, may subtract, in M-bit units, the stored correction information from the stored first-bit-length operation result, to obtain the N second-bit-length operation results.  
           [0064]    According to the stated structure, when the operation type is increment or dyadic add, carry information is generated in which an M*L+1-th bit that does not have a carry is represented by −1, and an M*L+1-th bit that does have a carry is represented by 0. Furthermore, when the operation type is decrement or dyadic subtract, carry information is generated in which an M*L+1-th bit that does not have a carry is represented by 0, and an M*L+1-th bit that does have a carry is represented by 1. By subtracting the correction information from the provisional operation result in M-bit units, N M-bit operation results can be obtained.  
           [0065]    Here, the plurality of types of operations may include at least one of increment, decrement, dyadic add, and dyadic subtract, and the execution unit (a) when the operation instruction is decoded and the predetermined type is increment, may increment the first-bit-length operand, to obtain a first-bit-length operation result, and may generate the correction information, each M*L+1-th bit without a carry according to the operation being represented by a value 1 in the correction information, and each M*L+1-th bit with a carry according to the operation being represented by a value 0 in the correction information, (b) when the operation instruction is decoded and the predetermined type is decrement, may decrement the first-bit-length operand, to obtain a first-bit-length operation result, and may generate the correction information, each M*L+1-th bit without a carry according to the operation being represented by a value 0 in the correction information, and each M*L+1-th bit with a carry according to the operation being represented by a value −1 in the correction information, (c) when the operation instruction is decoded and the predetermined type is dyadic add, may add a first first-bit-length operand and a second first-bit-length operand to obtain a first-bit-length operation result, the first first-bit-length operand being formed by concatenating N M-bit operands, and the second first-bit-length operand being formed by concatenating N M-bit operands, and may generate correction information, each M*L+1-th bit without a carry according to the operation being represented by a value 0 in the correction information, and M*L+1-th bit with a carry according to the operation being represented by a value −1 in the correction information, (d) when the operation instruction is decoded and the predetermined type is dyadic subtract, may subtract a second first-bit-length operand from a first first-bit-length operand to obtain a first-bit-length operation result, the first first-bit-length operand being formed by concatenating N M-bit operands, and the second first bit-length operand being formed by concatenating N M-bit operands, and may generate correction information, each M*L+1-th bit without a carry according to the operation being represented by a value 1, and each M*L+1-th bit position with a carry according to the operation being represented by a value 0 in the correction information, and (e) when the SIMD correction instruction for N parallel operations is decoded, may subtract, in M-bit units, the stored correction information from the stored first-bit-length operation result, to obtain the N second-bit-length operation results.  
           [0066]    According to the stated structure, when the operation type is increment or dyadic add, carry information is generated in which an M*L+1-th bit that does not have a carry is represented by 1, and an M*L+1-th bit that does have a carry is represented by 0. Furthermore, when the operation type is decrement or dyadic subtract, carry information is generated in which an M*L+1-th bit that does not have a carry is represented by 0, and an M*L+1-th bit that does have a carry is represented by −1. By adding the correction information and the provisional operation result in M-bit units, N M-bit operation results can be obtained.  
           [0067]    Here, the type of operation may be any one of a plurality of types of operations, the execution unit may further store type information showing the predetermined type, and, when the SIMD correction instruction used for applying N parallel operations is decoded, may correct the stored first-bit-length operation result according to the stored type.  
           [0068]    According to the stated structure, the type of operation is stored while the operation is performed, and the first bit-length provisional operation result is corrected according to the type of operation. Therefore, correction information can be generated without having to take the type of operation into account.  
           [0069]    Here, when the operation instruction is decoded, the execution unit may generate, as the correction information, information showing whether there is a carry from lower bits to corresponding higher bits.  
           [0070]    According to the stated structure, as well as storing the type of instruction, the information showing whether there is a carry from each less significant bit to the corresponding more significant bit is stored, then the correction information is converted according to the stored type of operation. Accordingly, the provisional operation result can be corrected correctly.  
           [0071]    Here, the plurality of types of operations may include at least one of increment, decrement, dyadic add, and dyadic subtract, the execution unit, in order to obtain the N M-bit operation results, where L is N integers from 0 to N−1, and when a least significant bit is considered to be a first bit, (a) when the stored type information shows one of increment and dyadic add, may add 1 to each M*L+1-th bit without a carry in the provisional operation result, based on the generated correction information, and (b) when the stored type information shows one of decrement and dyadic subtract, may subtract 1 from each M*L+1-th bit with a carry in the provisional calculation result, based on the generated correction information.  
           [0072]    According to the stated structure, when the stored type of operation is increment or dyadic add, 1 is added to an M*L+1-th bit that does not have a carry, and when the when the stored type of operation is decrement or dyadic subtract, 1 is subtracted from an M*L+1-th bit that has a carry. Accordingly, the second bit-length provisional operation result can be corrected correctly.  
           [0073]    Here, the operation apparatus may execute (a) the existing operation that applies the predetermined type of operation to a first-bit-length operand, to obtain one first-bit-length operation result, and (b) the SIMD operation used for applying N parallel operations that applies a same predetermined type of operation in parallel to N second-bit-length operands, to obtain N second-bit-length operation results, N being an integer equal to or greater than 2, and the operation apparatus may include: a storage unit operable to store the first-bit-length operation result, and correction information that is used in the correction; a decoding unit operable to decode the operation instruction and the SIMD correction instruction used for applying N parallel operations; and an execution unit operable, (a) when the operation instruction is decoded, to apply the predetermined type of operation to one of (i) the first-bit-length operand, and (ii) the N second-bit-length operands concatenated and considered to be a first-bit-length operand, to obtain a first first-bit-length operation result, store the obtained first first-bit-length operation result in the storage unit, and generate correction information that corresponds to a difference between the first first-bit-length operation result and a second first-bit-length operation result that is the N second-bit-length operation results concatenated, and store the generated correction information in the storage unit, and (b) when the SIMD correction instruction for applying N parallel operations is decoded, to correct the stored first first-bit-length operation result using the stored correction information, to obtain N SIMD operation second-bit-length operation results.  
           [0074]    According to the stated structure, N operands are subject to operation at once, and N operation results are obtained by correcting the operation result with use of the correction information. This enables a considerable reduction in the amount of time taken to apply the same type of operation to a large amount of data.  
           [0075]    Here, when M is an integer equal to or greater than 1, the first-bit-length operand is N*M bits in length, each second-bit-length operand is M bits, the first first-bit-length operation result is N*M*2 bits in length, and each second-bit-length operation result is M*2 bits in length, and the execution unit may apply the predetermined type of operation to one of (a) the first-bit-length operand and (b) the N second-bit-length operands concatenated and considered to be a first-bit-length operand, to obtain an N*M*2-bit first-bit-length operation result, may store the obtained first-bit-length operation result in the storage unit, generates correction information based on an effect had, by applying the predetermined type of operation, on each M*2 bits of the first-bit-length operation result, from other M*2 bits, and may store the correction information in the storage unit.  
           [0076]    According to the stated structure, by subjecting N M-bit operands to an operation at once and correcting the result using the correction information, N M*2-bit operation results can be obtained.  
           [0077]    Here, the operation apparatus may further execute the SIMD operation used for applying N/P parallel operations that applies the same predetermined type of operation in parallel to N/P M*P-bit third-bit-length operands, to obtain N/P M*P*2-bit third-bit-length operation results, P being an integer equal to or greater than 2 and equal to or less than N/2, wherein the decoding unit further decodes the SIMD correction instruction used for applying N/P parallel operations, the execution unit, (a) when the operation instruction is decoded, applies the predetermined type of operation to the first-bit-length operand, the first-bit-length operand being one of (i) the N second-bit-length operands concatenated and considered to be a first-bit-length operand, and (ii) the N/P third-bit-length operands concatenated and considered to be a first-bit-length operand, to obtain one N*M*2-bit first-bit-length operation result, stores the obtained first-bit-length operation result in the storage unit, where L is N−1 integers from 0 to N−1, and when a least significant bit is considered to be a first bit, generates first correction information, for each M*2 bits, based N−1 effects by the predetermined type of operation between (iii) the M*2*L-th bit and lower bits and (iv) the M*2*L+1-th bit position and higher bits, and generates second correction information, for each M*2*P bits, based on N/P−1 effects by the predetermined type of operation between (v) the M*2*P*L-th bit and lower bits and (vi) the M*2*L+1-th bit and higher bits, and stores the first correction information and second correction information in the storage unit, (b) when the SIMD correction instruction used for applying N parallel operations is decoded, corrects the stored first-bit-length operation result with use of the stored first correction information, and (c) when the SIMD correction instruction used for applying N/P parallel operations is decoded, corrects the stored first-bit-length operation result with use of the stored second correction information.  
           [0078]    According to the stated structure, by subjecting N M-bit operands or N/P M*P-bit operations to an operation at once and generating first correction information and second correction information, N M-bit operation results can be obtained by correcting using the first correction information, and N/P M*P-bit operation results can be obtained by correcting using the second correction information.  
           [0079]    Here, it is preferable that N=8, M=4, P=2, and the type of operation is multiply.  
           [0080]    According to the stated structure, in a 64-bit microprocessor, when four 8-bit operands or two 16-bit operands are subject to an operation, four 16(=8*2)-bit operation results are obtained when the provisional operation result is corrected using the first correction information, and two 32(=16*2)-bit operation results are obtained when the provisional operation result is corrected using the second correction information.  
           [0081]    Here, the operation apparatus may further include: a saving unit operable, when an interrupt is received or when switching to another context, to save contents stored in the storage unit to a storage apparatus that is external to the operation apparatus; and a restoration unit operable, when returning from the interrupt or switching back to an original context, to restore the saved contents to the storage unit.  
           [0082]    According to the stated structure, the contents of the storage unit can be stored externally when an interrupt is received or when switching to another context, and then restored when returning from the interrupt or switching back to the original context. Therefore, inconsistencies do not occur when an interrupt or a context switch is received between an operation instruction and an SIMD correction instruction.  
           [0083]    Accordingly, multimedia processing can be performed optimally without time lags, and the present invention can be applied to multitask processing.  
           [0084]    An operation apparatus of the present invention executes N parallel SIMD (Single Instruction Multiple Data) operations for applying a same type of operation in parallel to N M-bit operands, to obtain N M-bit operation results, N being an integer equal to or greater than 2 and M being an integer equal to or greater than 1, the operation apparatus implementing: an N parallel SIMD increment instruction for adding 1 to each M-bit operand, and including: a decoding unit operable to decode the N parallel SIMD increment instruction; and an execution unit operable, when the N parallel SIMD increment instruction is decoded, and when a least significant bit position is considered to be a first bit position, to add first data and second data without propagating a carry from each M*L-th bit to corresponding M*L+1-th bits, the first data being the N M-bit operands concatenated, the second data being N concatenated pieces of M-bit data which each express 1, L being N−1 integers from 1 to N−1.  
           [0085]    According to the stated structure, the operation apparatus decodes and executes an N parallel SIMD increment instruction.  
           [0086]    Therefore, it is possible to increase a plurality of addresses at once and control the brightness, color or the like of a plurality of pieces of image data at high speed.  
           [0087]    An operation apparatus of the present invention executes N parallel SIMD (Single Instruction Multiple Data) operations for applying a same type of operation in parallel to N M-bit operands, to obtain N M-bit operation results, N being an integer equal to or greater than 2 and M being an integer equal to or greater than 1, the operation apparatus implementing: an N parallel SIMD decrement instruction for subtracting 1 from each M-bit operand, and including: a decoding unit operable to decode the N parallel SIMD decrement instruction; and an execution unit operable, when the N parallel SIMD decrement instruction is decoded, and when a least significant bit position being considered to be a first bit position, to subtract second data from first data without propagating a carry from each M*L-th bit to corresponding M*L+1-th bits, the first data being the N M-bit operands concatenated, the second data being N concatenated pieces of M-bit data which each express 1, L being N−1 integers from 1 to N−1.  
           [0088]    According to the stated structure, the operation apparatus decodes and executes an N parallel SIMD increment instruction.  
           [0089]    Therefore, it is possible to decrease a plurality of addresses at once and control the brightness, color or the like of a plurality of pieces of image data at high speed.  
           [0090]    A program conversion apparatus of the present invention converts a program that includes an SIMD (Single Instruction Multiple Data) operation instruction for applying a same type of operation in parallel to a plurality of predetermined-bit-length operands and other operation instructions, including: an analysis unit operable to analyze the operation instructions in the program; and a conversion unit operable, when the analyzed instruction is the SIMD operation instruction, to convert the SIMD operation instruction to (a) an operation instruction that instructs applying the type of operation to the plurality of concatenated predetermined length operands considered to be one operand, and (b) an SIMD correction instruction that instructs correcting an operation result of the operation instruction to an operation result of the SIMD operation instruction.  
           [0091]    A program conversion method of the present invention converts a program that includes an SIMD (Single Instruction Multiple Data) operation instruction for applying a same type of operation in parallel to a plurality of predetermined-bit-length operands and other operation instructions, including: an analysis step of analyzing the operation instructions in the program; and a conversion step, when the analyzed instruction is the SIMD operation instruction, of converting the SIMD operation instruction to (a) an operation instruction that instructs applying the type of operation to the plurality of concatenated predetermined length operands considered to be one operand, and (b) an SIMD correction instruction that instructs correcting an operation result of the operation instruction to an operation result of the SIMD operation instruction.  
           [0092]    A program conversion program of the present invention converts a program that includes an SIMD (Single Instruction Multiple Data) operation instruction for applying a same type of operation in parallel to a plurality of predetermined-bit-length operands and other operation instructions, including: an analysis step of analyzing the operation instructions in the program; and a conversion step, when the analyzed instruction is the SIMD operation instruction, of converting the SIMD operation instruction to (a) an operation instruction that instructs applying the type of operation to the plurality of concatenated predetermined length operands considered to be one operand, and (b) an SIMD correction instruction that instructs correcting an operation result of the operation instruction to an operation result of the SIMD operation instruction.  
           [0093]    According to the stated structures, an SIMD operation instruction can be converted to another operation instruction and an SIMD correction instruction.  
           [0094]    Accordingly, the present invention is able to have a processor execute an SIMD operation for a plurality of types of operations with only an SIMD correction instruction, which is not related to the type of operation, in addition to conventional instructions. Avoiding a dramatic increase in the number of instructions means that the machine language is relatively short, therefore reducing the program code size.  
           [0095]    A compiler of the present invention compiles a machine language program from a high-order language program, the high-order language program including a syntax that has an SIMD (Single Instruction Multiple Data) operation for applying a same type of operation in parallel to a plurality of predetermined-bit-length operands executed in an operation apparatus, the machine language program being composed of a plurality of machine language instruction that are executable by the operation apparatus, the compiler including: an analysis unit operable to analyze the syntax of the high-order language program; and a compiling unit operable to generate the machine language program by converting the analyzed syntax to a machine language instruction string, wherein the compiling unit, when the syntax for having an SIMD operation executed is analyzed, converts the syntax to a machine language instruction series that includes (a) an operation machine language instruction that instructs applying the type of operation to the plurality of predetermined length operands concatenated and considered to be one operand, and (b) an SIMD correction machine language instruction that instructs correcting an operation result of the operation instruction to an operation result of the SIMD operation instruction.  
           [0096]    A compiling method of the present invention compiles a machine language program from a high-order language program, the high-order language program including a syntax that has an SIMD (Single Instruction Multiple Data) operation for applying a same type of operation in parallel to a plurality of predetermined-bit-length operands executed in an operation apparatus, the machine language program being composed of a plurality of machine language instructions that are executable by the operation apparatus, the compiling method including: an analysis step of analyzing the syntax of the high-order language program; and a compiling step of generating the machine language program by converting the analyzed syntax to a machine language instruction string, wherein the compiling step, when the syntax for having an SIMD operation executed is analyzed, converts the syntax to a machine language instruction series that includes (a) an operation machine language instruction that instructs applying the type of operation to the plurality of predetermined length operands concatenated and considered to be one operand, and (b) an SIMD correction machine language instruction that instructs correcting an operation result of the operation instruction to an operation result of the SIMD operation instruction.  
           [0097]    A compiling program of the present invention compiles a machine language program from a high-order language program, the high-order language program including a syntax that has an SIMD (Single Instruction Multiple Data) operation for applying a same type of operation in parallel to a plurality of predetermined-bit-length operands executed in an operation apparatus, the machine language program being composed of a plurality of machine language instruction that are executable by the operation apparatus, the compiling program having a computer execute: an analysis step of analyzing the syntax of the high-order language program; and a compiling step of generating the machine language program by converting the analyzed syntax to a machine language instruction string, wherein the compiling step, when the syntax for having an SIMD operation executed is analyzed, converts the syntax to a machine language instruction series that includes (a) an operation machine language instruction that instructs applying the type of operation to the plurality of predetermined length operands concatenated and considered to be one operand, and (b) an SIMD correction machine language instruction that instructs correcting an operation result of the operation instruction to an operation result of the SIMD operation instruction.  
           [0098]    According to the stated structures, the present invention is able to convert an SIMD operation syntax to an operation machine language instruction and an SIMD correction machine language instruction.  
           [0099]    Accordingly, the present invention is able to have a processor execute an SIMD operation for a plurality of types of operations with only an SIMD correction machine language instruction, which is not related to the type of operation, in addition to conventional machine language instructions. Avoiding a dramatic increase in the number of instructions means that the machine language is relatively short, therefore reducing the program code size.  
           [0100]    In the compiler, the compiling unit may include: a primary conversion sub-unit operable, when the syntax for having the SIMD operation executed is analyzed, to convert the syntax to an intermediate language code string that includes intermediate language code that shows the SIMD operation; and a secondary conversion sub-unit operable to convert the intermediate language code into the operation machine language instruction and the SIMD correction machine language instruction.  
           [0101]    In the compiling method, the compiling step may include: a primary conversion sub-step, when the syntax for having an SIMD operation executed is analyzed, of converting the syntax to an intermediate language code string that includes intermediate language code that shows the SIMD operation; and a secondary conversion sub-step of converting the intermediate language code into the operation machine language instruction and the SIMD correction machine language instruction.  
           [0102]    In the compiling program the compiling step may include: a primary conversion sub-step, when the syntax for having an SIMD operation executed is analyzed, of converting the syntax to an intermediate language code string that includes intermediate language code that shows the SIMD operation; and a secondary conversion sub-step of converting the intermediate language code into the operation machine language instruction and the SIMD correction machine language instruction.  
           [0103]    According to the stated construction, the SIMD operation syntax is converted to an intermediate language code string that includes an intermediate language code that shows the SIMD operation. Then, the intermediate language code that shows the SIMD operation is converted to an operation machine language instruction and an SIMD correction machine language instruction.  
           [0104]    An operation program of the present invention is an operation program for having a computer execute processing, the processing applying a same type of operation in parallel to N M-bit operands to obtain N M-bit operation results, N being an integer equal to or greater than 2 and M being an integer equal to greater than 1, the operation program having the computer execute: an operation step of applying the type of operation to an N*M-bit provisional operand that is formed by concatenating the N M-bit operands, to obtain one N*M-bit provisional operation result, and generating correction information based on an effect had, by applying the operation, on each M bits of the provisional operation result from a bit that neighbors the M bits; and a correction step of correcting the provisional operation result in M-bit units with use of the correction information, to obtain the N M-bit operation results.  
           [0105]    A computer-readable recording medium of the present invention on which the operation program is recorded is a computer-readable recording medium having an operation program recorded thereon, the operation program having a computer execute processing, the processing applying a same type of operation in parallel to N M-bit operands to obtain N M-bit operation results, N being an integer equal to or greater than 2 and M being an integer equal to greater than 1, the operation program having the computer execute: an operation step of applying the type of operation to an N*M-bit provisional operand that is formed by concatenating the N M-bit operands, to obtain one N*M-bit provisional operation result, and generating correction information based on an effect had, by applying the operation, on each M bits of the provisional operation result from a bit that neighbors the M bits; and a correction step of correcting the provisional operation result in M-bit units with use of the correction information, to obtain the N M-bit operation results.  
           [0106]    According to the stated structure, N M-bit operands are subject to operation at once, and N M-bit operation results are obtained by correcting the operation result with use of the correction information. This enables a considerable reduction in the amount of time taken to apply the same type of operation to a large amount of data.  
           [0107]    Furthermore, in a processor in which the operation method is used, operation instructions can be commonly used for existing operations and SIMD operations, and the correction instruction is not related to the type of operation. Therefore, since the number of instructions does not increase relative to the number of types of operations, the present invention can implement SIMD operations with relatively few increases in costs and power consumption that are brought about by problems with bit allocation for machine language instructions and large scale decoder circuits, compared with an operation method that implements conventional SIMD operation instructions.  
           [0108]    Accordingly, the present invention is able to implement SIMD operations without a large increase in the number of instructions.  
           [0109]    In the operation program the correction step, M least significant bits of the provisional operation result may be excluded from being corrected.  
           [0110]    In the computer-readable recording medium of the present invention on which the operation program is recorded, in the correction step, M least significant bits of the provisional operation result may be excluded from being corrected.  
           [0111]    According to the stated structure, by excluding the M least significant bits of the provisional operation result from correction, it is not necessary to correct the M least significant bits, which are not influenced by the operation, in cases in which a carry from an operation before a carry flag was used is not taken into account.  
           [0112]    An operation program of the present invention is an operation program for having a computer execute processing, the processing applying a same type of operation in parallel to N operands to obtain N operation results, N being an integer equal to or greater than 2, the operation program having the computer execute: an operation step of applying the type of operation to a provisional operand that is formed by concatenating the N operands, to obtain one first provisional operation result that is N times a size of each of the N operation results, and generating correction information that corresponds to a difference between the first provisional operation result and a second provisional operation result, the second provisional operation result being formed by concatenating the N operation results; and a correction step of correcting the first provisional operation result with use of the correction information, and dividing a result of the correction into N pieces, to obtain the N operation results.  
           [0113]    A computer-readable recording medium of the present invention on which the operation program is recorded a computer-readable recording medium having an operation program recorded thereon, the operation program having a computer execute processing, the processing applying a same type of operation in parallel to N operands to obtain N operation results, N being an integer equal to or greater than 2, the operation program having the computer execute: an operation step of applying the type of operation to a provisional operand that is formed by concatenating the N operands, to obtain one first provisional operation result that is N times a size of each of the N operation results, and generating correction information that corresponds to a difference between the first provisional operation result and a second provisional operation result, the second provisional operation result being formed by concatenating the N operation results; and a correction step of correcting the first provisional operation result with use of the correction information, and dividing a result of the correction into N pieces, to obtain the N operation results.  
           [0114]    According to the stated structure, N operands are subject to operation at once, and N operation results are obtained by correcting the operation result with use of the correction information. This enables a considerable reduction in the amount of time taken to apply the same type of operation to a large amount of data.  
           [0115]    Furthermore, in a processor in which the operation method is used, operation instructions can be commonly used for existing operations and SIMD operations, and the correction instruction is not related to the type of operation. Therefore, since the number of instructions does not increase relative to the number of types of operations, the present invention can implement SIMD operations with relatively few increases in costs and power consumption that are brought about by problems with bit allocation for machine language instructions and large scale decoder circuits, compared with an operation method that implements conventional SIMD operation instructions.  
           [0116]    Accordingly, the present invention is able to implement SIMD operations without a large increase in the number of instructions.  
           [0117]    An operation program of the present invention has a computer execute (a) an existing operation for applying a predetermined type of operation to a first-bit-length operand, and (b) an SIMD (Single Instruction Multiple Data) operation for applying the same predetermined type of operation in parallel to a plurality of second-bit-length operands, the second bit-length being shorter than the first bit-length, the operation program including: an operation instruction for instructing application of the predetermined type of operation on one of (c) the first-bit-length operand, and (d) the plurality of second-bit-length operands concatenated and considered to be a first-bit-length operand; and an SIMD correction instruction for instructing correction of an operation result of the operation instruction to an operation result of the SIMD operation.  
           [0118]    A computer-readable recording medium of the present invention on which the operation program is recorded A computer-readable recording medium having an operation program recorded thereon, the operation program having a computer execute (a) an existing operation for applying a predetermined type of operation to a first-bit-length operand, and (b) an SIMD (Single Instruction Multiple Data) operation for applying the same predetermined type of operation in parallel to a plurality of second-bit-length operands, the second bit-length being shorter than the first bit-length, the operation program including: an operation instruction for instructing application of the predetermined type of operation on one of (c) the first-bit-length operand, and (d) the plurality of second-bit-length operands concatenated and considered to be a first-bit-length operand; and an SIMD correction instruction for instructing correction of an operation result of the operation instruction to an operation result of the SIMD operation.  
           [0119]    According to the stated structure, the operation apparatus implements an operation instruction and an SIMD correction instruction, the operation instruction being performed on one long operand or on a plurality of short operands that are considered to be one long operand.  
           [0120]    Furthermore, the operation apparatus is able to use operation instructions commonly for existing operations and SIMD operations, and the correction instruction is not related to the type of operation. Since the number of instructions is not the product of the number of types of operations and the number of sizes, and a dramatic increase in the number of instructions is avoided, the present invention can implement SIMD operations with relatively few increases in costs and power consumption that are brought about by problems with bit allocation for machine language instructions and large scale decoder circuits, compared with an operation method that implements conventional SIMD operation instructions.  
           [0121]    Accordingly, the present invention is able to implement SIMD operations without a large increase in the number of instructions. 
       
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS  
       [0122]    These and other objects, advantages and features of the invention will become apparent from the following description thereof taken in conjunction with the accompanying drawings which illustrate a specific embodiment of the invention. In the drawings:  
         [0123]    [0123]FIG. 1 shows the structure of an SIMD operation apparatus of the first embodiment;  
         [0124]    [0124]FIGS. 2A to  2 D show examples of the bit structure of carry information stored in a CR  9 ;  
         [0125]    [0125]FIGS. 3A to  3 C show the contents of the registers during an SIMD dyadic add operation;  
         [0126]    [0126]FIGS. 4A to  4 C show the contents of the registers during an SIMD dyadic subtract operation;  
         [0127]    [0127]FIGS. 5A to  5 C show the contents of the registers during an SIMD increment operation;  
         [0128]    [0128]FIGS. 6A to  6 C show the contents of the registers during an SIMD decrement operation;  
         [0129]    [0129]FIG. 7 shows the structure of an SIMD operation apparatus of the second embodiment;  
         [0130]    [0130]FIGS. 8A to  8 D show examples of the bit structure of carry information stored in the CR  9 ;  
         [0131]    [0131]FIGS. 9A to  9 C show the contents of the registers during an SIMD dyadic add operation;  
         [0132]    [0132]FIGS. 10A to  10 C show the contents of the registers during an SIMD dyadic subtract operation;  
         [0133]    [0133]FIGS. 11A to  11 C show the contents of the registers during an SIMD increment operation;  
         [0134]    [0134]FIGS. 12A to  12 C show the contents of the registers during an SIMD decrement operation;  
         [0135]    [0135]FIG. 13 shows the structure of an SIMD operation apparatus of the third embodiment;  
         [0136]    [0136]FIG. 14 shows the contents of the registers during an  8 * 4  SIMD dyadic multiply operation;  
         [0137]    [0137]FIG. 15 shows the contents of the registers during an  16 * 2  SIMD dyadic multiply operation;  
         [0138]    [0138]FIG. 16 shows the structure of an SIMD operation apparatus that stores a carry result and an operation type during execution of an operation instruction, and generates carry information during execution of an SIMD correction instruction;  
         [0139]    [0139]FIG. 17 shows the structure of a compiler of the fourth embodiment of the present invention;  
         [0140]    [0140]FIG. 18 shows an example of a C language program that is written to a read buffer  102 ;  
         [0141]    [0141]FIG. 19 shows an example of an intermediate code program generated from the C language program shown in FIG. 18;  
         [0142]    [0142]FIG. 20 shows the structure of a machine language instruction generation unit  105  in detail;  
         [0143]    [0143]FIG. 21 shows an example of a modified intermediate code program generated from the intermediate code program shown in FIG. 19;  
         [0144]    [0144]FIG. 22 shows an example of an SIMD intermediate code program generated from the modified intermediate code program shown in FIG. 21;  
         [0145]    [0145]FIG. 23 shows an example of a machine language instruction program generated from the SIMD intermediate code program shown in FIG. 22; and  
         [0146]    [0146]FIG. 24 shows an outline of processing performed by an SIMD operation extraction unit  110  for generating the modified intermediate code program. 
     
    
     DESCRIPTION OF THE PREFERRED EMBODIMENTS  
     First Embodiment  
       [0147]    &lt;Outline&gt; 
         [0148]    The first embodiment of the present invention realizes an SIMD operation instruction by executing an operation instruction for a non-parallel operation and a correction instruction for correcting an operation result of the nonparallel operation instruction to an operation result of an SIMD operation instruction.  
         [0149]    A processor in the first embodiment of the present invention, when executing the non-parallel operation instruction, stores an operation result and a carry result for each smallest unit of data size that is subjected to the parallel operation. Then, when executing the correction instruction, the processor obtains an SIMD operation instruction result by correcting only necessary bit positions in the operation result, based on the stored carry result.  
         [0150]    Here, the non-parallel operation instruction is executed independent of the SIMD operation instruction, therefore there is no increase in the number of operation instructions.  
         [0151]    Furthermore, it is sufficient to have only as many correction instructions as sizes of data that are subject to parallel operations. This means that the number of instructions is not the product of the number of types of operations, and therefore there is not a dramatic increase in the number of instructions.  
         [0152]    &lt;Structure&gt; 
         [0153]    [0153]FIG. 1 shows the structure of an SIMD operation apparatus of the first embodiment.  
         [0154]    An SIMD operation apparatus  10  shown in FIG. 10 has a three-stage pipeline structure, the three stages being an instruction fetch stage (hereinafter referred to as an “IF stage”), a decode stage (hereinafter referred to as a “DEC stage”) in which an instruction is decoded and data is read from the register, and an execute stage (hereinafter EX stage). The SIMD apparatus  10  is composed of a ROM  1 , an IR  2 , a DEC  3 , a register file  4 , an EXT  5 , an AR  6 , an ALU  8  and a CR  9 .  
         [0155]    The ROM  1  is a recording medium that stores a machine language program.  
         [0156]    The IR  2  is an instruction register that stores a machine language instruction fetched from the ROM  1 .  
         [0157]    The DEC  3  is an instruction decoder that decodes the machine language instruction stored in the IR  2  and controls the various compositional elements of the SIMD operation apparatus  10  accordingly.  
         [0158]    Here, the instructions that the DEC  3  decodes are: a dyadic add instruction “ADD D 0 ,D 1 ”, a dyadic subtract instruction “SUB D 0 ,D 1 ”, an increment instruction “INC D 1 ”, a decrement instruction “DEC D 1 ”, an 8-bit SIMD correction instruction “SIMD8 D 1 ”, a 16-bit SIMD correction instruction “SIMD16 D 1 ”, and a 32-bit SIMD correction instruction “SIMD32 D 1 ”.  
         [0159]    The register file  4  is a collection of registers, each of which has sixteen 64-bit internal registers: D 0  register through to D 15  register.  
         [0160]    The EXT  5  is an extender that, as a result of a 16-bit SIMD correction instruction being decoded by the IR 2 , 16-bit sign extends four of eight pieces of 8-bit data that have been stored in the CR  9  to 16-bit data. Furthermore, as a result of a 32-bit SIMD correction instruction being decoded by the IR 2 , the EXT  5  32-bit sign extends two of eight pieces of 8-bit data that have been stored in the CR  9  to 32-bit data. When an 8-bit SIMD correction instruction “SIMD8 D 1 ” is decoded by the IR  2 , the EXT  5  does not perform sign expansion on the eight pieces of 8-bit data stored in the CR  9 , but instead stores the eight pieces of data in the BR  7 .  
         [0161]    The following shows examples of sign extending. The result of 16-bit sign extending “0x??00??01??02??03” is “0x0000000100020003”. The result of 16-bit sign extending “0x??FF??FE??FD??FC” is “0xFFFFFFFEFFFDFFFC”. The result of 32-bit sign extending “0x??????01??????02” is “0x0000000100000002”. The result of 32-bit sign extending “0x??????FF??????FE” is 0xFFFFFFFFFFFFFFFE”.  
         [0162]    Note that “0x” means that the value is displayed in hexadecimal, and “?” means that the same result is obtained no matter what value is in the position shown by “?”.  
         [0163]    The AR  6  is a 64-bit register that stores output from the register file  4 .  
         [0164]    The AR  6  stores the output from the D 1  register when the output is the dyadic add instruction “ADD D 0 ,D 1 ”, the dyadic subtract instruction “SUB D 0 ,D 1 ”, the increment instruction “INC D 1 ”, the decrement instruction “DEC D 1 ”, the 8-bit SIMD correction instruction “SIMD8 D 1 ”, the 16-bit SIMD correction instruction “SIMD16 D 1 ”, and the 32-bit SIMD correction instruction “SIMD32 D 1 ”.  
         [0165]    The BR  7  is a 64-bit register that selects and stores the output from the register file  4 , “0x0000000000000001”, or the output from the EXT  5 , according to a machine language instruction.  
         [0166]    Here, the BR  7  selects the output from the D 0  register when the dyadic add instruction “ADD D 0 ,D 1 ” or the dyadic subtract instruction “SUB D 0 ,D 1 ” is executed, selects “0x0000000000000001” when the increment instruction “INC D 1 ” or the decrement instruction “DEC D 1 ” is executed, and selects output from the EXT  5  when the 8-bit SIMD correction instruction “SIMD8 D 1 ”, the 16-bit SIMD correction instruction “SIMD16 D 1 ”, or the 32-bit SIMD correction instruction “SIMD32 D 1 ” is executed.  
         [0167]    The ALU  8  is a 64-bit adder/subtractor that, when an operation instruction is being executed, performs either an addition A+B or a subtraction A−B, and stores the operation result in the registers. Here, the A input and the B input are the respective contents of the AR  6  and the BR  7 . In addition, the ALU  8  generates carry information that shows the result of a carry for each eight bits of data (the smallest unit of data) that is being subjected to parallel operations, and stores the carry information in the CR  9 . Furthermore, when an SIMD correction instruction is being executed, the ALU  8  corrects the operation result to SIMD operation results by performing a subtraction A−B so that other SIMD operation results are not affected.  
         [0168]    Here, when the dyadic add instruction “ADD D 0 ,D 1 ” or the increment instruction “INC D 1 ” is executed, the ALU  8  performs an addition A+B, and stores the obtained operation result in the D 1  register. Here, when the instruction is the dyadic add instruction, the ALU  8  also generates carry information in which “0” shows that there is no carry for eight bits and “1” shows that there is a carry for eight bits. When the instruction is the increment instruction, the ALU  8  also generates carry information in which “−1” shows that there is no carry for eight bits and “0” shows that there is a carry for eight bits. Furthermore, when the dyadic subtract instruction “SUB D 0 , D 1 ” or the decrement instruction “DEC  01 ” is executed, the ALU  8  performs a subtraction A−B, and stores the obtained operation result in the D 1  register. Here, when the instruction is the dyadic subtract instruction, the ALU  8  also generates carry information in which “−1” shows that there is no carry for eight bits and “0” shows that there is a carry for eight bits. When the instruction is the decrement instruction, the ALU  8  generates carry information in which “0” shows that there is no carry for eight bits and “1” shows that there is a carry for eight bits. In addition, when the 8-bit SIMD correction instruction “SIMD8 D 1 ”, the 16-bit SIMD correction instruction “SIMD16 D 1 ”, or a 32-bit SIMD correction instruction “SIMD32 D 1 ” is executed, the ALU  8  performs a subtraction A−B of each corresponding number of bits so that there is no affect on others, corrects the operation result that was stored in the D 1  register to the SIMD operation results, and stores the SIMD operation result in the D 1  register.  
         [0169]    The CR  9  is a 64-bit register for storing carry information.  
         [0170]    Here, processing for fetching a machine language instruction from the ROM  1  and writing the instruction to the instruction register  2  is performed in the IF stage. Decoding of the machine language instruction by the DEC  3 , sign extension by the EXT  5  and outputting from the register file  4  and the EXT  5  are performed in the DEC stage. Operation and storing of the carry information to the CR  9  by the ALU  8  are performed in the EX stage.  
         [0171]    &lt;Operations&gt; 
         [0172]    [0172]FIGS. 2A to  2 D show examples of the bit structure of carry information stored in the CR  9 .  
         [0173]    In FIGS. 2A to  2 D numbers  63 ,  56 ,  55 ,  48 ,  47 ,  40 ,  39 ,  32 ,  31 ,  24 ,  23 ,  16 ,  15 ,  8 ,  7 , and  0  in a horizontal direction show bit positions. The bit position  0  is the LSB (least significant bit), while the bit position  63  is the MSB (most significant bit).  
         [0174]    [0174]FIG. 2A shows carry information when a dyadic add instruction (ADD instruction) has been executed. A carry from bit position  7  in the operation result is recorded in bit position  8  in the carry information (C 7  in the diagram). A carry from bit position  15  in the operation result is recorded in bit position  16  in the carry information (Cl 5  in the diagram). A carry from bit position  23  in the operation result is recorded in bit position  24  in the carry information (C 23  in the diagram). A carry from bit position  31  in the operation result is recorded in bit position  32  in the carry information (C 31  in the diagram). A carry from bit position  39  in the operation result is recorded in bit position  40  in the carry information (C 39  in the diagram). A carry from bit position  47  in the operation result is recorded in bit position  48  in the carry information (C 47  in the diagram). A carry from bit position  55  in the operation result is recorded in bit position  56  in the carry information (C 55  in the diagram). Each of the other bit positions in the carry information has a value “0”.  
         [0175]    [0175]FIG. 2B shows carry information when a dyadic subtract instruction (SUB instruction) has been executed. When there is no carry from bit position  7  in the operation result, the value FF, which is the inverse of a value “0”, is recorded in each bit position  8  to  15 , and when there is a carry from bit position  7 , the value “0” is recorded in each bit position  8  to  15  (shown in the diagram as C 7  with a line thereabove). When there is no carry from bit position  15  in the operation result, the value FF is recorded in each bit position  16  to  23 , and when there is a carry from bit position  15 , the value “0” is recorded in each bit position  16  to  23  (shown in the diagram as C 15  with a line thereabove). When there is no carry from bit position  23  in the operation result, the value FF is recorded in each bit position  24  to  31 , and when there is a carry from bit position  23 , the value “0” is recorded in each bit position  24  to  31  (shown in the diagram as C 23  with a line thereabove). When there is no carry from bit position  31  in the operation result, the value FF is recorded in each bit position  32  to  39 , and when there is a carry from bit position  31 , the value “0” is recorded in each bit position  32  to  39  (shown in the diagram as C 31  with a line thereabove). When there is no carry from bit position  39  in the operation result, the value FF is recorded in each bit position  40  to  47 , and when there is a carry from bit position  39 , the value “0” is recorded in each bit position  40  to  47  (shown in the diagram as C 39  with a line thereabove). When there is no carry from bit position  47  in the operation result, a value FF is recorded in each bit position  48  to  55 , and when there is a carry from bit position  47 , the value “0” is recorded in each bit position  48  to  55  (shown in the diagram as C 47  with a line thereabove). When there is no carry from bit position  55  in the operation result, a value FF is recorded in each bit position  56  to  63 , and when there is a carry from bit position  55 , the value “0” is recorded in each bit position  56  to  63  (shown in the diagram as C 55  with a line thereabove). The value “0” is recorded in each bit position  0  to  7 .  
         [0176]    [0176]FIG. 2C shows carry information when an increment operation instruction (INC instruction) has been executed, and is the same as FIG. 2B.  
         [0177]    [0177]FIG. 2D shows carry information when a decrement operation instruction (DEC instruction) has been executed, and is the same as FIG. 2A.  
         [0178]    Note that in executing a SUB instruction or a DEC instruction “carry” means a carry when the ALU  8  realizes a decrement A−B by calculating A+(bit inverse of B)+1, and does not mean a borrow in decrementing. Furthermore, here the inverse of the value 0 is the value 1, and the inverse of the value 1 is the value 0.  
         [0179]    The following describes an example of operations of the SIMD operation apparatus in three stages in terms of operational timing (machine cycles).  
       Example 1  
       [0180]    The following describes an example of an 8*8 SIMD dyadic add operation for dyadic adding in parallel eight pieces of 8-bit data respectively to another eight pieces of 8-bit data.  
         [0181]    If the first eight pieces of 8-bit data to be added are stored concatenated in the D 0  register as 64-bit data, and similarly, the second eight pieces of 8-bit data to be added are stored concatenated in the D 1  register as 64-bit data, the 8*8 SIMD dyadic add operation is realized by the following two instructions.  
         [0182]    ADD D 0 , D 1   
         [0183]    SIMD8 D 1   
         [0184]    Here, supposing that the first eight pieces of 8-bit data are “0x12”, “0x34”, “0x56”, “0x78”, “0x 9A”, “0xBC”, “0xDE” and “0xF0”, and that the second eight pieces of 8-bit data are all “0x80”, “0x123456789ABCDEF0” is pre-stored in the D 0  register, and “0x8080808080808080” is pre-stored in the D 1  register.  
         [0185]    [0185]FIG. 3A shows the contents of the registers in the 8*8 SIMD dyadic add operation.  
         [0186]    (1) Operation Timing  1   
         [0187]    EX stage: not relevant.  
         [0188]    DEC stage: not relevant.  
         [0189]    IF stage: ADD instruction.  
         [0190]    The dyadic add instruction “ADD D 0 , D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0191]    (2) Operation Timing  2   
         [0192]    EX stage: not relevant.  
         [0193]    DEC stage: ADD instruction.  
         [0194]    The dyadic add instruction “ADD D 0 , D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit dyadic add operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 0  register are read and stored in the BR  7 , and the contents “0x8080808080808080” of the D 1  register are read and stored in the AR  6 .  
         [0195]    IF stage: SIMD instruction.  
         [0196]    The SIMD correction instruction “SIMD8 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0197]    (3) Operation Timing  3   
         [0198]    EX stage: ADD instruction.  
         [0199]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate add operation of A input and B input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0x92B4D6F91B3D5F70” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =0, C 47 =0 and C 55 =0, the ALU  8  stores carry information “0x0000000101010100” in the CR  9 , as shown in FIG. 3A.  
         [0200]    (BR) 0x123456789ABCDEF0  
         [0201]    (AR) +)0x8080808080808080  
         [0202]    _ _ _  
         [0203]    (D 1 ) 0x92B4D6F91B3D5F70  
         [0204]    DEC stage: SIMD instruction.  
         [0205]    The SIMD correction instruction “SIMD8 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that eight parallel 8-bit data SIMD correction operations are to be executed. Based on the result, the contents “0x92B4D6F91B3D5F70” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the EXT  5  reads the contents “0x0000000101010100” of the CR 9  written in the EX stage, which it stores in the BR  7  without sign extending.  
         [0206]    IF stage: not relevant.  
         [0207]    (4) Operation Timing  4   
         [0208]    EX stage: SIMD instruction.  
         [0209]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  8  performs a carry-propagate subtract operation for 8-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x92B4D6F81A3C5E70” in the D 1  register.  
         [0210]    (BR) 0x92 0xB4 0xD6 0xF9 0x1B 0x3D 0x5F 0x70  
         [0211]    (AR) −)0x00 −)0x00 −)0x00 −)0x01 −)0x01 −)0x 01 −)0x01 −)0x00  
         [0212]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
         [0213]    (D 1 ) 0x92 0xB4 0xD6 0xF8 0x1A 0x3C 0x5E 0x70  
         [0214]    This operation result is the SIMD operation result obtained if the respective contents pre-stored in the DO register and the D 1  register are considered to be eight pieces of 8-bit data, and corresponding pieces of 8-bit data are dyadic added.  
         [0215]    The following shows this SIMD operation result:  
         [0216]    (D 0 ) 0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE 0xF0  
         [0217]    (D 1 ) +)0x80 +)0x80 +)0x80 +)0x80 +)0x80 +)0x 80 +)0x80 +)0x80  
         [0218]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
         [0219]    (D 1 ) 0x92 0xB4 0xD6 0xF8 0x1A 0x3C 0x5E 0x70  
         [0220]    DEC stage: not relevant.  
         [0221]    IF stage: not relevant.  
       Example 2  
       [0222]    The following describes an example of a 16*4 SIMD dyadic add operation for dyadic adding in parallel four pieces of 16-bit data respectively to another four pieces of 16-bit data.  
         [0223]    If the first four pieces of 16-bit data to be added are stored concatenated in the D 0  register as 64-bit data, and similarly, the second four pieces of 16-bit data to be added are stored concatenated in the D 1  register as 64-bit data, the 16*4 SIMD dyadic add operation is realized by the following two instructions.  
         [0224]    ADD D 0 , D 1   
         [0225]    SIMD16 D 1   
         [0226]    Here, supposing that the first four pieces of 16-bit data are “0x1234”, “0x5678”, “0x9ABC” and “0xDEF0”, and that each of the second four pieces of 16-bit data are all “0x8080”, “0x123456789ABCDEF0” is pre-stored in the D 0  register, and “0x8080808080808080” is pre-stored in the D 1  register.  
         [0227]    [0227]FIG. 3B shows the contents of the registers in the 16*4 SIMD dyadic add operation.  
         [0228]    (1) Operation Timing  1   
         [0229]    EX stage: not relevant.  
         [0230]    DEC stage: not relevant.  
         [0231]    IF stage: ADD instruction.  
         [0232]    The dyadic add instruction “ADD D 0 , D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0233]    (2) Operation Timing  2   
         [0234]    EX stage: not relevant.  
         [0235]    DEC stage: ADD instruction.  
         [0236]    The dyadic add instruction “ADD D 0 , D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit dyadic add operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 0  register are read and stored in the BR  7 , and the contents “0x8080808080808080” of the D 1  register are read and stored in the AR  6 .  
         [0237]    IF stage: SIMD instruction.  
         [0238]    The SIMD correction instruction “SIMD16 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0239]    (3) Operation Timing  3   
         [0240]    EX stage: ADD instruction.  
         [0241]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate add operation of A input and B input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0x92B4D6F91B3D5F70” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =0, C 47 =0 and C 55 =0, the ALU  8  stores carry information “0x0000000101010100” in the CR  9 , as shown in FIG. 3B.  
         [0242]    (BR) 0x123456789ABCDEF0  
         [0243]    (AR) +)0x8080808080808080  
         [0244]    _ _ _  
         [0245]    (D 1 ) 0x92B4D6F91B3D5F70  
         [0246]    DEC stage: SIMD instruction.  
         [0247]    The SIMD correction instruction “SIMD16 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that four parallel 16-bit data SIMD correction operations are to be executed. Based on the result, the contents “0x92B4D6F91B3D5F70” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0x0000000101010100” of the CR  9  written in the EX stage are read and 16-bit sign extended by the EXT  5 , and the result “0x0000000101010100” is stored in the BR  7 .  
         [0248]    IF stage: not relevant.  
         [0249]    (4) Operation Timing  4   
         [0250]    EX stage: SIMD instruction.  
         [0251]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  8  performs a carry-propagate subtract operation for 16-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x92B4D6F81B3C5F70” in the D 1  register.  
         [0252]    (BR) 0x92B4 0xD6F9 0x1B3D 0x5F70  
         [0253]    (AR) −)0x0000 −)0x0001 −)0x0001 −)0x0000  
         [0254]    _ _ _ _ _ _ _ _ _ _ _ _  
         [0255]    (D 1 ) 0x92B4 0xD6F8 0x1B3C 0x5F70  
         [0256]    The operation result is the SIMD operation result obtained if the respective contents pre-stored in the D 0  register and the D 1  register are considered to be four pieces of 16-bit data, and corresponding pieces of 16-bit data are dyadic added.  
         [0257]    The following shows this SIMD operation result:  
         [0258]    (D 0 ) 0x1234 0x5678 0x9ABC 0xDEF0  
         [0259]    (D 1 ) +)0x8080 +)0x8080 +)0x8080 +)0x8080  
         [0260]    _ _ _ _ _ _ _ _ _ _ _ _  
         [0261]    (D 1 ) 0x92B4 0xD6F8 0x1B3C 0x5F70  
         [0262]    DEC stage: not relevant.  
         [0263]    IF stage: not relevant.  
       Example 3  
       [0264]    The following describes an example of an 32*2 SIMD dyadic add operation for dyadic adding in parallel two pieces of 32-bit data respectively to another two pieces of 32-bit data.  
         [0265]    If the first two pieces of 32-bit data to be added are stored concatenated in the D 0  register as 64-bit data, and similarly, the second two pieces of 32-bit data to be added are stored concatenated in the D 1  register as 64-bit data, the 32*2 SIMD dyadic add operation is realized by the following two instructions.  
         [0266]    ADD D 0 , D 1   
         [0267]    SIMD32 D 1   
         [0268]    Here, supposing that the first two pieces of 32-bit data are “0x12345678”, “0x9ABCDEF0”, and that the second two pieces of 32-bit data are both “0x8080808080808080”, “0x123456789ABCDEF0” is pre-stored in the D 0  register, and “0x8080808080808080” is pre-stored in the D 1  register.  
         [0269]    [0269]FIG. 3C shows the contents of the registers in the 32*2 SIMD dyadic add operation.  
         [0270]    (1) Operation Timing  1   
         [0271]    EX stage: not relevant.  
         [0272]    DEC stage: not relevant.  
         [0273]    IF stage: ADD instruction.  
         [0274]    The dyadic add instruction “ADD D 0 , D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0275]    (2) Operation Timing  2   
         [0276]    EX stage: not relevant.  
         [0277]    DEC stage: ADD instruction.  
         [0278]    The dyadic add instruction “ADD D 0 , D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit dyadic add operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 0  register are read and stored in the BR  7 , and the contents “0x8080808080808080” of the D 1  register are read and stored in the AR  6 .  
         [0279]    IF stage: SIMD instruction.  
         [0280]    The SIMD correction instruction “SIMD32 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0281]    (3) Operation Timing  3   
         [0282]    EX stage: ADD instruction.  
         [0283]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate add operation of A input and B input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0x92B4D6F91B3D5F70” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =0, C 47 =0 and C 55 =0, the ALU  8  stores carry information “0x0000000101010100” in the CR  9 , as shown in FIG. 3C.  
         [0284]    (BR) 0x123456789ABCDEF0  
         [0285]    (AR) +) 0x8080808080808080  
         [0286]    _ _ _  
         [0287]    (D 1 ) 0x92B4D6F91B3D5F70  
         [0288]    DEC stage: SIMD instruction.  
         [0289]    The SIMD correction instruction “SIMD32 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that two parallel 32-bit SIMD correction operations are is to be executed. Based on the result, the contents “0x92B4D6F91B3D5F70” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0x0000000101010100” of the CR 9  written in the EX stage are read and 32-bit sign extended by the EXT  5 , and the result “0x0000000100000000” is stored in the BR  7 .  
         [0290]    IF stage: not relevant.  
         [0291]    (4) Operation Timing  4   
         [0292]    EX stage: SIMD instruction.  
         [0293]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  8  performs a carry-propagate subtract operation for 32-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x92B4D6F81B3D5F70” in the D 1  register.  
         [0294]    (BR) 0x92B4D6F9 0x1B3D5F70  
         [0295]    (AR) −)0x00000001 −)0x00000000  
         [0296]    _ _ _ _ _ _  
         [0297]    (D 1 ) 0x92B4D6F8 0x1B3D5F70  
         [0298]    The operation result is the SIMD operation result obtained if the respective contents pre-stored in the DO register and the D 1  register are considered to be two pieces of 32-bit data, and corresponding pieces of 32-bit data are dyadic added.  
         [0299]    The following shows this SIMD operation result:  
         [0300]    (D 0 ) 0x12345678 0x9ABCDEF0  
         [0301]    (D 1 ) +)0x80808080 +)0x80808080  
         [0302]    _ _ _ _ _ _  
         [0303]    (D 1 ) 0x92B4D6F8 0x1B3D5F70  
         [0304]    DEC stage: not relevant.  
         [0305]    IF stage: not relevant.  
       Example 4  
       [0306]    The following describes an example of an 8*8 SIMD dyadic subtract operation for dyadic subtracting eight pieces of eight 8-bit data respectively from another eight pieces of 8-bit data.  
         [0307]    If the eight pieces of 8-bit data to be subtracted from are stored concatenated in the D 0  register as 64-bit data, and similarly, the eight pieces of 8-bit data to be subtracted are stored concatenated in the D 1  register as 64-bit data, the 8*8 SIMD dyadic subtract operation is realized by the following two instructions.  
         [0308]    SUB D 0 , D 1   
         [0309]    SIMD8 D 1   
         [0310]    Here, supposing that the pieces of 8-bit data to be subtracted from are “0x12”, “0x34”, “0x56”, “0x78”, “0x9A”, “0xBC”, “0xDE” and “0xF0”, and that the pieces of 8-bit data to be subtracted are all “0x70”, “0x123456789ABCDEF0” is pre-stored in the D 0  register, and “0x7070707070707070” is pre-stored in the D 1  register.  
         [0311]    [0311]FIG. 4A shows the contents of the registers in the 8*8 SIMD dyadic subtract operation.  
         [0312]    (1) Operation Timing  1   
         [0313]    EX stage: not relevant.  
         [0314]    DEC stage: not relevant.  
         [0315]    IF stage: SUB instruction.  
         [0316]    The dyadic subtract instruction “SUB D 0 , D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0317]    (2) Operation Timing  2   
         [0318]    EX stage: not relevant.  
         [0319]    DEC stage: SUB instruction.  
         [0320]    The dyadic subtract instruction “SUB D 0 , D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit dyadic subtract operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 0  register are read and stored in the BR  7 , and the contents “0x7070707070707070” of the D 1  register are read and stored in the AR  6 .  
         [0321]    IF stage: SIMD instruction.  
         [0322]    The SIMD correction instruction “SIMD8 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0323]    (3) Operation Timing  3   
         [0324]    EX stage: SUB instruction.  
         [0325]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate subtract operation of B input from A input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0xA1C3E6082A4C6E80” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =1, C 47 =0 and C 55 =0, the ALU  8  stores carry information “0xFFFF000000000000” in the CR  9 , as shown in FIG. 4A.  
         [0326]    Here, since the subtraction A−B is realized by A+ (inverse bit of B) +1, “0x8F8F8F8F8F8F8F90” (2&#39;s complement), which is the inverse bit +1 of B input “0x7070707070707070”, is added to A input.  
         [0327]    (BR) 0x123456789ABCDEF0  
         [0328]    2&#39;s complement of (AR) +)0x8F8F8F8F8F8F8F90  
         [0329]    _ _ _  
         [0330]    (D 1 ) 0xA1C3E6082A4C6E80  
         [0331]    DEC stage: SIMD instruction.  
         [0332]    The SIMD correction instruction “SIMD8 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that eight parallel 8-bit data SIMD correction operations are to be executed. Based on the result, the contents “0xA1C3E6082A4C6E80” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the EXT  5  reads the contents “0xFFFF000000000000” of the CR 9  written in the EX stage, which it stores in the BR  7  without sign extending.  
         [0333]    IF stage: not relevant.  
         [0334]    (4) Operation Timing  4   
         [0335]    EX stage: SIMD instruction.  
         [0336]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  8  performs a carry-propagate subtract operation for 8-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0xA2C4E6082A4C6E80” the D 1  register.  
         [0337]    (BR) 0xA1 0xC3 0xE6 0x08 0x2A 0x4C 0x6E 0x80  
         [0338]    (AR) −)0xFF −)0xFF −)0x00 −)0x00 −)0x00 −)0x 00 −)0x00 −)0x00  
         [0339]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
         [0340]    (D 1 ) 0xA2 0xC4 0xE6 0x08 0x2A 0x4C 0x6E 0x80  
         [0341]    The operation result is the SIMD operation result obtained if the respective contents pre-stored in the DO register and the D 1  register are considered to be eight pieces of 8-bit data, and corresponding pieces of 8-bit data are dyadic subtracted.  
         [0342]    The following shows this SIMD operation result:  
         [0343]    (D 0 ) 0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE 0xF0  
         [0344]    (D 1 ) −)0x70 −)0x70 −)0x70 −)0x70 −)0x 70 −)0x70 −)0x70 −)0x70  
         [0345]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
         [0346]    (D 1 ) 0xA2 0xC4 0xE6 0x08 0x2A 0x4C 0x6E 0x80  
         [0347]    DEC stage: not relevant.  
         [0348]    IF stage: not relevant.  
       Example 5  
       [0349]    The following describes an example of a 16*4 SIMD dyadic subtract operation for dyadic subtracting in parallel four pieces of 16-bit data respectively from another four pieces of 16-bit data.  
         [0350]    If the four pieces of 16-bit data to be subtracted from are stored concatenated in the D 0  register as 64-bit data, and similarly, the four pieces of 16-bit data to be subtracted are stored concatenated in the D 1  register as 64-bit data, the 16*4 SIMD dyadic subtract operation is realized by the following two instructions.  
         [0351]    SUB D 0 , D 1   
         [0352]    SIMD16 D 1   
         [0353]    Here, supposing that the pieces of 16-bit data to be subtracted from are “0x1234”, “0x5678”, “0x9ABC” and “0xDEF0”, and that the pieces of 16-bit data to be subtracted are all “0x7070”, “0x123456789ABCDEF0” is pre-stored in the D 0  register, and “0x7070707070707070” is pre-stored in the D 1  register.  
         [0354]    [0354]FIG. 4B shows the contents of the registers in the 14*4 SIMD dyadic subtract operation.  
         [0355]    (1) Operation Timing  1   
         [0356]    EX stage: not relevant.  
         [0357]    DEC stage: not relevant.  
         [0358]    IF stage: SUB instruction.  
         [0359]    The dyadic subtract instruction “SUB D 0 , D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0360]    (2) Operation Timing  2   
         [0361]    EX stage: not relevant.  
         [0362]    DEC stage: SUB instruction.  
         [0363]    The dyadic subtract instruction “SUB D 0 , D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit dyadic subtract operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 0  register are read and stored in the BR  7 , and the contents “0x7070707070707070” of the D 1  register are read and stored in the AR  6 .  
         [0364]    IF stage: SIMD instruction.  
         [0365]    The SIMD correction instruction “SIMD16 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0366]    (3) Operation Timing  3   
         [0367]    EX stage: SUB instruction.  
         [0368]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate subtract operation of B input from A input using the contents of BR  7  as the A input and the contents of AR  6  as the B input. An operation result “0xA1C3E6082A4C6E80” is stored in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =1, C 47 =0 and C 55 =0, the ALU  8  stores carry information “0xFFFF000000000000” in the CR  9 , as shown in FIG. 4B.  
         [0369]    Here, since the subtraction A−B is realized by A+ (inverse bit of B) +1, “0x8F8F8F8F8F8F8F90” (2&#39;s complement), which is the inverse bit +1 of B input “0x7070707070707070”, is added to the A input.  
         [0370]    (BR) 0x123456789ABCDEF0  
         [0371]    2&#39;s complement of (AR) +)0x8F8F8F8F8F8F8F90  
         [0372]    _ _ _  
         [0373]    (D 1 ) 0xA1C3E6082A4C6E80  
         [0374]    DEC stage: SIMD instruction.  
         [0375]    The SIMD correction instruction “SIMD16 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that four parallel 16-bit SIMD correction operations are to be executed. Based on the result, the contents “0xA1C3E6082A4C6E80” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0xFFFF000000000000 38  of the CR 9  written in the EX stage are read and 16-bit sign extended by the EXT  5 , and the result “0xFFFF000000000000” is stored in the BR  7 .  
         [0376]    IF stage: not relevant.  
         [0377]    (4) Operation Timing  4   
         [0378]    EX stage: SIMD instruction.  
         [0379]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  8  performs a carry-propagate subtract operation for 16-bit units only, using the contents of the BR  7  is as the A input and the contents of the AR  6  as the B input, and stores the operation result “0xA1C4E6082A4C6E80” is stored in the D 1  register.  
         [0380]    (BR) 0xA1C3 0xE608 0x2A4C 0x6E80  
         [0381]    (AR) −)0xFFFF −)0x0000 −)0x0000 −)0x0000  
         [0382]    _ _ _ _ _ _ _ _ _ _ _ _  
         [0383]    (D 1 ) 0xA1C4 0xE608 0x2A4C 0x6E80  
         [0384]    The operation result is the SIMD operation result obtained if the respective contents pre-stored in the D 0  register and the D 1  register are considered to be four pieces of 16-bit data, and corresponding pieces of 16-bit data are dyadic subtracted.  
         [0385]    The following shows this SIMD operation result:  
         [0386]    (D 0 ) 0x1234 0x5678 0x9ABC 0xDEF0  
         [0387]    (D 1 ) −)0x7070 −)0x7070 −)0x7070 −)0x7070  
         [0388]    _ _ _ _ _ _ _ _ _ _ _ _  
         [0389]    (D 1 ) 0xA1C4 0xE608 0x2A4C 0x6E80  
         [0390]    DEC stage: not relevant.  
         [0391]    IF stage: not relevant.  
       Example 6  
       [0392]    The following describes an example of a 32*2 SIMD dyadic subtract for dyadic subtracting in parallel two pieces of 32-bit data respectively from another two pieces of 32-bit data.  
         [0393]    If the two pieces of 32-bit data to be subtracted from are stored concatenated in the D 0  register as 64-bit data, and similarly, the two pieces of 32-bit data to be subtracted are stored concatenated in the D 1  register as 64-bit data, the 32*2 SIMD dyadic subtract operation is realized by the following two instructions.  
         [0394]    SUB D 0 , D 1   
         [0395]    SIMD32 D 1   
         [0396]    Here, supposing that the pieces of 32-bit data to be subtracted from are “0x12345678”, “0x9ABCDEF0”, and that the pieces of 32-bit data to subtract are both “0x70707070”, “0x123456789ABCDEF0” is pre-stored in the D 0  register, and “0x7070707070707070” is pre-stored in the D 1  register.  
         [0397]    [0397]FIG. 4C shows the contents of the registers in the 32*2 SIMD dyadic subtract operation.  
         [0398]    (1) Operation Timing  1   
         [0399]    EX stage: not relevant.  
         [0400]    DEC stage: not relevant.  
         [0401]    IF stage: SUB instruction.  
         [0402]    The dyadic subtract instruction “SUB D 0 , D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0403]    (2) Operation Timing  2   
         [0404]    EX stage: not relevant.  
         [0405]    DEC stage: SUB instruction.  
         [0406]    The dyadic subtract instruction “SUB D 0 , D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit dyadic subtract operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 0  register are read and stored in the BR  7 , and the contents “0x7070707070707070” of the D 1  register are read and stored in the AR  6 .  
         [0407]    IF stage: SIMD instruction.  
         [0408]    The SIMD correction instruction “SIMD32 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0409]    (3) Operation Timing  3   
         [0410]    EX stage: SUB instruction.  
         [0411]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate subtract operation of B input from A input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores the operation result “0xA1C3E6082A4C6E80” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =1, C 47 =0 and C 55 =0, the ALU  8  stores carry information “0xFFFF000000000000” in the CR  9 , as shown in FIG. 4C.  
         [0412]    Here, since the subtraction A−B is realized by A+(inverse bit of B) +1, “0x8F8F8F8F8F8F8F90” (2&#39;s complement), which is the inverse bit +1 of B input “0x7070707070707070”, is added to A input.  
         [0413]    (BR) 0x123456789ABCDEF0  
         [0414]    2&#39;s complement of (AR) +)0x8F8F8F8F8F8F8F90  
         [0415]    _ _ _  
         [0416]    (D 1 ) 0xA1C3E6082A4C6E80  
         [0417]    DEC stage: SIMD instruction.  
         [0418]    The SIMD correction instruction “SIMD32 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that two parallel 32-bit data SIMD correction operations are to be executed. Based on the result, the contents “0xA1C3E6082A4C6E80” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0xFFFF000000000000” of the CR 9  written in the EX stage are read and 32-bit sign extended by the EXT  5 , and the result “0xFFFF000000000000” is stored in the BR  7 .  
         [0419]    IF stage: not relevant.  
         [0420]    (4) Operation Timing  4   
         [0421]    EX stage: SIMD instruction.  
         [0422]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  8  performs a carry-propagate subtract operation for 32-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0xA1C3E6082A4C6E80” in the D 1  register.  
         [0423]    (BR) 0xA1C3E608 0x2A4C6E80  
         [0424]    (AR) −)0x00000000 −)0x00000000  
         [0425]    _ _ _ _ _ _  
         [0426]    (D 1 ) 0xA1C3E608 0x2A4C6E80  
         [0427]    The operation result is the SIMD operation result obtained if the respective contents pre-stored in the D 0  register and the D 1  register are considered to be two pieces of 32-bit data, and corresponding pieces of 32-bit data are dyadic subtracted.  
         [0428]    The following shows this SIMD operation result:  
         [0429]    (D 0 ) 0x12345678 0x9ABCDEF0  
         [0430]    (D 1 ) −)0x70707070 −)0x70707070  
         [0431]    _ _ _ _ _ _  
         [0432]    (D 1 ) 0xA1C3E608 0x2A4C6E80  
         [0433]    DEC stage: not relevant.  
         [0434]    IF stage: not relevant.  
       Example 7  
       [0435]    The following describes an example of an 8*8 SIMD increment operation for incrementing eight pieces of 8-bit data in parallel.  
         [0436]    If the eight pieces of 8-bit data to be incremented are stored concatenated in the D 1  register as 64-bit data, the 8*8 SIMD increment operation is realized by the following two instructions.  
         [0437]    INC D 1   
         [0438]    SIMD8 D 1   
         [0439]    Here, supposing that the pieces of 8-bit data are “0x12”, “0x34”, “0x56”, “0x78”, “0x9A”, “0xBC”, “0xDE” and “0xF0”, “0x123456789ABCDEF0” is pre-stored in the D 1  register.  
         [0440]    [0440]FIG. 5A shows the contents of the registers in the 8*8 SIMD increment operation.  
         [0441]    (1) Operation Timing  1   
         [0442]    EX stage: not relevant.  
         [0443]    DEC stage: not relevant.  
         [0444]    IF stage: INC instruction.  
         [0445]    The increment instruction “INC D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0446]    (2) Operation Timing  2   
         [0447]    EX stage: not relevant.  
         [0448]    DEC stage: INC instruction.  
         [0449]    The increment instruction “INC D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit increment operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 1  register are read and stored in the BR  7 , and “0x0000000000000001” is stored in the AR  6 .  
         [0450]    IF stage: SIMD instruction.  
         [0451]    The SIMD correction instruction “SIMD8 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0452]    (3) Operation Timing  3   
         [0453]    EX stage: INC instruction.  
         [0454]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate add operation of A input and B input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores the operation result “0x123456789ABCDEF1” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =0, C 15 =0, C 23 =0, C 31 =0, C 39 =0, C 47 =0 and C 55 =0, the ALU  8  stores carry information “0xFFFFFFFFFFFFFF00” in the CR  9 , as shown in FIG. 5A.  
         [0455]    (BR) 0x123456789ABCDEF0  
         [0456]    (AR) +)0x0000000000000001  
         [0457]    _ _ _  
         [0458]    (D 1 ) 0x123456789ABCDEF1  
         [0459]    DEC stage: SIMD instruction.  
         [0460]    The SIMD correction instruction “SIMD8 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that eight parallel 8-bit data SIMD correction operations are to be executed. Based on the result, the contents “0x123456789ABCDEF1” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0xFFFFFFFFFFFFFF00” of the CR 9  written in the EX stage are read and stored in the BR  7  without being sign extending by the EXT  5 .  
         [0461]    IF stage: not relevant.  
         [0462]    (4) Operation Timing  4   
         [0463]    EX stage: SIMD instruction.  
         [0464]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  8  performs a carry-propagate subtract operation for 8-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x133557799BBDDFF1” in the D 1  register.  
         [0465]    (BR) 0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE 0xF1  
         [0466]    (AR) −)0xFF −)0xFF −)0xFF −)0xFF −)0xFF −)0xFF −)0xFF −)0x00  
         [0467]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
         [0468]    (D 1 ) 0x13 0x35 0x57 0x79 0x9B 0xBD 0xDF 0xF1  
         [0469]    The operation result is the SIMD operation result obtained if the contents pre-stored in the D 0  register are considered to be eight pieces of 8-bit data, and are incremented.  
         [0470]    The following shows this SIMD operation result:  
         [0471]    (D 0 ) 0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE 0xF0  
         [0472]    (D 1 ) +)0x01 +)0x01 +)0x01 +)0x01 +)0x 01 +)0x01 +)0x01 +)0x01  
         [0473]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
         [0474]    (D 1 ) 0x13 0x35 0x57 0x79 0x9B 0xBD 0xDF 0xF1  
         [0475]    DEC stage: not relevant.  
         [0476]    IF stage: not relevant.  
         [0477]    Note that when the pieces of 8-bit data to be incremented are stored concatenated as 64-bit data in the D 1  register, the 8*8 increment operation can also be achieved by the following two instructions.  
         [0478]    M0V 0xFFFFFFFFFFFFFFFF,CR  
         [0479]    SIMD8 D 1   
         [0480]    Here, “MOV 0xFFFFFFFFFFFFFFFF,CR” is an instruction for storing “0xFFFFFFFFFFFFFFFF” in the CR  9 .  
       Example 8  
       [0481]    The following describes an example of a 16*4 SIMD increment operation for incrementing four pieces of 16-bit data in parallel.  
         [0482]    If the four pieces of 16-bit data to be incremented are stored concatenated in the D 1  register as 64-bit data, the 16*4 SIMD increment operation is realized by the following two instructions  
         [0483]    INC D 1   
         [0484]    SIMD16 D 1   
         [0485]    Here, supposing that the pieces of 16-bit data are “0x1234”, “0x5678”, “0x9ABC” and “0xDEF0”, “0x123456789ABCDEF0” is pre-stored in the D 1  register.  
         [0486]    [0486]FIG. 5B shows the contents of the registers in the 16*4 SIMD decrement operation.  
         [0487]    (1) Operation Timing  1   
         [0488]    EX stage: not relevant.  
         [0489]    DEC stage: not relevant.  
         [0490]    IF stage: INC instruction.  
         [0491]    The increment instruction “INC D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0492]    (2) Operation Timing  2   
         [0493]    EX stage: not relevant.  
         [0494]    DEC stage: INC instruction.  
         [0495]    The increment instruction “INC D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit increment operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 1  register are read and stored in the BR  7 , and “0x0000000000000001” is stored in the AR  6 .  
         [0496]    IF stage: SIMD instruction.  
         [0497]    The SIMD correction instruction “SIMD16 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0498]    (3) Operation Timing  3   
         [0499]    EX stage: INC instruction.  
         [0500]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate add operation of A input and B input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores the operation result “0x123456789ABCDEF1” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =0, C 15 =0, C 23 =0, C 31 =0, C 39 =0, C 47 =0 and C 55 =0, the ALU  8  stores carry information “0xFFFFFFFFFFFFFF00” in the CR  9 , as shown in FIG. 5B.  
         [0501]    (BR) 0x123456789ABCDEF0  
         [0502]    (AR) +)0x0000000000000001  
         [0503]    _ _ _  
         [0504]    (D 1 ) 0x123456789ABCDEF1  
         [0505]    DEC stage: SIMD instruction.  
         [0506]    The SIMD correction instruction “SIMD16 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that four parallel 16-bit SIMD correction operations are to be executed. Based on the result, the contents “0x123456789ABCDEF1” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0xFFFFFFFFFFFFFF00” of the CR 9  written in the EX stage are read and 16-bit sign extended by the EXT  5 , and the result “0xFFFFFFFFFFFF0000” is stored in the BR  7 .  
         [0507]    IF stage: not relevant.  
         [0508]    (4) Operation Timing  4   
         [0509]    EX stage: SIMD instruction.  
         [0510]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  8  performs a carry-propagate subtract operation for 16-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x123556799ABDDEF1” in the D 1  register.  
         [0511]    (BR) 0x1234 0x5678 0x9ABC 0xDEF1  
         [0512]    (AR) −)0xFFFF −)0xFFFF −)0xFFFF −)0x0000  
         [0513]    _ _ _ _ _ _ _ _ _ _ _ _  
         [0514]    (D 1 ) 0x1235 0x5679 0x9ABD 0xDEF1  
         [0515]    The operation result is the SIMD operation result obtained if the contents pre-stored in the D 0  register are considered to be four pieces of 16-bit data, and are incremented.  
         [0516]    The following shows this SIMD operation result:  
         [0517]    (D 0 ) 0x1234 0x5678 0x9ABC 0xDEF0  
         [0518]    (D 1 ) +)0x0001 +)0x0001 +)0x0001 +)0x0001  
         [0519]    _ _ _ _ _ _ _ _ _ _ _ _  
         [0520]    (D 1 ) 0x1235 0x5679 0x9ABD 0xDEF1  
         [0521]    DEC stage: not relevant.  
         [0522]    IF stage: not relevant.  
         [0523]    Note that when the pieces of 16-bit data to be incremented are stored concatenated as 64-bit data in the D 1  register, the 16*4 increment operation can also be achieved by the following two instructions.  
         [0524]    MOV 0xFFFFFFFFFFFFFFFF,CR  
         [0525]    SIMD16 D 1   
         [0526]    Here, “MOV 0xFFFFFFFFFFFFFFFF,CR” is an instruction for storing “0xFFFFFFFFFFFFFFFF” in the CR  9 .  
       Example 9  
       [0527]    The following describes an example of a 32*2 SIMD increment operation for incrementing two pieces of 32-bit data in parallel.  
         [0528]    If the two pieces of 32-bit data to be incremented are stored concatenated in the D 1  register as 64-bit data, the 32*2 SIMD increment operation is realized by the following two instructions.  
         [0529]    INC D 1   
         [0530]    SIMD32 D 1   
         [0531]    Here, supposing that the pieces of 32-bit data are “0x12345678”, “0x9ABCDEF0”, “0x123456789ABCDEF0” is prestored in the D 1  register.  
         [0532]    [0532]FIG. 5C shows the contents of the registers in the 32*2 SIMD decrement operation.  
         [0533]    (1) Operation Timing  1   
         [0534]    EX stage: not relevant.  
         [0535]    DEC stage: not relevant.  
         [0536]    IF stage: INC instruction.  
         [0537]    The increment instruction “INC D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0538]    (2) Operation Timing  2   
         [0539]    EX stage: not relevant.  
         [0540]    DEC stage: INC instruction.  
         [0541]    The increment instruction “INC D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit increment operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 1  register are read and stored in the BR  7 , and “0x0000000000000001” is stored in the AR  6 .  
         [0542]    IF stage: SIMD instruction.  
         [0543]    The SIMD correction instruction “SIMD32 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0544]    (3) Operation Timing  3   
         [0545]    EX stage: INC instruction.  
         [0546]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate add operation of A input and B input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0x123456789ABCDEF1” in the D 1  register of the register file  4 . Furthermore, since the carry for each  8  bits is C 7 =0, C 15 =0, C 23 =0, C 31 =0, C 39 =0, C 47 =0 and C 55 =0, the ALU  8  stores carry information “0xFFFFFFFFFFFFFF00” in the CR  9 , as shown in FIG. 5C.  
         [0547]    (BR) 0x123456789ABCDEF0  
         [0548]    (AR) +)0x0000000000000001  
         [0549]    _ _ _  
         [0550]    (D 1 ) 0x123456789ABCDEF1  
         [0551]    DEC stage: SIMD instruction.  
         [0552]    The SIMD correction instruction “SIMD32 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that two parallel 32-bit data SIMD correction operations are to be executed. Based on the result, the contents “0x123456789ABCDEF1” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0xFFFFFFFFFFFFFF00” of the CR 9  written in the EX stage are read and 32-bit sign extended by the EXT  5 , and the result “0xFFFFFFFFFFFF0000” is stored in the BR  7 .  
         [0553]    IF stage: not relevant.  
         [0554]    (4) Operation Timing  4   
         [0555]    EX stage: SIMD instruction.  
         [0556]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  8  performs a carry-propagate subtract operation for 32-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x123456799ABCDEF1” in the D 1  register.  
         [0557]    (BR) 0x12345678 0x9ABCDEF1  
         [0558]    (AR) −)0xFFFFFFFF −)0x00000000  
         [0559]    _ _ _ _ _ _  
         [0560]    (D 1 ) 0x12345679 0x9ABCDEF1  
         [0561]    The operation result is the SIMD operation result obtained if the contents pre-stored in the D 0  register are considered to be two pieces of 32-bit data, and incremented.  
         [0562]    The following shows this SIMD operation result:  
         [0563]    (D 0 ) 0x12345678 0x9ABCDEF0  
         [0564]    (D 1 ) +)0x00000001 +)0x00000001  
         [0565]    _ _ _ _ _ _  
         [0566]    (D 1 ) 0x12345679 0x9ABCDEF1  
         [0567]    DEC stage: not relevant.  
         [0568]    IF stage: not relevant.  
         [0569]    Note that when the pieces of 32-bit data to be incremented are stored concatenated as 64-bit data in the D 1  register, the 32*2 increment operation can also be achieved by the following two instructions.  
         [0570]    MOV 0xFFFFFFFFFFFFFFFF,CR  
         [0571]    SIMD32 D 1   
         [0572]    Here, “MOV 0xFFFFFFFFFFFFFFFF,CR” is an instruction for storing “0xFFFFFFFFFFFFFFFF” in the CR  9 .  
       Example 10  
       [0573]    The following describes an example of an 8*8 SIMD decrement operation for decrementing eight pieces of 8-bit data in parallel.  
         [0574]    If the eight pieces of 8-bit data to be decremented are stored concatenated in the D 1  register as 64-bit data, the 8*8 SIMD decrement operation is realized by the following two instructions  
         [0575]    DEC D 1   
         [0576]    SIMD8 D 1   
         [0577]    Here, supposing that the pieces of 8-bit data are “0x12”, “0x34”, “0x56”, “0x78”, “0x9A”, “0xBC”, “0xDE” and “0xF0”, “0x123456789ABCDEF0” is pre-stored in the D 1  register.  
         [0578]    [0578]FIG. 6A shows the contents of the registers in the 8*8 SIMD increment operation.  
         [0579]    (1) Operation Timing  1   
         [0580]    EX stage: not relevant.  
         [0581]    DEC stage: not relevant.  
         [0582]    IF stage: DEC instruction.  
         [0583]    The decrement instruction “DEC D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0584]    (2) Operation Timing  2   
         [0585]    EX stage: not relevant.  
         [0586]    DEC stage: DEC instruction.  
         [0587]    The decrement instruction “DEC D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit decrement operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 1  register are read and stored in the BR  7 , and “0x0000000000000001” is stored in the AR  6 .  
         [0588]    IF stage: SIMD instruction.  
         [0589]    The SIMD correction instruction “SIMD8 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0590]    (3) Operation Timing  3   
         [0591]    EX stage: DEC instruction.  
         [0592]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate subtract operation of B input from A input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0x123456789ABCDEEF” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 = 1  C 31 =1, C 39 =1, C 47 =1 and C 55 =1, the ALU  8  stores carry information “0x0101010101010100” in the CR  9 , as shown in FIG. 6A.  
         [0593]    Here, since the Subtraction A−B is realized by A+ (inverse bit of B) +1, “0x0000000000000001” (2&#39;s complement), which is the inverse bit +1 of B input “0xFFFFFFFFFFFFFFFF”, is added to A input.  
         [0594]    (BR) 0x123456789ABCDEF0  
         [0595]    2&#39;s complement of (AR) +)0xFFFFFFFFFFFFFF  
         [0596]    _ _ _  
         [0597]    (D 1 ) 0x123456789ABCDEEF  
         [0598]    DEC stage: SIMD instruction.  
         [0599]    The SIMD correction instruction “SIMD8 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that eight parallel 8-bit data SIMD correction operations are to be executed. Based on the result, the contents “0x123456789ABCDEEF” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the EXT  5  reads the contents “0x0101010101010100” of the CR 9  written in the EX stage, which it stores in the BR  7  without sign extending.  
         [0600]    IF stage: not relevant.  
         [0601]    (4) Operation Timing  4   
         [0602]    EX stage: SIMD instruction.  
         [0603]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  8  performs a carry-propagate subtract operation for 8-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x1133557799BBDDEF” in the D 1  register.  
         [0604]    (BR) 0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE 0xEF  
         [0605]    (AR) −)0x01 −)0x01 −)0x01 −)0x01 −)0x01 −)0x 01 −)0x01 −)0x00  
         [0606]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
         [0607]    (D 1 ) 0x11 0x33 0x55 0x77 0x99 0xBB 0xDD 0xEF  
         [0608]    The operation result is the SIMD operation result obtained if the contents pre-stored in the D 0  register are considered to be eight pieces of 8-bit data, and are decremented.  
         [0609]    The following shows this SIMD operation result:  
         [0610]    (D 0 ) 0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE 0xF0  
         [0611]    (D 1 ) −)0x01 −)0x01 −)0x01 −)0x01 −)0x01 −)0x 01 −)0x01 −)0x01  
         [0612]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
         [0613]    (D 1 ) 0x11 0x33 0x55 0x77 0x99 0xBB 0xDD 0xEF  
         [0614]    DEC stage: not relevant.  
         [0615]    IF stage: not relevant.  
         [0616]    Note that when the pieces of 8-bit data to be decremented are stored concatenated as 64-bit data in the D 1  register, the 8*8 increment operation can also be achieved by the following two instructions.  
         [0617]    MOV 0x0101010101010101,CR  
         [0618]    SIMD8 D 1   
         [0619]    Here, “MOV 0x0101010101010101,CR” is an instruction for storing “0x0101010101010101” in the CR  9 .  
       Example 11  
       [0620]    The following describes an example of a 16*4 SIMD decrement operation for decrementing four pieces of 16-bit data in parallel.  
         [0621]    If the four pieces of 16-bit data to be decremented are stored concatenated in the D 1  register as 64-bit data, the 16*4 SIMD decrement operation is realized by the following two instructions.  
         [0622]    DEC D 1   
         [0623]    SIMD16 D 1   
         [0624]    Here, supposing that the pieces of 16-bit data are “0x1234”, “0x5678”, “0x9ABC” and “0xDEF0”, “0x123456789ABCDEF0” is pre-stored in the D 1  register.  
         [0625]    [0625]FIG. 6B shows the contents of the registers in the 16*4 SIMD decrement operation.  
         [0626]    (1) Operation Timing  1   
         [0627]    EX stage: not relevant.  
         [0628]    DEC stage: not relevant.  
         [0629]    IF stage: DEC instruction.  
         [0630]    The decrement instruction “DEC D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0631]    (2) Operation Timing  2   
         [0632]    EX stage: not relevant.  
         [0633]    DEC stage: DEC instruction.  
         [0634]    The decrement instruction “DEC D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit decrement operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 1  register are read and stored in the BR  7 , and “0x0000000000000001” is stored in the AR  6 .  
         [0635]    IF stage: SIMD instruction.  
         [0636]    The SIMD correction instruction “SIMD16 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0637]    (3) Operation Timing  3   
         [0638]    EX stage: DEC instruction.  
         [0639]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate subtract operation of B input from A input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0x123456789ABCDEEF” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =1, C 47 =1 and C 55 =1, the ALU  8  stores carry information “0x0101010101010100” in the CR  9 , as shown in FIG. 6B.  
         [0640]    Here, since the subtraction A−B is realized by A+ (inverse bit of B) +1, “0x0000000000000001” (2&#39;s complement), which is the inverse bit +1 of B input “0xFFFFFFFFFFFFFFFF”, is added to A input.  
         [0641]    (BR) 0x123456789ABCDEF0  
         [0642]    2&#39;s complement of (AR) +)0xFFFFFFFFFFFFF  
         [0643]    _ _ _  
         [0644]    (D 1 ) 0x123456789ABCDEEF  
         [0645]    DEC stage: SIMD instruction.  
         [0646]    The SIMD correction instruction “SIMD16 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that four parallel 16-bit data SIMD correction operations are to be executed. Based on the result, the contents “1x123456789ABCDEEF” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0x0101010101010100” of the CR 9  written in the EX stage are read and 16-bit sign extended, and the result “0x0001000100010000” is stored in the BR  7 .  
         [0647]    IF stage: not relevant.  
         [0648]    (4) Operation Timing  4   
         [0649]    EX stage: SIMD instruction.  
         [0650]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  8  performs a carry-propagate subtract operation for 16-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x123356779ABBDEEF” in the D 1  register.  
         [0651]    (BR) 0x1234 0x5678 0x9ABC 0xDEEF  
         [0652]    (AR) −)0x0001 −)0x0001 −)0x0001 −)0x0000  
         [0653]    _ _ _ _ _ _ _ _ _ _ _ _  
         [0654]    (D 1 ) 0x1233 0x5677 0x9ABB 0xDEEF  
         [0655]    The operation result is the SIMD operation result obtained if the contents pre-stored in the D 0  register are considered to be four pieces of 16-bit data, and the pieces of 16-bit data are decremented.  
         [0656]    The following shows this SIMD operation result:  
         [0657]    (D 0 ) 0x1234 0x5678 0x9ABC 0xDEF0  
         [0658]    (D 1 ) −)0x0001 −)0x0001 −)0x0001 −)0x0000  
         [0659]    _ _ _ _ _ _ _ _ _ _ _ _  
         [0660]    (D 1 ) 0x1233 0x5677 0x9ABB 0xDEEF  
         [0661]    DEC stage: not relevant.  
         [0662]    IF stage: not relevant.  
         [0663]    Note that when the pieces of 16-bit data to be decremented are stored concatenated as 64-bit data in the D 1  register, the 16*4 increment operation can also be achieved by the following two instructions.  
         [0664]    MOV 0x0101010101010101,CR  
         [0665]    SIMD16 D 1   
         [0666]    Here, “MOV 0x0101010101010101,CR” is an instruction for storing “0x0101010101010101” in the CR  9 .  
       Example 12  
       [0667]    The following describes an example of a 32*2 SIMD decrement operation for decrementing two pieces of 32-bit data in parallel.  
         [0668]    If the two pieces of 32-bit data to be decremented are stored concatenated in the D 1  register as 64-bit data, the 32*2 SIMD decrement operation is realized by the following two instructions.  
         [0669]    DEC D 1   
         [0670]    SIMD32 D 1   
         [0671]    Here, supposing that the respective pieces of 32-bit data are “0x12345678” and “0x9ABCDEF0”, “0x123456789ABCDEF0” is pre-stored in the D 1  register.  
         [0672]    [0672]FIG. 6C shows the contents of the registers in the 32*2 SIMD decrement operation.  
         [0673]    (1) Operation Timing  1   
         [0674]    EX stage: not relevant.  
         [0675]    DEC stage: not relevant.  
         [0676]    IF stage: DEC instruction.  
         [0677]    The decrement instruction “DEC D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0678]    (2) Operation Timing  2   
         [0679]    EX stage: not relevant.  
         [0680]    DEC stage: DEC instruction.  
         [0681]    The decrement instruction “DEC D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit data decrement operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 1  register are read and stored in the BR  7 , and “0x0000000000000001” is stored in the AR  6 .  
         [0682]    IF stage: SIMD instruction.  
         [0683]    The SIMD correction instruction “SIMD32 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0684]    (3) Operation Timing  3   
         [0685]    EX stage: DEC instruction.  
         [0686]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagation subtraction of B input from A input, using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0x123456789ABCDEEF” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =1, C 47 =1 and C 55 =1, the ALU  8  stores carry information “0x0101010101010100” in the CR  9 , as shown in FIG. 6C.  
         [0687]    Here, since the subtraction A−B is realized by A+ (inverse bit of B) +1, “0x0000000000000001” (2&#39;s complement), which is the inverse bit +1 of B input “0xFFFFFFFFFFFFFFFF”, is added to A input.  
         [0688]    (BR) 0x123456789ABCDEF0  
         [0689]    2&#39;s complement of (AR) +)0xFFFFFFFFFFHTFFFF  
         [0690]    _ _ _  
         [0691]    (D 1 ) 0x123456789ABCDEEF  
         [0692]    DEC stage: SIMD instruction.  
         [0693]    The SIMD correction instruction “SIMD32 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that two parallel 32-bit SIMD correction operations are to be executed. Based on the result, the contents “0x123456789ABCDEEF” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0x0101010101010100 38  of the CR 9  written in the EX stage are read and 32-bit sign extended by the EXT  5 , and the result “0x0000000000000001” is stored in the BR  7 .  
         [0694]    IF stage: not relevant.  
         [0695]    (4) Operation Timing  4   
         [0696]    EX stage: SIMD instruction.  
         [0697]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a carry-propagate subtract operation for 32-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x123456779ABCDEEF” in the D 1  register.  
         [0698]    (BR) 0x12345678 0x9ABCDEEF  
         [0699]    (AR) −)0x00000001 −)0x00000000  
         [0700]    _ _ _ _ _ _  
         [0701]    (D 1 ) 0x12345677 0x9ABCDEEF  
         [0702]    The operation result is the SIMD operation result obtained if the contents pre-stored in the D 0  register are considered to be two pieces of 32-bit data, and the pieces of 32-bit data are decremented.  
         [0703]    The following shows this SIMD operation result:  
         [0704]    (D 0 ) 0x12345678 0x9ABCDEF0  
         [0705]    (D 1 ) −)0x00000001 −)0x00000001  
         [0706]    _ _ _ _ _ _  
         [0707]    (D 1 ) 0x12345677 0x9ABCDEEF  
         [0708]    DEC stage: not relevant.  
         [0709]    IF stage: not relevant.  
         [0710]    Note that when the pieces of 32-bit data to be decremented are stored concatenated as 64-bit data in the D 1  register, the 32*2 increment operation can also be achieved by the following two instructions  
         [0711]    MOV 0x0101010101010101,CR  
         [0712]    SIMD32 D 1   
         [0713]    Here, “MOV 0x0101010101010101,CR” is an instruction for storing “0x0101010101010101” in the CR  9 .  
         [0714]    As described, the processor of the first embodiment of the present invention is able to execute SIMD operations for a plurality of types of operations by simply implementing instructions SIMD8, SIMD16 and SIMD32 in addition to conventional instructions. These additional instructions are not related to the types of operations, but instead to sizes of operations. As a result of this construction, a dramatic increase in the number of instructions is avoided.  
       Second Embodiment  
       [0715]    The second embodiment of the present invention differs from then first embodiment in that, instead of performing correction by subtraction when an SIMD correction instruction is executed, the second embodiment performs correction by addition.  
         [0716]    The following describes correction by addition when executing an SIMD correction instruction.  
         [0717]    &lt;Structure&gt; 
         [0718]    The SIMD operation apparatus of the second embodiment is shown in FIG. 7.  
         [0719]    An SIMD operation apparatus  20  shown in FIG. 7 has an ALU  21  instead of the ALT  8  in the SIMD operation apparatus  10  described in the first embodiment. Note that compositional elements of the SIMD operation apparatus  20  that are the same as those of the SIMD operation apparatus  10  have there same numbering thereas, and thus a description of these compositional elements is omitted.  
         [0720]    The ALU  21  is a 64-bit adder/subtractor that, when an operation instruction is being executed, performs either an addition A+B or a subtraction A−B, and stores the result of the operation in the registers. Here, the A input and the B input are the respective contents of the AR  6  and the BR  7 . In addition, the ALU  21  generates carry information that shows the result of a carry for each eight bits of data that is being subjected to parallel operations, and stores the carry information in the CR 9 . Furthermore, when an SIMD correction instruction is being executed, the ALU  21  corrects the operation result to SIMD operation results by performing a subtraction A−B so that other SIMD operation results are not affected.  
         [0721]    Here, when the dyadic add instruction “ADD D 0 ,D 1 ” or the increment instruction “INC D 1 ” is executed, the ALU  21  performs an addition A+B, and stores the obtained operation result in the D 1  register. Here, when the instruction is the dyadic add instruction, the ALU  21  also generates carry information in which “0” shows that there is no carry for eight bits and “−1” shows that there is a carry for eight bits. When the instruction is the increment instruction, the ALU  21  generates also carry information in which “1” shows that there is no carry for eight bits and “0” shows that there is a carry for eight bits. Furthermore, when the dyadic subtract instruction “SUB D 0 , D 1 ” or the decrement instruction “DEC  01 ” is executed, the ALU  21  performs a subtraction A−B, and stores the obtained operation result in the D 1  register. Here, when the instruction is the dyadic subtract instruction, the ALU  21  also generates carry information in which “1” shows that there is no carry for eight bits and “0” shows that there is a carry for eight bits. When the instruction is the decrement instruction, the ALU  21  generates carry information in which “0” shows that there is no carry for eight bits and “−1” shows that there is a carry for eight bits. In addition, when an 8-bit SIMD correction instruction “SIMD8 D 1 ”, a 16-bit SIMD correction instruction “SIMD16 D 1 ”, or a 32-bit SIMD correction instruction “SIMD32 D 1 ” is executed, the ALU  8  performs an addition A+B of corresponding numbers of bits so that there is no effect on others, and corrects the operation result that was stored in the D 1  register to the SIMD operation results, and stores the SIMD operation result in the D 1  register.  
         [0722]    Here, processing for fetching a machine language instruction from the ROM  1  and writing the instruction to the instruction register  2  is performed in the IF stage. Decoding of the machine language instruction by the DEC  3 , sign extension by the EXT  5  and outputting from the register file  4  and the EXT  5  are performed in the DEC stage. Operation and storing of the carry information to the CR  9  by the ALU  8  are performed in the EX stage.  
         [0723]    &lt;Operations&gt; 
         [0724]    [0724]FIGS. 8A to  8 D show examples of the bit structure of carry information stored in the CR  9 .  
         [0725]    In FIGS. 8A to  8 D, numbers  63 ,  56 ,  55 ,  48 ,  47 ,  40 ,  39 ,  32 ,  31 ,  24 ,  23 ,  16 ,  15 ,  8 ,  7 , and  0  in a horizontal direction express bit positions. The bit position  0  is the LSB (least significant bit), while the not position  63  is the MSB (most significant bit).  
         [0726]    [0726]FIG. 8A shows carry information when a dyadic add instruction (ADD instruction) has been executed. When there is no carry from bit position  7  in the operation result a value 0 is recorded in bit position  8 , and when there is a carry, an inverse value FF, which is the inverse of the value 0, is recorded in bit position  8  (C 7  in FIG. 8A). When there is no carry from bit position  15  in the operation result the value 0 is recorded in bit position  16 , and when there is a carry, the inverse value FF is recorded in bit position  16  (C 15  in FIG. 8A). When there is no carry from bit position  23  in the operation result the value 0 is recorded in bit position  24 , and when there is a carry, the inverse value FF is recorded in bit position  23  (C 23  in FIG. 8A). When there is no carry from bit position  31  in the operation result the value 0 is recorded in bit position  32 , and when there is a carry, the inverse value FF is recorded in bit position  32  (C 31  in FIG. 8A). When there is no carry from bit position  39  in the operation result the value 0 is recorded in bit position  40 , and when there is a carry, an inverse value FF is recorded in bit position  40  (C 39  in FIG. 8A). When there is no carry from bit position  47  in the operation result the value 0 is recorded in bit position  48 , and when there is a carry, the inverse value FF is recorded in bit position  48  (C 47  in FIG. 8A). When there is no carry from bit position  55  in the operation result the value 0 is recorded in bit position  56 , and when there is a carry, the inverse value FF is recorded in bit position  56  (C 55  in FIG. 8A).  
         [0727]    [0727]FIG. 8B shows carry information when a dyadic subtract instruction (SUB instruction) has been executed. When there is no carry from bit position  7  in the operation result, a value 1 is recorded in bit position  8 , and when there is a carry, a value 0 is recorded in bit position  8  (C 7  with a line thereabove in FIG. 8B). When there is no carry from bit position  15  in the operation result, the value 1 is recorded in bit position  16 , and when there is a carry, the value 0 is recorded in bit position  16  (C 15  with a line thereabove in FIG. 8B). When there is no carry from bit position  23  in the operation result, the value 1 is recorded in bit position  24 , and when there is a carry, the value 0 is recorded in bit position  24  (C 23  with a line thereabove FIG. 8B). When there is no carry from bit position  31  in the operation result, the value 1 is recorded in bit position  32 , and when there is a carry, the value 0 is recorded in bit position  32  (C 31  with a line thereabove in FIG. 8B). When there is no carry from bit position  39  in the operation result, the value 1 is recorded in bit position  40 , and when there is a carry, the value 0 is recorded in bit position  40  (C 39  with a line thereabove in FIG. 8B). When there is no carry from bit position  47  in the operation result, the value 1 is recorded in bit position  48 , and when there is a carry, the value 0 is recorded in bit position  48  (C 47  with a line thereabove in FIG. 8B). When there is no carry from bit position  55  in the operation result, the value 1 is recorded in bit position  56 , and when there is a carry, the value 0 is recorded in bit position  56  (C 55  with a line thereabove in FIG. 8B).  
         [0728]    [0728]FIG. 8C shows carry information when an increment operation instruction (INC instruction) has been executed, and is the same as FIG. 8B.  
         [0729]    [0729]FIG. 8D shows carry information when a decrement operation instruction (DEC instruction) has been executed, and is the same as FIG. 8A.  
         [0730]    &lt;Example  1 &gt; 
         [0731]    The following describes an example of an 8*8 SIMD dyadic add operation for dyadic adding in parallel eight pieces of 8-bit data respectively to another eight pieces of 8-bit data.  
         [0732]    If the first eight pieces of 8-bit data to be added are stored concatenated in the D 0  register as 64-bit data, and similarly, the second eight pieces of 8-bit data to be added are stored concatenated in the D 1  register as 64-bit data, the 8*8 SIMD dyadic add operation is realized by the following two instructions.  
         [0733]    ADD D 0 , D 1   
         [0734]    SIMD8 D 1   
         [0735]    Here, supposing that the first eight pieces of 8-bit data are “0x2”, “0x34”, “0x56”, “0x78”, “0x9A”, “0xBC”, “0xDE” and “0xF0”, and that the second eight pieces of 8-bit data are all “0x80”, “0x123456789ABCDEF0” is pre-stored in the D 0  register, and “0x8080808080808080”is pre-stored in the D 1  register.  
         [0736]    [0736]FIG. 9A shows the contents of the registers in the 8*8 SIMD dyadic add operation.  
         [0737]    (1) Operation Timing  1   
         [0738]    EX stage: not relevant.  
         [0739]    DEC stage: not relevant.  
         [0740]    IF stage: ADD instruction.  
         [0741]    The dyadic add instruction “ADD D 0 , D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0742]    (2) Operation Timing  2   
         [0743]    EX stage: not relevant.  
         [0744]    DEC stage: ADD instruction.  
         [0745]    The dyadic add instruction “ADD D 0 , D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit dyadic add operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 0  register are read and stored in the BR  7 , and the contents “0x8080808080808080” of the D 1  register are read and stored in the AR  6 .  
         [0746]    IF stage: SIMD instruction.  
         [0747]    The SIMD correction instruction “SIMD8 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0748]    (3) Operation Timing  3   
         [0749]    EX stage: ADD instruction.  
         [0750]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate add operation of A input and B input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0x92B4D6F91B3D5F70” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 399 =0, C 47 =0 and C 55 =0, the ALU  8  stores carry information “0x000000FFFFFFFF00” in the CR  9 , as shown in FIG. 9A.  
         [0751]    (BR) 0x123456789ABCDEF0  
         [0752]    (AR) +)0x8080808080808080  
         [0753]    _ _ _  
         [0754]    (D 1 ) 0x92B4D6F91B3D5F70  
         [0755]    DEC stage: SIMD instruction.  
         [0756]    The SIMD correction instruction “SIMD8 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that eight parallel 8-bit data SIMD correction operations are to be executed. Based on the result, the contents “0x92B4D6F91B3D5F70” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0x000000FFFFFFFF00” of the CR 9  written in the EX stage are read and stored in the BR  7  without being sign extended by the EXT  5 .  
         [0757]    IF stage: not relevant.  
         [0758]    (4) Operation Timing  4   
         [0759]    EX stage: SIMD instruction.  
         [0760]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  21  performs a carry-propagate add operation for 8-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x92B4D6F81A3C5E70” in the D 1  register.  
         [0761]    (BR) 0x92 0xB4 0xD6 0xF9 0x1B 0x3D 0x5F 0x70  
         [0762]    (AR) +)0x00 +)0x00 +)0x00 +)0x FF +)0xFF +)0xFF +)0xFF +)0x00  
         [0763]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
         [0764]    (D 1 ) 0x92 0xB4 0xD6 0xF8 0x1A 0x3C 0x5E 0x70  
         [0765]    This operation result is the SIMD operation result obtained if the respective contents pre-stored in the DO register and the D 1  register are considered to be eight pieces of 8-bit data, and corresponding pieces of 8-bit data are dyadic added.  
         [0766]    The following shows this SIMD operation result:  
         [0767]    (D 0 ) 0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE 0xF0  
         [0768]    (D 1 ) +)0x80 +)0x80 +)0x80 +)0x 80 +)0x80 +)0x80 +)0x80 +)0x80  
         [0769]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
         [0770]    (D 1 ) 0x92 0xB4 0xD6 0xF8 0x1A 0x3C 0x5E 0x70  
         [0771]    DEC stage: not relevant.  
         [0772]    IF stage: not relevant.  
       Example 2  
       [0773]    The following describes an example of an 16*4 SIMD dyadic add operation for dyadic adding in parallel four pieces of 16-bit data respectively to another four pieces of 16-bit data.  
         [0774]    If the first four pieces of 16-bit data to be added are stored concatenated in the D 0  register as 64-bit data, and similarly, the second four pieces of 16-bit data to be added are stored concatenated in the D 1  register as 64-bit data, the 16*4 SIMD dyadic add operation is realized by the following two instructions.  
         [0775]    ADD D 0 , D 1   
         [0776]    SIMD16 D 1   
         [0777]    Here, supposing that the first four pieces of 16-bit data are “0x1234”, “0x5678”, “0x9ABC” and “0xDEF0”, and that the second four pieces of 16-bit data are all “0x8080”, “0x123456789ABCDEF0” is pre-stored in the D 0  register, and “0x8080808080808080” is pre-stored in the D 1  register.  
         [0778]    [0778]FIG. 9B shows the contents of the registers in the 14*4 SIMD dyadic add operation.  
         [0779]    (1) Operation Timing  1   
         [0780]    EX stage: not relevant.  
         [0781]    DEC stage: not relevant.  
         [0782]    IF stage: ADD instruction.  
         [0783]    The dyadic add instruction “ADD D 0 , D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0784]    (2) Operation Timing  2   
         [0785]    EX stage: not relevant.  
         [0786]    DEC stage: ADD instruction,  
         [0787]    The dyadic add instruction “ADD D 0 , D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit dyadic add operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 0  register are read and stored in the BR  7 , and the contents “0x8080808080808080” of the D 1  register are read and stored in the AR  6 .  
         [0788]    IF stage: SIMD instruction.  
         [0789]    The SIMD correction instruction “SIMD16 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0790]    (3) Operation Timing  3   
         [0791]    EX stage: ADD instruction.  
         [0792]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  21  performs a 64-bit carry-propagate add operation of A input and B input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0x92B4D6F91B3D5F70” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =0, C 47 =0 and C 55 =0, the ALU  21  stores carry information “0x000000FFFFFFFF00” in the CR  9 , as shown in FIG. 9B.  
         [0793]    (BR) 0x123456789ABCDEF0  
         [0794]    (AR) +)0x8080808080808080  
         [0795]    _ _ _  
         [0796]    (D 1 ) 0x92B4D6F91B3D5F70  
         [0797]    DEC stage: SIMD instruction.  
         [0798]    The SIMD correction instruction “SIMD16 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that four parallel 16-bit data SIMD correction operations are to be executed. Based on the result, the contents “0x92B4D6F91B3D5F70” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0x000000FFFFFFFF00” of the CR 9  written in the EX stage are read and 16-bit sign extended by the EXT  5 , and the result “0x0000FFFFFFFF0000” is stored in the BR  7 .  
         [0799]    IF stage: not relevant.  
         [0800]    (4) Operation Timing  4   
         [0801]    EX stage: SIMD instruction.  
         [0802]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  21  performs a carry-propagate add operation for 16-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x92B4D6F81B3C5F70” in the D 1  register.  
         [0803]    (BR) 0x92B4 0xD6F9 0x1B3D 0x5F70  
         [0804]    (AR) +)0x0000 +)0xFIFF +)0xFHT +)0x0000  
         [0805]    _ _ _ _ _ _ _ _ _ _ _ _  
         [0806]    (D 1 ) 0x92B4 0xD6F8 0x1B3C 0x5E70  
         [0807]    The operation result is the SIMD operation result obtained if the respective contents pre-stored in the D 0  register and the D 1  register are considered to be four pieces of 16-bit data, and corresponding pieces of 16-bit data are dyadic added.  
         [0808]    The following shows this SIMD operation result:  
         [0809]    (D 0 ) 0x1234 0x5678 0x9ABC 0xDEF0  
         [0810]    (D 1 ) +)0x8080 +)0x8080 +)0x8080 +)0x8080  
         [0811]    _ _ _ _ _ _ _ _ _ _ _ _  
         [0812]    (D 1 ) 0x92B4 0xD6F8 0x1B3C 0x5F70  
         [0813]    DEC stage: not relevant.  
         [0814]    IF stage: not relevant.  
       Example 3  
       [0815]    The following describes an example of an 32*2 SIMD dyadic add operation for dyadic adding in parallel two pieces of 32-bit data respectively to another two pieces of 32-bit data.  
         [0816]    If the first two pieces of 32-bit data to be added are stored concatenated in the D 0  register as 64-bit data, and similarly, the second two pieces of 32-bit data to be added are stored concatenated in the D 1  register as 64-bit data, the 32*2 SIMD dyadic add operation is realized by the following two instructions.  
         [0817]    ADD D 0 , D 1   
         [0818]    SIMD32 D 1   
         [0819]    Here, supposing that the first two pieces of 32-bit data are “0x12345678” and “0x9ABCDEF0”, and that the second two pieces of 32-bit data are both “0x80808080”, “0x123456789ABCDEF0” is pre-stored in the D 0  register, and “0x8080808080808080” is pre-stored in the D 1  register.  
         [0820]    [0820]FIG. 9C shows the contents of the registers in the 32*2 SIMD dyadic add operation.  
         [0821]    (1) Operation Timing  1   
         [0822]    EX stage: not relevant.  
         [0823]    DEC stage: not relevant.  
         [0824]    IF stage: ADD instruction.  
         [0825]    The dyadic add instruction “ADD D 0 , D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0826]    (2) Operation Timing  2   
         [0827]    EX stage: not relevant.  
         [0828]    DEC stage: ADD instruction.  
         [0829]    The dyadic add instruction “ADD D 0 , D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit dyadic add operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 0  register are read and stored in the BR  7 , and the contents “0x8080808080808080” of the D 1  register is read and stored in the AR  6 .  
         [0830]    IF stage: SIMD instruction.  
         [0831]    The SIMD correction instruction “SIMD32 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0832]    (3) Operation Timing  3   
         [0833]    EX stage: ADD instruction.  
         [0834]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  21  performs a 64-bit carry-propagate add operation of A input and B input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0x92B4D6F91B3D5F70” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =0, C 47 =0 and C 55 =0, the ALU  21  stores carry information “0x000000FFFFFFFF00” in the CR  9 , as shown in FIG. 9C.  
         [0835]    (BR) 0x123456789ABCDEF0  
         [0836]    (AR) +)0x8080808080808080  
         [0837]    _ _ _  
         [0838]    (D 1 ) 0x92B4D6F91B3D5F70  
         [0839]    DEC stage: SIMD instruction.  
         [0840]    The SIMD correction instruction “SIMD32 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that two parallel 32-bit SIMD correction operations are to be executed. Based on the result, the contents “0x92B4D6F91B3D5F70” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0x000000FFFFFFFF00” of the CR 9  written in the EX stage are read and 32-bit sign extended, and the result “0xFFFFFFFF00000000” is written in the BR  7 .  
         [0841]    IF stage: not relevant.  
         [0842]    (4) Operation Timing  4   
         [0843]    EX stage: SIMD instruction.  
         [0844]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  21  performs a carry-propagate add operation for 32-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x92B4D6F81B3D5F70” in the D 1  register.  
         [0845]    (BR) 0x92B4D6F9 0x1B3D5F70  
         [0846]    (AR) +)0xFFFFFFFF +)0x00000000  
         [0847]    _ _ _ _ _ _  
         [0848]    (D 1 ) 0x92B4D6F8 0x1B3D5F70  
         [0849]    The operation result is the SIMD operation result obtained if the respective contents pre-stored in the D 0  register and the D 1  register are considered to be two pieces of 32-bit data, and corresponding pieces of 32-bit data are dyadic added.  
         [0850]    The following shows this SIMD operation result:  
         [0851]    (D 0 ) 0x12345678 0x9ABCDEF0  
         [0852]    (D 1 ) +)0x80808080 +)0x80808080  
         [0853]    _ _ _ _ _ _  
         [0854]    (D 1 ) 0x92B4D6F8 0x1B3D5F70  
         [0855]    DEC stage: not relevant.  
         [0856]    IF stage: not relevant.  
       Example 4  
       [0857]    The following describes an example of an 8*8 SIMD dyadic subtract operation for dyadic subtracting eight pieces of eight 8-bit data respectively from another eight pieces of 8-bit data.  
         [0858]    If the eight pieces of 8-bit data to be subtracted from are stored concatenated in the D 0  register as 64-bit data, and similarly, the eight pieces of 8-bit data to be subtracted are stored concatenated in the D 1  register as 64-bit data, the 8*8 SIMD dyadic subtract operation is realized by the following two instructions.  
         [0859]    SUB D 0 , D 1   
         [0860]    SIMD8 D 1   
         [0861]    Here, supposing that the pieces of 8-bit data to be subtracted from are “0x12”, “0x34”, “0x56”, “0x78”, “0x9A”, “0xBC”, “0xDE” and “0xF0”, and that the pieces of 8-bit data to subtract are all “0x70”, “0x123456789ABCDEF0” is pre-stored in the D 0  register, and “0x7070707070707070” is pre-stored in the D 1  register.  
         [0862]    [0862]FIG. 10A shows the contents of the registers in the 8*8 SIMD dyadic subtract operation.  
         [0863]    (1) Operation Timing  1   
         [0864]    EX stage: not relevant.  
         [0865]    DEC stage: not relevant.  
         [0866]    IF stage: SUB instruction.  
         [0867]    The dyadic subtract instruction “SUB D 0 , D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0868]    (2) Operation Timing  2   
         [0869]    EX stage: not relevant.  
         [0870]    DEC stage: SUB instruction.  
         [0871]    The dyadic subtract instruction “SUB D 0 , D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit dyadic subtract operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 0  register are read and stored in the BR  7 , and the contents “0x7070707070707070” of the D 1  register are read and stored in the AR  6 .  
         [0872]    IF stage: SIMD instruction.  
         [0873]    The SIMD correction instruction “SIMD8 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0874]    (3) Operation Timing  3   
         [0875]    EX stage: SUB instruction,  
         [0876]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  21  performs a 64-bit carry-propagate subtract operation of B input from A input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0xA1C3E6082A4C6E80” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =1, C 47 =0 and C 55 =0, the ALU  21  stores carry information “0x0101000000000000” in the CR  9 , as shown in FIG. 10A.  
         [0877]    Here, since the subtraction A−B is realized by A+ (inverse bit of B) +1, “0x8F8F8F8F8F8F8F90” (2 3  s complement), which is the inverse bit +1 of B input “0x7070707070707070”, is added to A input.  
         [0878]    (BR) 0x123456789ABCDEF0  
         [0879]    2&#39;s complement of (AR) +)0x8F8F8F8F8F8F8F90  
         [0880]    _ _ _  
         [0881]    (D 1 ) 0xA1C3E6082A4C6E80  
         [0882]    DEC stage: SIMD instruction.  
         [0883]    The SIMD correction instruction “SIMD8 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that eight parallel 8-bit data SIMD correction operations are to be executed. Based on the result, the contents “0xA1C3E6082A4C6E80” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0x0101000000000000” of the CR 9  written in the EX stage are read and stored in the BR  7  without being sign extended by the EXT  5 .  
         [0884]    IF stage: not relevant.  
         [0885]    (4) Operation Timing  4   
         [0886]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  21  performs a carry-propagate add operation for 8-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0xA2C4E6082A4C6E80” in the D 1  register.  
         [0887]    (BR) 0xA1 0xC3 0xE6 0x08 0x2A 0x4C 0x6E 0x80  
         [0888]    (AR) +)0x01 +)0x01 +)0x00 +)0x00 +) 0x00 +)0x00 +)0x00 +)0x00  
         [0889]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
         [0890]    (D 1 ) 0xA2 0xC4 0xE6 0x08 0x2A 0x4C 0x6E 0x80  
         [0891]    The operation result is the SIMD operation result obtained if the respective contents pre-stored in the D 0  register and the D 1  register are considered to be eight pieces of 8-bit data, and corresponding pieces of 8-bit data are dyadic subtracted.  
         [0892]    The following shows this SIMD operation result:  
         [0893]    (D 0 ) 0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE 0xF0  
         [0894]    (D 1 ) −)0x70 −)0x70 −)0x70 −)0x70 −)0x 70 −)0x70 −)0x70 −)0x70  
         [0895]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
         [0896]    (D 1 ) 0xA2 0xC4 0xE6 0x08 0x2A 0x4C 0x6E 0x80  
         [0897]    DEC stage: not relevant.  
         [0898]    IF stage: not relevant.  
       Example 5  
       [0899]    The following describes an example of a 16*4 SIMD dyadic subtract operation for dyadic subtracting in parallel four pieces of 16-bit data respectively from another four pieces of 16-bit data.  
         [0900]    If the four pieces of 16-bit data to be subtracted from are stored concatenated in the D 0  register as 64-bit data, and similarly, the four pieces of 16-bit data to be subtracted are stored concatenated in the D 1  register as 64-bit data, the 14*4 SIMD dyadic subtract operation is realized by the following two instructions  
         [0901]    SUB D 0 , D 1   
         [0902]    SIMD16 D 1   
         [0903]    Here, supposing that the pieces of 16-bit data to be subtracted from are “0x1234”, “0x5678”, “0x9ABC” and “0xDEF0”, and that the pieces of 16-bit data to be subtracted are all “0x7070”, “0x123456789ABCDEF0” is pre-stored in the D 0  register, and “0x7070707070707070” is pre-stored in the D 1  register.  
         [0904]    [0904]FIG. 10B shows the contents of the registers in the 16*4 SIMD dyadic subtract operation.  
         [0905]    (1) Operation Timing  1   
         [0906]    EX stage: not relevant.  
         [0907]    DEC stage: not relevant.  
         [0908]    IF stage: SUB instruction.  
         [0909]    The dyadic subtract instruction “SUB D 0 , D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0910]    (2) Operation Timing  2   
         [0911]    EX stage: not relevant.  
         [0912]    DEC stage: SUB instruction.  
         [0913]    The dyadic subtract instruction “SUB D 0 , D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit dyadic subtract operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 0  register are read and stored in the BR  7 , and the contents “0x7070707070707070” of the D 1  register are read and stored in the AR  6 .  
         [0914]    IF stage: SIMD instruction.  
         [0915]    The SIMD correction instruction “SIMD16 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0916]    (3) Operation Timing  3   
         [0917]    EX stage: SUB instruction.  
         [0918]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  21  performs a 64-bit carry-propagate subtract operation of B input from A input, using the contents of BR  7  as the A input and the contents AR  6  as the B input, and stores an operation result “0xA1C3E6082A4C6E80” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =1, C 47 =0 and C 55 =0, the ALU  21  stores carry information “0x0101000000000000” in the CR  9 , as shown in FIG. 10B.  
         [0919]    Here, since the subtraction A−B is realized by A+ (inverse bit of B) +1, “0x8F8F8F8F8F8F8F90” (2&#39;s complement), which is the inverse bit +1 of B input “0x7070707070707070”, is added to A input.  
         [0920]    (BR) 0x123456789ABCDEF0  
         [0921]    2&#39;s complement of (AR) +)0x8F8F8F8F8F8F8F90  
         [0922]    _ _ _  
         [0923]    (D 1 ) 0xA1C3E6082A4C6E80  
         [0924]    DEC stage: SIMD instruction.  
         [0925]    The SIMD correction instruction “SIMD16 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that four parallel 16-bit data SIMD correction operations are to be executed. Based on the result, the contents “0xA1C3E6082A4C6E80” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0x0101000000000000” of the CR 9  written in the EX stage are read and 16-bit sign extended, and the result “0x0001000000000000” is stored in the BR  7 .  
         [0926]    IF stage: not relevant.  
         [0927]    (4) Operation Timing  4   
         [0928]    EX stage: SIMD instruction.  
         [0929]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  21  performs a carry-propagate add operation for 16-bit units only, using contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0xA1C4E6082A4C6E80” in the D 1  register.  
         [0930]    (BR) 0xA1C3 0xE608 0x2A4C 0x6E80  
         [0931]    (AR) +)0x0001 +)0x0000 +)0x0000 +)0x0000  
         [0932]    _ _ _ _ _ _ _ _ _ _ _ _  
         [0933]    (D 1 ) 0xA1C4 0xE608 0x2A4C 0x6E80  
         [0934]    The operation result is the SIMD operation result obtained if the respective contents pre-stored in the D 0  register and the D 1  register are considered to be four pieces of 16-bit data, and corresponding pieces of 16-bit data are dyadic subtracted.  
         [0935]    The following shows this SIMD operation result:  
         [0936]    (D 0 ) 0x1234 0x5678 0x9ABC 0xDEF0  
         [0937]    (D 1 ) −)0x7070 −)0x7070 −)0x7070 −)0x7070  
         [0938]    _ _ _ _ _ _ _ _ _ _ _ _  
         [0939]    (D 1 ) 0xA1C4 0xE608 0x2A4C 0x6E80  
         [0940]    DEC stage: not relevant.  
         [0941]    IF stage: not relevant.  
       Example 6  
       [0942]    The following describes an example of a 32*2 SIMD dyadic subtract operation for dyadic subtracting in parallel two pieces of 32-bit data respectively from another two pieces of 32-bit data.  
         [0943]    If the two pieces of 32-bit data to be subtracted from are stored concatenated in the D 0  register as 64-bit data, and similarly, the two pieces of 32-bit data to be subtracted are stored concatenated in the D 1  register as 64-bit data, the 32*2 SIMD dyadic subtract operation is realized by the following two instructions.  
         [0944]    SUB D 0 , D 1   
         [0945]    SIMD32 D 1   
         [0946]    Here, supposing that the pieces of 32-bit data to be subtracted from are “0x12345678”, “0x9ABCDEF0”, and that the pieces of 32-bit data to be subtracted are all “0x70707070”, “0x123456789ABCDEF0” is pre-stored in the D 0  register, and “0x7070707070707070” is pre-stored in the D 1  register.  
         [0947]    [0947]FIG. 10C shows the contents of the registers in the 32*2 SIMD dyadic subtract operation.  
         [0948]    (1) Operation Timing  1   
         [0949]    EX stage: not relevant.  
         [0950]    DEC stage: not relevant.  
         [0951]    IF stage: SUB instruction.  
         [0952]    The dyadic subtract instruction “SUB D 0 , D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0953]    (2) Operation Timing  2   
         [0954]    EX stage: not relevant.  
         [0955]    DEC stage: SUB instruction.  
         [0956]    The dyadic subtract instruction “SUB D 0 , D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit dyadic subtract operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 0  register are read and stored in the BR  7 , and the contents “0x7070707070707070” of the D 1  register are read and stored in the AR  6 .  
         [0957]    IF stage: SIMD instruction.  
         [0958]    The SIMD correction instruction “SIMD32 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0959]    (3) Operation Timing  3   
         [0960]    EX stage: SUB instruction.  
         [0961]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  21  performs a 64-bit carry-propagate subtract operation of B input from A input, using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0xA1C3E6082A4C6E80” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =1, C 47 =0 and C 55 =0, the ALU  21  stores carry information “0x0101000000000000” in the CR  9 , as shown in FIG. 10C.  
         [0962]    Here, since the Subtraction A−B is realized by A+ (inverse bit of B) + 1 , the “0x8F8F8F8F8F8F8F90” (2&#39;s complement), which is the inverse bit +1 of B input “0x7070707070707070”, is added to A input.  
         [0963]    (BR) 0x123456789ABCDEF0  
         [0964]    2&#39;s complement of (AR) +)0x8F8F8F8F8F8F8F90  
         [0965]    _ _ _  
         [0966]    (D 1 ) 0xA1C3E6082A4C6E80  
         [0967]    DEC stage: SIMD instruction.  
         [0968]    The SIMD correction instruction “SIMD32 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that two parallel 32-bit SIMD correction operations are to be executed. Based on the result, the contents “0xA1C3E6082A4C6E80” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0x0101000000000000” of the CR 9  written in the EX stage are read and 32-bit sign extended, and the result “0x000000000000000” is stored in the BR  7 .  
         [0969]    IF stage: not relevant.  
         [0970]    (4) Operation Timing  4   
         [0971]    EX stage: SIMD instruction.  
         [0972]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  21  performs a carry-propagation add operation for 32-bit units only, using contents of the BR 7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “x0xA1C3E6082A4C6E80” in the D 1  register.  
         [0973]    (BR) 0xA1C3E608 0x2A4C6E80  
         [0974]    (AR) +)0x00000000 +)0x00000000  
         [0975]    _ _ _ _ _ _  
         [0976]    (D 1 ) 0xA1C3E608 0x2A4C6E80  
         [0977]    The operation result is the SIMD operation result obtained if the respective contents pre-stored in the D 0  register and the D 1  register are considered to be two pieces of 32-bit data, and corresponding pieces of 32-bit data are dyadic subtracted.  
         [0978]    The following shows this SIMD operation result:  
         [0979]    (D 0 ) 0x12345678 0x9ABCDEF0  
         [0980]    (D 1 ) −)0x70707070 −)0x70707070  
         [0981]    _ _ _ _ _ _  
         [0982]    (D 1 ) 0xA1C3E608 0x2A4C6E80  
         [0983]    DEC stage: not relevant.  
         [0984]    IF stage: not relevant.  
       Example 7  
       [0985]    The following describes an example of an 8*8 SIMD increment operation for incrementing eight pieces of 8-bit data in parallel.  
         [0986]    If the eight pieces of 8-bit data to be incremented are stored concatenated in the D 1  register as 64-bit data, the 8*8 SIMD increment operation is realized by the following two instructions.  
         [0987]    INC D 1   
         [0988]    SIMD8 D 1   
         [0989]    Here, supposing that the pieces of 8-bit data are “0x12”, “0x34”, “0x56”, “0x78”, “0x 9A”, “0xBC”, “0xDE” and “0xF0”, “0x123456789ABCDEF0” is pre-stored in the D 1  register.  
         [0990]    [0990]FIG. 11A shows the contents of the registers in the 8*8 SIMD increment operation.  
         [0991]    (1) Operation Timing  1   
         [0992]    EX stage: not relevant.  
         [0993]    DEC stage: not relevant.  
         [0994]    IF stage: INC instruction.  
         [0995]    The dyadic subtract instruction “INC D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [0996]    (2) Operation Timing  2   
         [0997]    EX stage: not relevant.  
         [0998]    DEC stage: INC instruction.  
         [0999]    The increment instruction “INC D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit data increment operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 1  register are read and stored in the BR  7 , and “0x000000000000” is stored in the AR  6 .  
         [1000]    IF stage: SIMD instruction.  
         [1001]    The SIMD correction instruction “SIMD8 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1002]    (3) Operation Timing  3   
         [1003]    EX stage: INC instruction.  
         [1004]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate add operation of A input and B input using the contents of BR  7  as the A input and the contents of AR  6  as the B input. An operation result “0x123456789ABCDEF1” is stored in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =0, C 15 =0, C 23 =0, C 31 =0, C 39 =0, C 47 =0 and C 55 =0, the ALU  8  stores carry information “0x0101010101010100” in the CR  9 , as shown in FIG. 11A.  
         [1005]    (BR) 0x123456789ABCDEF0  
         [1006]    (AR) +)0x0000000000000001  
         [1007]    _ _ _  
         [1008]    (D 1 ) 0x123456789ABCDEF1  
         [1009]    DEC stage: SIMD instruction.  
         [1010]    The SIMD correction instruction “SIMD8 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that eight parallel 8-bit data SIMD correction operations are to be executed. Based on the result, the contents “0x123456789ABCDEF1” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0x0101010101010100” of the CR 9  written in the EX stage are read and stored in the BR  7  without being sign extended by the EXT  5 .  
         [1011]    IF stage: not relevant.  
         [1012]    (4) Operation Timing  4   
         [1013]    EX stage: SIMD instruction.  
         [1014]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  21  performs a carry-propagate add operation for 8-bit units only, using the contents of the BR  7  as the A input and the contents of AR  6  as the B input, and stores the operation result “0x133557799BBDDFF1” in the D 1  register.  
         [1015]    (BR) 0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE 0xF1  
         [1016]    (AR) +)0x01 +)0x01 +)0x01 +)0x 01 +)0x01 +)0x01 +)0x01 +)0x00  
         [1017]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
         [1018]    (D 1 ) 0x13 0x35 0x57 0x79 0x9B 0xBD 0xDF 0xF1  
         [1019]    The operation result is the SIMD operation result obtained if the contents pre-stored in the D 0  register are considered to be eight pieces of 8-bit data, and are incremented.  
         [1020]    The following shows this SIMD operation result:  
         [1021]    (D 0 ) 0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE 0xF0  
         [1022]    (D 1 ) +)0x01 +)0x01 +)0x01 +)0x10 +)0x01 +)0x  
         [1023]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 01 +)0x01 +)0x01  
         [1024]    (D 1 ) 0x13 0x35 0x57 0x79 0x9B 0xBD 0xDF 0xF1  
         [1025]    DEC stage: not relevant.  
         [1026]    IF stage: not relevant.  
         [1027]    Note that when the pieces of 8-bit data to be incremented are stored concatenated as 64-bit data in the D 1  register, the 8*8 increment operation can also be achieved by the following two instructions.  
         [1028]    MOV 0x0101010101010101,CR  
         [1029]    SIMD8 D 1   
         [1030]    Here, “MOV 0x0101010101010101,CR” is an instruction for storing “0x0101010101010101” in the CR  9 .  
       Example 8  
       [1031]    The following describes an example of a 16*4 SIMD increment operation for incrementing four pieces of 16-bit data in parallel.  
         [1032]    If the four pieces of 16-bit data to be incremented are stored concatenated in the D 1  register as 64-bit data, the 16*4 SIMD increment operation is realized by the following two instructions.  
         [1033]    INC D 1   
         [1034]    SIMD16 D 1   
         [1035]    Here, supposing that the pieces of 16-bit data are “0x1234”, “0x5678”, “0x9ABC” and “0xDEF0”, “0x123456789ABCDEF0” is pre-stored in the D 1  register.  
         [1036]    [1036]FIG. 11B shows the contents of the registers in the 16*4 SIMD decrement operation.  
         [1037]    (1) Operation Timing  1   
         [1038]    EX stage: not relevant.  
         [1039]    DEC stage: not relevant.  
         [1040]    IF stage: INC instruction.  
         [1041]    The increment instruction “INC D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1042]    (2) Operation Timing  2   
         [1043]    EX stage: not relevant.  
         [1044]    DEC stage: INC instruction.  
         [1045]    The increment instruction “INC D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit increment operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 1  register are read and stored in the BR  7 , and “0x0000000000000001” is stored in the AR  6 .  
         [1046]    IF stage: SIMD instruction.  
         [1047]    The SIMD correction instruction “SIMD16 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1048]    (3) Operation Timing  3   
         [1049]    EX stage: INC instruction.  
         [1050]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate add operation of A input and B input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0x123456789ABCDEF1” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =0, C 15 =0, C 23 =0, C 31 =0, C 39 =0, C 47 =0 and C 55 =0, the ALU  8  stores carry information “0x0101010101010100” in the CR  9 , as shown in FIG. 11B.  
         [1051]    (BR) 0x123456789ABCDEF0  
         [1052]    (AR) +)0x0000000000000001  
         [1053]    _ _ _  
         [1054]    (D 1 ) 0x123456789ABCDEF1  
         [1055]    DEC stage: SIMD instruction.  
         [1056]    The SIMD correction instruction “SIMD16 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that four parallel 16-bit data SIMD correction operations are to be executed. Based on the result, the contents “0x123456789ABCDEF1” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0x0101010101010100” of the CR 9  written in the EX stage are read and 16-bit sign extended by the EXT  5 , and the result “0x 0001000100010000” is stored in the BR 7.    
         [1057]    IF stage: not relevant.  
         [1058]    (4) Operation Timing  4   
         [1059]    EX stage: SIMD instruction.  
         [1060]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  21  performs a carry-propagate add operation for 16-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x123556799ABDDEF1” in the D 1  register.  
         [1061]    (BR) 0x1234 0x5678 0x9ABC 0xDEF1  
         [1062]    (AR) +)0x0001 +)0x0001 +)0x0001 +)0x0000  
         [1063]    _ _ _ _ _ _ _ _ _ _ _ _  
         [1064]    (D 1 ) 0x1235 0x5679 0x9ABD 0xDEF1  
         [1065]    The operation result is the SIMD operation result obtained if the contents pre-stored in the D 0  register are considered to be four pieces of 16-bit data, and are incremented.  
         [1066]    The following shows this SIMD operation result:  
         [1067]    (D 0 ) 0x1234 0x5678 0x9ABC 0xDEF0  
         [1068]    (D 1 ) +)0x0001 +)0x0001 +)0x0001 +)0x0001  
         [1069]    (D 1 ) 0x1235 0x5679 0x9ABD 0xDEF1  
         [1070]    _ _ _ _ _ _ _ _ _ _ _ _  
         [1071]    DEC stage: not relevant.  
         [1072]    IF stage: not relevant.  
         [1073]    Note that when the pieces of 16-bit data to be incremented are stored concatenated as 64-bit data in the D 1  register, the 16*4 increment operation can also be achieved by the following two instructions.  
         [1074]    MOV 0x01010101010101,CR  
         [1075]    SIMD16 D 1   
         [1076]    Here, “MOV 0x01010101010101,CR” is an instruction for storing “0x 01010101010101” in the CR 9.    
       Example 9  
       [1077]    The following describes an example of a 32*2 SIMD increment operation for incrementing two pieces of 32-bit data in parallel.  
         [1078]    If the two pieces of 32-bit data to be incremented are stored concatenated in the D 1  register as 64-bit data, the 32*2 SIMD increment operation is realized by the following two instructions  
         [1079]    INC D 1   
         [1080]    SIMD32 D 1   
         [1081]    Here, supposing that the pieces of 32-bit data are “0x12345678”, “0x9ABCDEF0”, “0x123456789ABCDEF0” is prestored in the D 1  register.  
         [1082]    [1082]FIG. 11C shows the contents of the registers in the 32*2 SIMD decrement operation.  
         [1083]    (1) Operation Timing  1   
         [1084]    EX stage: not relevant.  
         [1085]    DEC stage: not relevant.  
         [1086]    IF stage: INC instruction.  
         [1087]    The increment instruction “INC D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1088]    (2) Operation Timing  2   
         [1089]    EX stage: not relevant.  
         [1090]    DEC stage: INC instruction.  
         [1091]    The increment instruction “INC D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit increment operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 1  register is read and stored in the BR 7 , and “0x000000000000001” is stored in the AR  6 .  
         [1092]    IF stage: SIMD instruction.  
         [1093]    The SIMD correction instruction “SIMD32 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1094]    (3) Operation Timing  3   
         [1095]    EX stage: INC instruction.  
         [1096]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate add operation of A input and B input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0x123456789ABCDEF1” in the D 1  register of the register file  4 . Furthermore, since the carry for each  8  bits is C 7 =0, C 15 =0, C 23 =0, C 31 =0, C 39 =0, C 47 =0 and C 55 =0, the ALU  21  stores carry information “0x0101010101010100” in the CR  9 , as shown in FIG. 5C.  
         [1097]    (BR) 0x123456789ABCDEF0  
         [1098]    (AR) +) 0x0000000000000001  
         [1099]    _ _ _  
         [1100]    (D 1 ) 0x123456789ABCDEF1  
         [1101]    DEC stage: SIMD instruction.  
         [1102]    The SIMD correction instruction “SIMD32 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that two parallel 32-bit data SIMD correction operations are to be executed. Based on the result, the contents “0x123456789ABCDEF1” of the Di register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents 0x0101010101010100” of the CR 9  written in the EX stage are read and 32-bit sign extended by the EXT  5 , and the result “0x0000000100000000” is stored in the BR  7 .  
         [1103]    IF stage: not relevant.  
         [1104]    (4) Operation Timing  4   
         [1105]    EX stage: SIMD instruction.  
         [1106]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  21  performs a carry-propagate add operation for 32-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x123556799ABDDEF1” in the D 1  register.  
         [1107]    (BR) 0x12345678 0x9ABCDEF1  
         [1108]    (AR) +)0x00000001 +)0x00000000  
         [1109]    _ _ _ _ _ _  
         [1110]    (D 1 ) 0x12345679 0x9ABCDEF1  
         [1111]    The operation result is the operation result is the SIMD operation result obtained if the contents pre-stored in the D 0  register are considered to be two pieces of 32-bit data, and incremented.  
         [1112]    The following shows this SIMD operation result:  
         [1113]    (D 0 ) 0x12345678 0x9ABCDEF0  
         [1114]    (D 1 ) +)0x00000001 +)0x00000001  
         [1115]    _ _ _ _ _ _  
         [1116]    (D 1 ) 0x12345679 0x9ABCDEF1  
         [1117]    DEC stage: not relevant.  
         [1118]    IF stage: not relevant.  
         [1119]    Note that when the pieces of 32-bit data to be incremented are stored concatenated as 64-bit data in the D 1  register, the 32*2 increment operation can also be achieved by the following two instructions  
         [1120]    MOV 0x0101010101010101,CR  
         [1121]    SIMD32 D 1   
         [1122]    Here, “MOV 0x0101010101010101,CR” is an instruction for storing “0x0101010101010101” in the CR  9 .  
       Example 10  
       [1123]    The following describes an example of an 8*8 SIMD decrement operation for decrementing eight pieces of 8-bit data in parallel.  
         [1124]    If the eight pieces of 8-bit data to be decremented are stored concatenated in the D 1  register as 64-bit data, the 8*8 SIMD decrement operation is realized by the following two instructions  
         [1125]    DEC D 1   
         [1126]    SIMD8 D 1   
         [1127]    Here, supposing that the pieces of 8-bit data are “0x12”, “0x34”, “0x56”, “0x78”, “0x9A”, “0xBC”, “0xDE” and “0xF0”, “0x123456789ABCDEF0” is pre-stored in the D 1  register.  
         [1128]    [1128]FIG. 12A shows the contents of the registers in the 8*8 SIMD increment operation.  
         [1129]    (1) Operation Timing  1   
         [1130]    EX stage: not relevant.  
         [1131]    DEC stage: not relevant.  
         [1132]    IF stage: DEC instruction.  
         [1133]    The decrement instruction “DEC D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1134]    (2) Operation Timing  2   
         [1135]    EX stage: not relevant.  
         [1136]    DEC stage: DEC instruction.  
         [1137]    The decrement instruction “DEC D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit decrement operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 1  register are read and stored in the BR  7 , and “0x000000000000001” is stored in the AR  6 .  
         [1138]    IF stage: SIMD instruction.  
         [1139]    The SIMD correction instruction “SIMD8 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1140]    (3) Operation Timing  3   
         [1141]    EX stage: DEC instruction.  
         [1142]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate subtract operation of B input from A input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0x123456789ABCDEEF” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =1, C 47 = 1  and C 55 =1, the ALU  21  stores carry information “0xFFFFFFFFFFFFFF00” in the CR  9 , as shown in FIG. 12A.  
         [1143]    Here, since the Subtraction A−B is realized by A+(inverse bit of B)+1, “0x0000000000000001” (2&#39;s complement), which is the inverse bit +1 of B input “0xFFFFFFFFFFFFFFFFF”, is added to A input.  
         [1144]    (BR) 0x123456789ABCDEF0  
         [1145]    2&#39;s complement of (AR) +)0xFFFFFFFFFFFFFFFF  
         [1146]    _ _ _  
         [1147]    (D 1 ) 0x123456789ABCDEEF  
         [1148]    DEC stage: SIMD instruction.  
         [1149]    The SIMD correction instruction “SIMD8 D 1   11  stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that eight parallel 8-bit data SIMD correction operations are to be executed. Based on the result, the contents “0x123456789ABCDEEF” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0xFFFFFFFFFFFFFF00” of the CR 9  written in the EX stage are read and stored in the BR  7  without being sign extended by the EXT  5 .  
         [1150]    IF stage: not relevant.  
         [1151]    (4) Operation Timing  4   
         [1152]    EX stage: SIMD instruction.  
         [1153]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  21  performs a carry-propagate add operation using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x1133557799BBDDEF” in the D 1  register. (BR) 0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE 0xEF (AR) +)0xFF +)0xFF +)0xFF +)0xFF −)0xFF −)0xFF −)0xFF −)0x00  
         [1154]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
         [1155]    (D 1 ) 0x11 0x33 0x55 0x77 0x99 0xBB 0xDD 0xEF  
         [1156]    The operation result is the SIMD operation result obtained if the contents pre-stored in the D 0  register are considered to be eight pieces of 8-bit data, and are decremented.  
         [1157]    The following shows this SIMD operation result:  
         [1158]    (D 0 ) 0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE 0xF0  
         [1159]    (D 1 ) −)0x01 −)0x01 −)0x01 −)0x01 −)0x  
         [1160]    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 01 −)0x01 −)0x01 −)0x01  
         [1161]    (D 1 ) 0x11 0x33 0x55 0x77 0x99 0xBB 0xDD 0xEF  
         [1162]    DEC stage: not relevant.  
         [1163]    IF stage: not relevant.  
         [1164]    Note that when the pieces of 8-bit data to be decremented are stored concatenated as 64-bit data in the D 1  register, the 8*8 increment operation can also be achieved by the following two instructions.  
         [1165]    MOV 0xFFFFFFFFFFFFFFFF,CR  
         [1166]    SIMD8 D 1   
         [1167]    Here, “MOV 0xFFFFFFFFFFFFFFFFF,CR” is an instruction for storing “0xFFFFFFFFFFFFFFFF” in the CR  9 .  
       Example 11  
       [1168]    The following describes an example of a 16*4 SIMD decrement operation for decrementing four pieces of 16-bit data in parallel.  
         [1169]    If the four pieces of 16-bit data to be decremented are stored concatenated in the D 1  register as 64-bit data, the 16*4 SIMD decrement operation is realized by the following two instructions.  
         [1170]    DEC D 1   
         [1171]    SIMD16 D 1   
         [1172]    Here, supposing that the pieces of 16-bit data are “0x1234”, “0x5678”, “0x9ABC” and “0xDEF0”, “0x123456789ABCDEF0” is pre-stored in the D 1  register.  
         [1173]    [1173]FIG. 12B shows the contents of the registers in the 16*4 SIMD decrement operation.  
         [1174]    (1) Operation Timing  1   
         [1175]    EX stage: not relevant.  
         [1176]    DEC stage: not relevant.  
         [1177]    IF stage: DEC instruction.  
         [1178]    The decrement instruction “DEC D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1179]    (2) Operation Timing  2   
         [1180]    EX stage: not relevant.  
         [1181]    DEC stage: DEC instruction.  
         [1182]    The decrement instruction “DEC D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit decrement operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 1  register are read and stored in the BR  7 , and “0x000000000000001” is stored in the AR  6 .  
         [1183]    IF stage: SIMD instruction.  
         [1184]    The SIMD correction instruction “SIMD16 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1185]    (3) Operation Timing  3   
         [1186]    EX stage: DEC instruction.  
         [1187]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  8  performs a 64-bit carry-propagate subtract operation of B input from A input using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores an operation result “0x123456789ABCDEEF” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =1, C 47 =1 and C 55 =1, the ALU  21  stores carry information “0xFFFFFFFFFFFFFF00” in the CR  9 , as shown in FIG. 12B.  
         [1188]    Here, since the Subtraction A−B is realized by A+ (inverse bit of B) +1, “0x0000000000000001” (2&#39;s complement), which is the inverse bit +1 of B input “0xFFFFFFFFFFFFFFFFF”, is added to A input.  
         [1189]    (BR) 0x123456789ABCDEF0  
         [1190]    2&#39;s complement of (AR) +)0xFFFFFFFFFFFFFFFF  
         [1191]    _ _ _  
         [1192]    (D 1 ) 0x123456789ABCDEEF  
         [1193]    DEC stage: SIMD instruction.  
         [1194]    The SIMD correction instruction “SIMD16 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that four parallel 16-bit data SIMD correction operations are to be executed. Based on the result, the contents “0x123456789ABCDEEF” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0xFFFFFFFFFFFFFF00” of the CR 9  written in the EX stage are read and 16-bit sign extended by the EXT  5 , and the result “0xFFFFFFFFFFFF0000” is stored in the BR  7 .  
         [1195]    IF stage: not relevant.  
         [1196]    (4) Operation Timing  4   
         [1197]    EX stage: SIMD instruction.  
         [1198]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  21  performs a carry-propagate add operation for 16-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x123356779ABBDEEF” in the D 1  register.  
         [1199]    (BR) 0x1234 0x5678 0x9ABC 0xDEEF  
         [1200]    (AR) +)0xFFFF +)0xFFFF +)0xFFFF +)0x0000  
         [1201]    _ _ _ _ _ _ _ _ _ _ _ _  
         [1202]    (D 1 ) 0x1233 0x5677 0x9ABB 0xDEEF  
         [1203]    The operation result is the SIMD operation result obtained if the contents pre-stored in the D 0  register are considered to be four pieces of 16-bit data, and the pieces of 16-bit data are decremented.  
         [1204]    The following shows this SIMD operation result:  
         [1205]    (D 0 ) 0x1234 0x5678 0x9ABC 0xDEF0  
         [1206]    (D 1 ) −)0x0001 −)0x0001 −)0x0001 −)0x0000  
         [1207]    _ _ _ _ _ _ _ _ _ _ _ _  
         [1208]    (D 1 ) 0x1233 0x5677 0x9ABB 0xDEEF  
         [1209]    DEC stage: not relevant.  
         [1210]    IF stage: not relevant.  
         [1211]    Note that when the pieces of 16-bit data to be decremented are stored concatenated as 64-bit data in the D 1  register, the 16*4 increment operation can also be achieved by the following two instructions.  
         [1212]    MOV 0xFFFFFFFFFFFFFFFF,CR  
         [1213]    SIMD16 D 1   
         [1214]    Here, “MOV 0xFFFFFFFFFFFFFFFFF,CR” is an instruction for storing “0xFFFFFFFFFFFFFFFF” in the CR  9 .  
       Example 12  
       [1215]    The following describes an example of a 32*2 SIMD decrement operation for decrementing two pieces of 32-bit data in parallel.  
         [1216]    If the two pieces of 32-bit data to be decremented are stored concatenated in the D 1  register as 64-bit data, the 32*2 SIMD decrement operation is realized by the following two instructions.  
         [1217]    DEC D 1   
         [1218]    SIMD32 D 1   
         [1219]    Here, supposing that the pieces of 32-bit data are “0x12345678” and “0x9ABCDEF0”, “0x123456789ABCDEF0” is prestored in the D 1  register.  
         [1220]    [1220]FIG. 12C shows the contents of the registers in the 32*2 SIMD increment operation.  
         [1221]    (1) Operation Timing  1   
         [1222]    EX stage: not relevant.  
         [1223]    DEC stage: not relevant.  
         [1224]    IF stage: DEC instruction.  
         [1225]    The decrement instruction “DEC D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1226]    (2) Operation Timing  2   
         [1227]    EX stage: not relevant.  
         [1228]    DEC stage: DEC instruction.  
         [1229]    The decrement instruction “DEC D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 64-bit data decrement operation is to be executed. Based on the decoding, the contents “0x123456789ABCDEF0” of the D 1  register are read and stored in the BR  7 , and “0x000000000000001” is stored in the AR  6 .  
         [1230]    IF stage: SIMD instruction.  
         [1231]    The SIMD correction instruction “SIMD32 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1232]    (3) Operation Timing  3   
         [1233]    EX stage: DEC instruction.  
         [1234]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  21  performs a 64-bit carry-propagation subtraction of B input from A input, using the contents of BR  7  as the A input and the contents of AR  6  as the B input, and stores the operation result “0x123456789ABCDEEF” in the D 1  register of the register file  4 . Furthermore, since the carry for each eight bits of data is C 7 =1, C 15 =1, C 23 =1, C 31 =1, C 39 =1, C 47 =1 and C 55 =1, the ALU  21  stores carry information “0xFFFFFFFFFFFFFF00” in the CR  9 , as shown in FIG. 12C.  
         [1235]    Here, since the Subtraction A−B is realized by A+(inverse bit of B)+1, “0x000000000000000” (2&#39;s complement) which is the inverse bit +1 of B input “0xFFFFFFFFFFFFFFFFF”, is added to A input.  
         [1236]    (BR) 0x123456789ABCDEF0  
         [1237]    2&#39;s complement of (AR) +)0xFFFFFFFFFFFFFFFFF  
         [1238]    _ _ _  
         [1239]    (D 1 ) 0x123456789ABCDEEF  
         [1240]    DEC stage: SIMD instruction.  
         [1241]    The SIMD correction instruction “SIMD32 D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of the decoding shows that an two parallel 32-bit data SIMD correction operations are to be executed. Based on the result, the contents “0x123456789ABCDEEF” of the D 1  register written in the EX stage are read and stored in the AR  6 . Furthermore, the contents “0xFFFFFFFFFFFFF00” of the CR 9  written in the EX stage are read and 32-bit sign extended by the EXT  5 , and the result “0xFFFFFFFF00000000” is stored in the BR  7 .  
         [1242]    IF stage: not relevant.  
         [1243]    (4) Operation Timing  4   
         [1244]    EX stage: SIMD instruction.  
         [1245]    Based on the result of the decoding by the DEC  3  in the operation timing  3 , the ALU  21  performs a carry-propagate add operation for 32-bit units only, using the contents of the BR  7  as the A input and the contents of the AR  6  as the B input, and stores the operation result “0x123456779ABCDEEF” in the D 1  register.  
         [1246]    (BR) 0x12345678 0x9ABCDEEF  
         [1247]    (AR) +)0xFFFFFFF +)0x00000000  
         [1248]    _ _ _ _ _ _  
         [1249]    (D 1 ) 0x12345677 0x9ABCDEEF  
         [1250]    The operation result is the SIMD operation result obtained if the contents pre-stored in the D 0  register are considered to be two pieces of 32-bit data, and the pieces of 32-bit data are decremented.  
         [1251]    The following shows this SIMD operation result:  
         [1252]    (D 0 ) 0x12345678 0x9ABCDEF0  
         [1253]    (D 1 ) −)0x00000001 −)0x00000001  
         [1254]    _ _ _ _ _ _  
         [1255]    (D 1 ) 0x12345677 0x9ABCDEEF  
         [1256]    DEC stage: not relevant.  
         [1257]    IF stage: not relevant.  
         [1258]    Note that when the pieces of 32-bit data to be decremented are stored concatenated as 64-bit data in the D 1  register, the 32*2 increment operation can also be achieved by the following two instructions.  
         [1259]    MOV 0xFFFFFFFFFFFFFFF,CR  
         [1260]    SIMD32 D 1   
         [1261]    Here, “MOV 0xFFFFFFFFFFFFFFFF,CR” is an instruction for storing “0xFFFFFFFFFFFFFFFF” in the CR  9 .  
         [1262]    As described, the processor of the second embodiment of the present invention is able to execute SIMD operations for a plurality of types of operations by simply implementing instructions SIMD8, SIMD16 and SIMD32 in addition to conventional instructions. These additional instructions are not related to the types of operations, but instead to sizes of operations. As a result of this construction, a dramatic increase in the number of instructions is avoided.  
       Third Embodiment  
       [1263]    &lt;Outline&gt; 
         [1264]    The third embodiment differs from the first and second embodiments, which describe addition and subtraction, in that it describes other operations such as multiplication and division.  
         [1265]    &lt;Structure&gt; 
         [1266]    [1266]FIG. 13 shows the structure of an SIMD operation apparatus of the present invention.  
         [1267]    An SIMD operation apparatus  30  shown in FIG. 13 has a DEC  31 , an AR  32 , a BR  33  and an ALU  34  instead of the DEC  3 , the AR  6 , the BR  7  and the ALU  8 , respectively, in the SIMD operation apparatus  10  described in the first embodiment. Furthermore, the SIMD operation apparatus  30  has a CR  35  and a CR  36  instead of the CR  9  in the SIMD operation apparatus  10 , and there is no EXT  5  in the SIMD operation apparatus  30 . Note that compositional elements of the SIMD operation apparatus  30  that are the same as those of the SIMD operation apparatus  10  have there same numbering thereas, and thus a description of these compositional elements is omitted.  
         [1268]    The DEC  31  is an instruction decoder that decodes the machine language instruction stored by the IR  2  and controls the various composition elements of the SIMD operation apparatus accordingly.  
         [1269]    Here, the instructions that the DEC  31  decodes are: a dyadic multiply instruction IMUL D 0 ,D 1 ”, a dyadic divide instruction “DIV D 0 ,D 1 ”, the 8-bit SIMD correction instruction “SIMD8 D 1 ”, the 16-bit SIMD correction instruction “SIMD16 D 1 ”, and other operation instructions.  
         [1270]    The AR  32  is a 64-bit register that stores output from the register file  4 .  
         [1271]    The AR  32  stores the output from the D 1  register when the instruction is the dyadic multiply instruction “MUL D 0 ,D 1 ”, the dyadic divide instruction “DIV D 0 ,D 1 ”, the 8-bit SIMD correction instruction “SIMD8 D 1 ”, the 16-bit SIMD correction instruction “SIMD16 D 1 ” or another operation instruction.  
         [1272]    The BR  33  is a 64-bit register, and, according to a machine language instruction, selects and stores the output from either the register file  4 , the CR  35  or the CR  36 .  
         [1273]    Here, the BR  33  selects and stores the output from the D 0  register when the dyadic multiply instruction “MUL D 0 , D 1 ”, the dyadic divide instruction “DIV D 0 , D 1 ” or another operation instruction is executed, the output from the CR 35  when the 8-bit SIMD correction instruction “SIMD8 D 1 ” is executed, and the output from the CR  36  when the 16-bit SIMD correction instruction “SIMD16 D 1 ” is executed.  
         [1274]    The ALU  34  is a 64-bit adder/subtractor, multiplier divider, and other operation device. When an operation instruction is executed, the ALU  34  performs a multiplication A*B, a division A/B, or another operation, and has the operation result stored in the registers. The ALU  34  also generates correction data for correcting the operation result to an SIMD operation result, and stores the SIMD operation result in the CR  35  and CR  36 . Furthermore, when an SIMD correction operation is executed, the ALU  34  performs a subtraction A−B, and corrects the operation results thereof to various SIMD operation results.  
         [1275]    Here, the ALU  34  performs a multiplication A*B when the dyadic multiply operation instruction “MUL D 0 , D 1 ” is executed, a division A/B when the dyadic divide instruction “DIV D 0 , D 1 ” is executed and another operation as appropriate when another operation instruction is executed, and has the operation result stored in the registers. In addition, the ALU  34  generates 8-bit correction data that is the difference between the operation result obtained here and the 8-bit SIMD operation result, has the 8-bit correction data stored in the CR  35 , and generates 16-bit correction data that is the difference between the operation result obtained here and the 16-bit SIMD operation result, and has the 16-bit correction data stored in the CR  36 . Furthermore, when the 8-bit SIMD correction instruction “SIMD8 D 1 ” and the 16-bit SIMD correction instruction “SIMD16 D 1 ” are executed, the ALU  34  performs the subtraction A−B, and corrects the operation result stored in the D 1  register to the SIMD operation results, and has the SIMD operation results stored in the D 1  register.  
         [1276]    Each of the CR  35  and the CR  36  is a 64-bit register that stores correction data. The CR  35  stores correction data for 8-bit SIMD correction, and the CR  36  stores correction data for 16-bit SIMD correction.  
         [1277]    Here, processing for fetching a machine language instruction from the ROM  1  and writing the instruction to the instruction register  2  is performed in the IF stage. Decoding of the machine language instruction by the DEC  3 , and output from the register file  4 , the CR  35  and the CR  36  are performed in the DEC stage. Operation by the ALU  34  and storing of the correction data to the CR  35  and the CR  36  are performed in the EX stage.  
         [1278]    Operations  
       Example 1  
       [1279]    The following describes an operation example of an 8*4 SIMD dyadic multiply operation for dyadic multiplying four pieces of 8-bit data respectively with another four pieces of 8-bit data.  
         [1280]    If the first four pieces of 8-bit data to be multiplied are stored concatenated in the lower part of the D 0  register, and the second four pieces of 8-bit data to be multiplied are stored in the lower part of the D 1  register, the 8*4 SIMD dyadic multiply operation is realized by the following two instructions.  
         [1281]    MUL D 0 , D 1   
         [1282]    SIMD8 D 1   
         [1283]    Here, supposing that the first four pieces of 8-bit data are “0x12”, “0x34”, “0x56” and “0x78”, and that the second four pieces of 8-bit data are all “0x88”, “0x0000000012345678” is pre-stored in the D 0  register, and “0x0000000088888888” is pre-stored in the D 1  register.  
         [1284]    [1284]FIG. 14 shows the contents of the registers in the 8*4 SIMD dyadic multiple operation.  
         [1285]    (1) Operation Timing  1   
         [1286]    EX stage: not relevant.  
         [1287]    DEC stage: not relevant.  
         [1288]    IF stage: MUL instruction.  
         [1289]    The dyadic multiply instruction “MUL D 0 , D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1290]    (2) Operation Timing  2   
         [1291]    EX stage: not relevant.  
         [1292]    DEC stage: MUL instruction.  
         [1293]    The dyadic multiply instruction “MUL D 0 , D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 32-bit data dyadic multiply operation is to be executed. Based on the decoding, the contents “0x0000000012345678” of the D 0  register are read and stored in the BR  33 , and the contents “0x0000000088888888” of the D 1  register are read and stored in the AR  32 .  
         [1294]    IF stage: SIMD8 instruction.  
         [1295]    The SIMD correction instruction “SIMD8 D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1296]    (3) Operation Timing  3  (Referred to as operation timing  3  to  3 +α in cases in which several blocks are necessary.)  
         [1297]    EX stage: MUL instruction.  
         [1298]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  34  performs an unsigned 64-bit multiplication to multiply A input by B input, using the contents of the BR  33  as the A input and the contents of the AR  32  as the B input, and stores an operation result “0x09B58373297DAFC0” in the D 1  register of the register file  4 .  
         [1299]    (BR) 0x0000000012345678  
         [1300]    (AR) *) 0x0000000088888888  
         [1301]    _ _ _  
         [1302]    0x000000009A2B3C0←“0x12345678”* “0x0000000” 
         [1303]    0x000000091A2B3C00←“0x12345678”* “0x00000080” 
         [1304]    0x00000091A2B3C000←“0x12345678”* “0x00000800” 
         [1305]    0x0000091A2B3C0000←“0x12345678”* “0x00008000” 
         [1306]    0x000091A2B3C00000←“0x12345678”* “0x00080000” 
         [1307]    0x00091A2B3C000000←“0x12345678”* “0x00800000” 
         [1308]    0x0091A2B3C0000000←“0x12345678”* ”0x08000000” 
         [1309]    +)0x091A2B3C00000000←“0x12345678”* 0x80000000” 
         [1310]    _ _ _  
         [1311]    (D 1 ) 0x09B58373297DAFC0  
         [1312]    Furthermore, the ALU  34  generates 8-bit correction data and 16-bit correction data, which it stores in the CR  35  and the CR  36  respectively.  
         [1313]    The following shows an example of a method for calculating the 16-bit correction data.  
         [1314]    The ALU  34  masks the least significant 16 bits of the contents “0x0000000012345678” of the BR  33 : “0x0000000012345678” and “FFFFFFFFFFFF0000”=“0x0000000012340000” . . . &lt;&lt;1&gt;&gt;.  
         [1315]    The ALU  34  masks bits other than the least significant 16 bits of the contents “0x0000000088888888” of the AR  32 : “0x0000000088888888” and “0x000000000000FFFF”=“0x0000000000008888” . . . &lt;&lt;2&gt;&gt;.  
         [1316]    The ALU  34  then multiplies &lt;&lt;1&gt;&gt;and &lt;&lt;2&gt;&gt;:  
         [1317]    0x0000000012340000  
         [1318]    *)0x0000000000008888  
         [1319]    _ _ _  
         [1320]    0x0000000091A00000←“0x12340000”* “00000008” 
         [1321]    0x000000091A000000←“0x12340000”* “00000080” 
         [1322]    0x00000091A0000000←“0x12340000”* “00000800” 
         [1323]    +)0x0000091A00000000←“0x12340000”* “00008000” 
         [1324]    _ _ _  
         [1325]    0x000009B54BA00000 . . . &lt;&lt;3&gt;&gt;.  
         [1326]    The ALU  34  then masks bits other than the least significant 16 bits of the contents “0x0000000012345678” of the BR  33 : “0x0000000012345678” and “0x000000000000FFFF”=“0x0000000000005678” . . . &lt;&lt;4&gt;&gt;.  
         [1327]    The ALU  34  then masks bits other than the least significant  16  bits of the contents “0x0000000088888888” of the AR  32 : “0x0000000088888888” AND “0xFFFFFFFFFFFF0000”=“0x0000000088880000” . . . &lt;&lt;5&gt;&gt;.  
         [1328]    The ALU  34  then multiplies &lt;&lt;4&gt;&gt;and &lt;&lt;5&gt;&gt;:  
         [1329]    0x0000000000005678  
         [1330]    *) 0x0000000088880000  
         [1331]    _ _ _  
         [1332]    0x00000002B3C00000←“0x00005678”* “0x00080000” 
         [1333]    0x0000002B3C000000←“0x00005678”* “0x00800000” 
         [1334]    0x000002B3C0000000←“0x00005678”* “0x08000000” 
         [1335]    +)0x00002B3C00000000←“0x00005678”* “0x80000000” 
         [1336]    _ _ _  
         [1337]    0x00002E1DAFC00000 . . . &lt;&lt;6&gt;&gt;.  
         [1338]    The ALU  34  then adds &lt;&lt;3&gt;&gt;and &lt;&lt;6&gt;&gt;:  
         [1339]    0x000009B54BA00000  
         [1340]    +) 0x00002E1DAFC00000  
         [1341]    _ _ _  
         [1342]    0x000037D2FB600000 . . . &lt;&lt;7&gt;&gt;.  
         [1343]    &lt;&lt;7&gt;&gt;is the 16-bit correction data. The ALU  34  stores the 16-bit correction data in the CR  36 .  
         [1344]    The ALU  34  includes an operation device for executing calculating such as that described above.  
         [1345]    The following shows an example of a method for calculating the 8-bit correction data.  
         [1346]    The ALU  34  masks the least significant 8 bits of the contents “0x0000000012345678” of the BR  33 : “0x0000000012345678” and “FFFFFFFFFFFF00”=“0x0000000012345600”. . . &lt;&lt;8&gt;&gt;.  
         [1347]    The ALU  34  masks bits other than the least significant 16 bits of the contents “0x0000000088888888” of the AR  32 : “0x0000000088888888” and “0x00000000000000FF”=“0x0000000000000088”. . .&lt;&lt;9&gt;&gt;.  
         [1348]    The ALU  34  then multiplies &lt;&lt;8&gt;&gt;and &lt;&lt;9&gt;&gt;:  
         [1349]    0x0000000012345600  
         [1350]    *)0x0000000000000088  
         [1351]    _ _ _  
         [1352]    0x0000000091A2B000←0x12345600”* “0x00000008” 
         [1353]    +)0x000000091A2B0000←“0x12345600”* “0x00000080” 
         [1354]    _ _ _  
         [1355]    0x00000009ABCDB000 . . . &lt;&lt;10&gt;&gt;.  
         [1356]    The ALU  34  then masks the  8 th to  15 th least significant bits of the contents “0x0000000012345678” of the BR  33 : “0x0000000012345678” and “0xFFFFFFFFFF00FF”=“0x000000001234008” . . . &lt;&lt;11&gt;&gt;.  
         [1357]    The ALU  34  then masks bits other than the 8th to 15th least significant bits of the contents “0x0000000088888888” of the AR  32 : “0x0000000088888888” and “0x000000000000FF00”=“0x0000000000008800” . . . &lt;&lt;12&gt;&gt;.  
         [1358]    The ALU  34  then multiplies &lt;&lt;11&gt;&gt;and &lt;12&gt;&gt;:  
         [1359]    (BR) 0x0000000012340078  
         [1360]    (AR) *)0x0000000000008800  
         [1361]    _ _ _  
         [1362]    0x00000091A003C000←“0x12340078”* “0x00000800” 
         [1363]    +)0x0000091A003C0000←“0x12340078”* “0x00008000” 
         [1364]    _ _ _  
         [1365]    0x000009ABA03FC000 . . . &lt;&lt;13&gt;&gt;.  
         [1366]    The ALU  34  then masks the 16th to 23rd least significant bits of the contents “0x0000000012345678” of the BR  33 : “0x0000000012345678” and “0xFFFFFFFFFF00FFFF”=“0x0000000012005678” . . . &lt;&lt;14&gt;&gt;.  
         [1367]    The ALU  34  then masks bits other than 16th to 23rd the least significant bits of the contents “0x0000000088888888” of the AR  32 : “0x0000000088888888” and “0x0000000000FF0000”=“0x0000000000880000” . . . &lt;&lt;15&gt;&gt;.  
         [1368]    The ALU  34  then multiplies &lt;&lt;14&gt;&gt;and &lt;&lt;15&gt;&gt;:  
         [1369]    (BR) 0x0000000012005678  
         [1370]    (AR) *)0x0000000000880000  
         [1371]    _ _ _  
         [1372]    0x00009002B3C00000←“0x12005678”* “0x00080000” 
         [1373]    +)0x0009002B3C000000←“0x12005678”* “0x00800000” 
         [1374]    _ _ _  
         [1375]    0x0009902DEFC00000 . . . &lt;&lt;16&gt;&gt;.  
         [1376]    The ALU  34  then masks the 24th to 31st least significant bits of the contents “0x0000000012345678” of the BR  33 : “0x0000000012345678” and “0xFFFFFFF00FFFFFF”=“0x0000000000345678”. . . &lt;&lt;17&gt;&gt;.  
         [1377]    The ALU  34  then masks bits other than the 24th to 31st least significant bits of the contents “0x0000000088888888” of the AR  32 : “0x0000000088888888” and “0x00000000FF000000”=“0x0000000088000000” . . . &lt;&lt;18&gt;&gt;.  
         [1378]    The ALU  34  then multiplies.&lt;&lt; 17 &gt;&gt;and &lt;&lt; 18 &gt;&gt;:  
         [1379]    (BR) 0x0000000000345678  
         [1380]    (AR) *)0x0000000088000000  
         [1381]    _ _ _  
         [1382]    0x0001A2B3C0000000←“0x12005678”* “0x00080000” 
         [1383]    +)0x001A2B3C00000000←“0x12005678”* “0x00800000” 
         [1384]    _ _ _  
         [1385]    0x001BCDEFC0000000 . . . &lt;&lt;19&gt;&gt;.  
         [1386]    The ALU  34  adds &lt;&lt;10&gt;&gt;, &lt;&lt;13&gt;&gt;, &lt;&lt;16&gt;&gt;and &lt;&lt;19&gt;&gt;:  
         [1387]    0x00000009ABCDB000  
         [1388]    0x000009ABA03FC000  
         [1389]    0x0009902DEFC00000  
         [1390]    +)0x001BCDEFC0000000  
         [1391]    _ _ _  
         [1392]    0x002567D2FBCD7000 . . . &lt;&lt;20&gt;&gt;.  
         [1393]    Here, &lt;&lt;20&gt;&gt;is the 8-bit correction data. The 8-bit correction data is stored in the CR  35 .  
         [1394]    The ALU  34  includes an operation device for executing calculating such as that described above.  
         [1395]    DEC stage: SIMD8 instruction.  
         [1396]    The SIMD correction instruction “SIMD8 D 1 ” stored in the IR  2  is decoded by the DEC  31 . The result of decoding shows that four parallel 8-bit SIMD correction operations are to be executed. Based on the decoding, the contents “0x09B58373297DAFC0” written to the D 1  register in the EX stage are read and stored in the AR  32 , and the 8-bit correction data “0x002567D2FBCD7000”, which is the contents of the CR  35  written in the EX stage, is read and stored in the BR  33 .  
         [1397]    IF stage: not relevant.  
         [1398]    (4) Operation Timing  4  (Operation Timing  4 +α when the previous operation timing is operation timing  3  to  3 +α.)  
         [1399]    EX stage: SIMD8 instruction.  
         [1400]    Based on the result of decoding by the DEC  31  in operation timing  3  (or operation timing  3 +α), the ALU  34  performs a subtraction operation to subtract B input from A input, using the contents of the BR  33  as the A input and the contents of the AR  32  as the B input, and stores the operation result “0x9901BA02DB03FC0” in the D 1  register.  
         [1401]    0x09B58373297DAFC0  
         [1402]    −)0x002567D2FBCD7000  
         [1403]    _ _ _  
         [1404]    0x09901BA02DB03FC0  
         [1405]    When divided into four pieces of 8-bit data: “0x0990”, “0x1BA0”, “0x2DB0” and “0x3FC0”, this operation result “0x09901BA02DB03FC0” is the SIMD operation result obtained if the contents pre-stored in the D 0  register are considered to be four pieces of 8-bit data, and the pieces of 8-bit data are dyadic multiplied with corresponding non-encoded pieces of 8-bit data.  
         [1406]    The following shows this SIMD operation result.  
         [1407]    (D 0 ) 0x0012 0x0034 0x0056 0x0078  
         [1408]    (D 1 ) *)0x0088 *)0x0088 *)0x0088 *)0x0088  
         [1409]    _ _ _ _ _ _ _ _ _ _ _ _  
         [1410]    0x0090 0x01A0 0x02B0 0x03C0  
         [1411]    +)0x0900 +)0x1A00 +)0x2B00 +)0x3C00  
         [1412]    _ _ _ _ _ _ _ _ _ _ _ _  
         [1413]    (D 1 ) 0x0990 0x1BA0 0x2DB0 0x3FC0  
         [1414]    DEC stage: not relevant.  
         [1415]    IF stage: not relevant.  
       Example 2  
       [1416]    The following describes an operation example of a 16*2 SIMD dyadic multiply operation for dyadic multiplying two pieces of 16-bit data respectively with another two pieces of 16-bit data.  
         [1417]    If the first two pieces of 16-bit data to be multiplied are stored concatenated in the lower part of the D 0  register, and the second two pieces of 16-bit data to be multiplied are stored in the lower part of the D 1  register, the 16*2 SIMD dyadic multiply operation is realized by the following two instructions.  
         [1418]    MUL D 0 , D 1   
         [1419]    SIMD16 D 1   
         [1420]    Here, supposing that the first two pieces of 16-bit data are “0x1234” and “0x5678”, and that the second eight pieces of 8-bit data are both “0x8888”, “0x0000000012345678” is prestored in the D 0  register, and “0x0000000088888888” is prestored in the D 1  register.  
         [1421]    [1421]FIG. 15 shows the contents of the registers in the 16*2 SIMD dyadic multiple operation.  
         [1422]    (1) Operation Timing  1   
         [1423]    EX stage: not relevant.  
         [1424]    DEC stage: not relevant.  
         [1425]    IF stage: MUL instruction.  
         [1426]    The dyadic multiply instruction “MUL D 0 , D 1 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1427]    (2) Operation Timing  2   
         [1428]    EX stage: not relevant.  
         [1429]    DEC stage: MUL instruction.  
         [1430]    The dyadic multiply instruction “MUL D 0 , D 1 ” stored in the IR  2  is decoded by the DEC  3 . The result of decoding shows that a 32-bit data dyadic multiple operation is to be executed. Based on the decoding, the contents “0x0000000012345678” of the D 0  register are read and stored in the BR  33 , and the contents “0x0000000088888888” of the D 1  register are read and stored in the AR  32 .  
         [1431]    IF stage: SIMD instruction.  
         [1432]    The SIMD correction instruction “SIMD16 D 11 ” is fetched from the ROM  1 , and stored in the IR  2 .  
         [1433]    (3) Operation Timing  3  (Referred to as operation timing  3  to  3 +α in cases in which several blocks are necessary).  
         [1434]    EX stage: MUL instruction.  
         [1435]    Based on the result of the decoding by the DEC  3  in the operation timing  2 , the ALU  34  performs an unsigned 64-bit multiplication to multiply A input by B input, using the contents of the BR  33  as the A input and the contents of the AR  32  as the B input, and stores an operation result “0x09B58373297DAFC0” in the D 1  register of the register file  4 .  
         [1436]    Furthermore, the ALU  34  generates 8-bit correction data and 16-bit correction data.  
         [1437]    Note that the ALU  34  generates the 8-bit correction data and the 16-bit correction data using the same method as in Example 1 in the present embodiment, therefore a detailed description is omitted here.  
         [1438]    DEC stage: SIMD16 instruction.  
         [1439]    The SIMD correction instruction “SIMD16 D 1 ” stored in the IR  2  is decoded by the DEC  31 . The result of decoding shows that two parallel 16-bit SIMD correction operations are to be executed. Based on the decoding, the contents “0x09B58373297DAFC0” written to the D 1  register in the EX stage are read and stored in the AR  32 , and the 8-bit correction data “0x000037D2FB600000”, which is the contents of the CR 35  written in the EX stage, is read and stored in the BR  33 .  
         [1440]    IF stage: not relevant.  
         [1441]    (4) Operation Timing  4  (Operation Timing  4 +α when the previous operation timing is operation timing  3  to  3 +α.)  
         [1442]    EX stage: SIMD16 instruction.  
         [1443]    Based on the result of decoding by the DEC  31  in operation timing  3  (or operation timing  3 +α), the ALU  34  performs a subtraction operation to subtract B input from A input, using the contents of the BR  33  as the A input and the contents of the AR  32  as the B input, and stores the operation result “0x09B54BA02E1DAFC0” in the D 1  register.  
         [1444]    0x09B58373297DAFC0  
         [1445]    −)0x000037D2FB600000  
         [1446]    _ _ _  
         [1447]    0x09B54BA02E1DAFC0  
         [1448]    When divided into two pieces of 16-bit data: “0x09B54BA0” and “0x2E1DAFC0”, this operation result “0x09B54BA02E1DAFC0” is the SIMD operation result obtained if the contents pre-stored in the D 0  register are considered to be two pieces of 16-bit data, and the pieces of 16-bit data are dyadic multiplied with corresponding unsigned pieces of 16-bit data.  
         [1449]    The following shows this SIMD operation result.  
         [1450]    (D 0 ) 0x00001234 0x00005678  
         [1451]    (D 1 ) *)0x00008888 *)0x00008888  
         [1452]    _ _ _ _ _ _  
         [1453]    0x000091A0 0x0002B3C0  
         [1454]    0x00091A00 0x002B3C00  
         [1455]    0x0091A000 0x02B3C000  
         [1456]    +)0x091A0000 +)0x2B3C0000  
         [1457]    _ _ _ _ _ _  
         [1458]    (D 1 ) 0x09B54BA0 0x2E1DAFC0  
         [1459]    DEC stage: not relevant.  
         [1460]    IF stage: not relevant.  
         [1461]    As described, the processor of the third embodiment of the present invention is able to execute SIMD operations for a plurality of types of operations by simply implementing instructions SIMD8 and SIMD16 in addition to conventional instructions. These additional instructions are not related to the types of operations, but instead to sizes of operations. As a result of this construction, a dramatic increase in the number of instructions is avoided.  
         [1462]    Note that in the first and second embodiments, when the ALU  8  or the ALU  21  executes an operation instruction, carry information is made for each type of operation according to whether there is a carry from seven bit positions in the operation result, and the carry information is stored in the CR  9 . In the third embodiment, correction information is generated and stored in the CR  35  and the CR  36 , but it is not always necessary to generate carry information and correction information when the ALU  34  executes an operation instruction. A possible structure in the first and second embodiments is a structure in which, when the ALU  8  or the ALU  21  executes an operation instruction, the carry result from seven bit positions (C 7 , C 15 , C 23 , C 31 , C 39 , C 47 , C 55 ) and the type of operation (ADD, SUB, INC or DEC) are recorded, and carry information is generated based on the contents of the recorded information. A possible structure in the third embodiment is one in which, when the ALU  34  executes an operation instruction, the data for generating correction data, and the type of operation are recorded, and correction data is generated based on the recorded contents when the SIMD correction instruction is executed.  
         [1463]    [1463]FIG. 16 shows the structure of an SIMD operation apparatus in which the carry result and the operation type are recorded when an operation instruction is executed, and carry information is generated when an SIMD correction instruction is executed.  
         [1464]    An SIMD operation apparatus  40  shown in FIG. 16 includes an ALU  41  instead of the ALU  8  in the SIMD operation apparatus  10  shown in FIG. 1, an EXT  42  instead of the EXT  5  in the SIMD operation apparatus  10 , a CR  43  and an OPR  44  instead of the CR  9  in the SIMD operation apparatus  10 .  
         [1465]    The ALU  41  is a 64-bit adder/subtractor that, when an operation instruction is being executed, performs either and an addition A+B or a subtraction A−B, and stores the result of the operation in the registers. Here, A input and B input are the respective contents of the AR  6  and the BR  7 . In addition, the ALU  41  stores a carry result in the CR  43  and the operation type in the OPR  44 , and corrects the operation result to the SIMD operation results based on carry information generated by the EXT  42 .  
         [1466]    The EXT  42  is a carry information generator/extender. The EXT  42  generates 8-bit-use carry information from the carry result stored in the CR  43  as a result of an 8-bit SIMD correction instruction being decoded by the IR  2  and the operation type stored by the OPR  44 . The EXT  42  generates 16-bit-use carry information from the carry result stored in the CR  43  as a result of a 16-bit SIMD correction instruction being decoded by the IR  2  and the operation type stored by the OPR  44 . The EXT  42  generates 32-bit-use carry information from the carry result stored in the CR  43  as a result of a 32-bit SIMD correction instruction being decoded by the IR  2  and the operation type stored by the OPR  44 . The EXT  42  stores the generated carry information in the BR  7 .  
         [1467]    The CR  3  is a register of at least seven bits that stores the carry result during execution of an operation instruction.  
         [1468]    The OPR  44  is a register that stores the operation type during execution of an operation instruction.  
         [1469]    Furthermore, it is possible to include an additional feature in the CR  9  by which the CR  35 , the CR  36 , the CR  43  and the OPR  44  store their contents to a memory or the like on receiving an interrupt or a switch to another context, and the contents are restored when returning from the interrupt and switching to the original context. This means that interrupts can be received without inconsistencies between the operation instruction and the SIMD correction instruction, and the SIMD operation apparatus  40  is able to perform multitasking without a time lag.  
         [1470]    Furthermore, although in each embodiment SIMD correction instructions are employed along with ADD, SUB, INC, DEC, MUL and DIV operation instructions and so on to achieve SIMD operations, it is possible to have SIMD operations performed according to both SIMD correction instructions and SIMD-specific instructions. For example, the two instructions ADD and SUB may be used together with an SIMD correction instruction, while increment and decrement may be implemented with an SIMD-specific instruction.  
         [1471]    Here, the increment SIMD-specific instructions may be INCS 8  (for processing eight pieces of 8-bit data in parallel), INCS 16  (for processing four pieces of 16-bit data in parallel), and INCS 32  (for processing two pieces of 32-bit data). The decrement SIMD specific instructions may be DECS 8  (for processing eight pieces of 8-bit data in parallel), DECS 16  (for processing four pieces of 16-bit data in parallel), and DECS 32  (for processing two pieces of 32-bit data in parallel).  
         [1472]    The total number of instructions in such a case is three less than that for when SIMD-specific instructions are implemented for all four operations.  
         [1473]    The following describes an example of operations of the INCS 8  instruction with use of the compositional elements shown in FIG. 1.  
         [1474]    (1) On the INCS 8  instruction being decoded by the DEC  3 , the register operand designated in the instruction is read from the register file  4 , and stored in the AR  6 . In addition, a value 0x0101010101010101 is stored in the BR  7 .  
         [1475]    (2) Next, the ALU  8  adds the contents of the AR  6  to the contents of the BR  7 . Here, propagation of the carry from bit position  7  to bit position  8 , the carry from bit position  15  to bit position  16 , the carry from bit position  23  to bit position  24 , the carry from bit position  31  to bit position  32 , the carry from bit position  39  to bit position  40 , the carry from bit position  47  to bit position  48 , and the carry from bit position  55  to bit position  56  is not performed, and the operation result from the ALU  8  is stored in a register designated by the instruction language.  
         [1476]    The values stored in the BR  7  for SIMD-specific instructions other than INCS 8  are: 0x0101010101010101 for DECS 8  (the same as for INCS 8 ), 0x0000000100000001 for INCS 16  and DECS 16 , and 0x0000000100000001 for INCS  32  and DECS 32 . The operation preformed by the ALU  8  for INCS 16  and INCS 32  is the same as for INCS 8 . The ALU  8  performs a subtraction for DECS 8 , DECS 16  and DECS 32 . The places in which carry propagation is not performed are the same for DECS 8  as INCS 8 . The carry propagation is not performed from bit position  15  to bit position  16 , bit position  31  to bit position  32 , bit position  47  to bit position  48  for INCS  16  and DECS  16 . The carry propagation is not performed from bit position  31  to bit position  32  for INCS 32  and DECS 32 . Other operations are the same as for INCS 8 .  
         [1477]    In this way, by implementing increment and decrement SIMD-specific instructions, it is possible to increase or decrease a plurality of addresses at once and control the brightness, color or the like of a plurality of pieces of image data at high speed.  
         [1478]    Furthermore, although the SIMD operation apparatuses in the embodiments use an operation device such as a 64-bit adder/subtractor to implement three types of SIMD operations: eight parallel operations on 8-bit data, four parallel operations on 16-bit data, and two parallel operations on 32-bit data, the SIMD operation apparatuses may implement more or less types of SIMD operations. For example, the operation device may be 32 bits, and may implement four parallel 8-bit operations on and two parallel 16-bit data operations. Alternatively, the operation device may be 128 bits, and may implement all or some of the following types of operations: sixteen parallel 8-bit data operations, eight parallel 16-bit data operations, four parallel 32-bit data operations, and two parallel 64-bit operations.  
         [1479]    In any of the above-described cases, carry information that corresponds to the smallest data size of the implemented SIMD operations is recorded during execution of an operation. For example, when the smallest data size is 16 bits, the carry information is generated based on carries C 15 , C 31 , C 47 , . . . C( 16 n−1).  
         [1480]    Furthermore, in the embodiments, it is not necessary to store the eight least significant bits of the carry information since they are always 0 and are not used in correction.  
         [1481]    Furthermore, although the SIMD operation apparatuses in the embodiments employ a single scalar architecture method that processes one instruction per machine cycle, it is possible to use an architecture method that processes a plurality of instructions per machine cycle, such as a super scalar architecture method or a VLIW (very long instruction word) architecture method.  
         [1482]    Furthermore, although the processors in the embodiments are composed of a three-stage pipeline, specifically instruction fetch, decode and execute, the pipeline may have any number of stages. Alternatively, it is possible to not use a pipeline structure.  
       Fourth Embodiment  
       [1483]    The fourth embodiment of the present invention is a compiler that generates machine language instruction programs for the processors in the first to third embodiments for realizing an SIMD operation instruction with an operation instruction for a non-parallel operation and a correction instruction for correcting the non-parallel operation instruction result to an SIMD operation instruction operation result.  
         [1484]    &lt;Structure&gt; 
         [1485]    [1485]FIG. 17 shows the structure of the compiler of the fourth embodiment.  
         [1486]    A compiler  100  shown in FIG. 17 is composed of a file reading unit  101 , read buffer  102 , a syntax analysis unit  103 , an intermediate code buffer  104 , a machine language instruction generation unit  105 , an output buffer  106  and a file output unit  107 .  
         [1487]    The file reading unit  101  reads a C language program file from an external recording medium such as a hard disk, to the read buffer  102 .  
         [1488]    [1488]FIG. 18 shows an example of the C language program read to the read buffer  102 .  
         [1489]    The C language program shown in FIG. 18 is a loop that finds the sum of an array variable a [i] and an array variable b [i], and stores the result in an array variable c [i]. Here, i has a value of 0 to 63, therefore  64  array operations are performed.  
         [1490]    The syntax analysis unit  103  analyzes the syntax of the C language program read to the read buffer  102 , to generate an intermediate code program which it writes to the intermediate code buffer  104 . Here, the intermediate code program is in a processor-independent format, and does not include intermediate code that shows an SIMD operation.  
         [1491]    [1491]FIG. 19 shows an example of the intermediate code program generated from the C language program in FIG. 18.  
         [1492]    The following describes the intermediate codes in the intermediate program shown in FIG. 19.  
         [1493]    &lt;Intermediate code 1&gt; 
         [1494]    A value 0 is assigned to the variable i.  
         [1495]    &lt;Intermediate code 2&gt; 
         [1496]    The i-th element of the char-type array variable a and the i-th element of the char-type array variable b are added together, and the result is stored in the i-th element of the char-type array variable c.  
         [1497]    &lt;Intermediate code 3&gt; 
         [1498]    The value of the variable i is increased by one.  
         [1499]    &lt;Intermediate code 4&gt; 
         [1500]    The value of each flag is updated according to a result of subtracting 64 from the variable i.  
         [1501]    &lt;Intermediate code 5&gt; 
         [1502]    When the updated value of the flags shows “0 or less”, in other words, when “i−64&lt;0” is fulfilled in intermediate code 4, the intermediate code program branches to intermediate code 2.  
         [1503]    The machine language instruction generation unit  105  generates a machine language program that includes a machine language instruction showing an SIMD operation, using the intermediate code program stored in the intermediate code buffer  104  as input, and writes the generated machine language instruction program to the output buffer  106 . Here, this machine language instruction program is composed of machine language instructions and is in a processor-dependant format. The machine language instructions include those that show an SIMD operation.  
         [1504]    The file output unit  107  outputs the machine language instruction program stored in the output buffer  106  to an external recording medium such as a hard disk.  
         [1505]    [1505]FIG. 20 shows the structure of the machine language instruction generation unit  105  in detail.  
         [1506]    The machine language instruction generation unit  105  shown in FIG. 20 is composed of an SIMD operation extraction unit  110 , an SIMD intermediate code generation unit  111  and a machine language instruction output unit  112 .  
         [1507]    The SIMD operation extraction unit  110  scans the intermediate code program input from the intermediate code buffer  104  to find intermediate codes for which an array operation is to be performed, and generates a modified intermediate code program. The modified intermediate code program is obtained by converting the intermediate code in the intermediate code program that is for performing data array operations to modified intermediate code that shows an SIMD operation for a predetermined number of operations at once according to the data array type.  
         [1508]    [1508]FIG. 21 shows an example of a modified intermediate code program generated from the intermediate code program shown in FIG. 19.  
         [1509]    The following describes the modified intermediate codes in the modified intermediate code program shown in FIG. 21.  
         [1510]    &lt;Modified intermediate code 1&gt; 
         [1511]    A value 0 is assigned to the variable i (same as intermediate code 1).  
         [1512]    &lt;Modified intermediate code 2&gt; 
         [1513]    The eight array elements from the i-th to the (i+7)-th array element of the char-type array variable a, and eight array elements from the i-th to the (i+1)-th array element of the char-type array variable b are respectively added, and the results are stored in the respective eight array elements from the i-th to the (i+1)-th array element of the char-type array variable c.  
         [1514]    &lt;Modified intermediate code 3&gt; 
         [1515]    The value of the variable i is increased by 8.  
         [1516]    &lt;Modified intermediate code 4&gt; 
         [1517]    The value of each flag is updated according to a result of subtracting  64  from the variable i (same as intermediate code 4).  
         [1518]    &lt;Modified intermediate code 5&gt; 
         [1519]    When the value of each flag shows “0 or less”, in other words, when “i−64&lt;0” is fulfilled in modified intermediate code 4, the modified intermediate code program branches to modified intermediate code 2.  
         [1520]    The SIMD intermediate code generation unit  111  uses the modified intermediate code program generated by the SIMD operation extraction unit  110  to generate an SIMD intermediate code program. Here, the SIMD intermediate code program includes intermediate codes showing SIMD operations.  
         [1521]    [1521]FIG. 22 shows an example of an SIMD intermediate code program generated from the modified intermediate code program shown in FIG. 21.  
         [1522]    The following describes the intermediate codes in the SIMD intermediate code program shown in FIG. 22.  
         [1523]    &lt;SIMD intermediate code 1&gt; 
         [1524]    A value 0 is assigned to the variable i (same as intermediate code 1 and modified intermediate code 1).  
         [1525]    &lt;SIMD intermediate code 2&gt; 
         [1526]    This corresponds to reading the eight elements of the char-type array variable a in modified intermediate code 2. 64 bits&#39; worth of data are read from a memory area shown by a pointer A, and stored in the variable a.  
         [1527]    &lt;SIMD intermediate code 3&gt; 
         [1528]    This corresponds to reading the eight elements of the char-type array variable b in modified intermediate code 2. 64 bits&#39; worth of data are read from a memory area shown by a pointer B, and stored in the variable b.  
         [1529]    &lt;SIMD intermediate code 4&gt; 
         [1530]    This corresponds to adding the eight elements of the char-type array variable a and the eight array elements of the char-type array variable b respectively in the modified intermediate code 2. The variable a and the variable b are subjected to SIMD addition 8 bits at a time, and the result is stored in the variable c.  
         [1531]    &lt;SIMD intermediate code 5&gt; 
         [1532]    This corresponds to writing the eight elements of the char-type array variable c in modified intermediate code 2. The variable c is written to the 64 bits&#39; worth of the memory area shown by a pointer C.  
         [1533]    &lt;SIMD intermediate code 6&gt; 
         [1534]    This corresponds to increasing the pointer A for the array variable a following increasing the value of the variable i in the modified intermediate code 3. The value of the pointer A is increased by 8.  
         [1535]    &lt;SIMD intermediate code 7&gt; 
         [1536]    This corresponds to increasing the pointer B for the array variable b following increasing the value of the variable i in the modified intermediate code 3. The value of the pointer B is increased by 8.  
         [1537]    &lt;SIMD intermediate code 8&gt; 
         [1538]    This corresponds to increasing the pointer C for the array variable c following increasing the value of the variable i in the modified intermediate code 3. The value of the pointer C is increased by 8.  
         [1539]    &lt;SIMD intermediate code 9&gt; 
         [1540]    The value of the variable i is increased by 8 (same as modified intermediate code 3).  
         [1541]    &lt;SIMD intermediate code 10&gt; 
         [1542]    The value of each flag is updated according to a result of subtracting  64  from the variable i (same as intermediate code 4 and modified intermediate code 4).  
         [1543]    &lt;SIMD intermediate code 11&gt; 
         [1544]    When the updated value of each flag shows “0 or less”, in other words, when “i−64&lt;0” in fulfilled in SIMD intermediate code 4, the SIMD intermediate code program branches to SIMD intermediate code 2.  
         [1545]    The machine language instruction output unit  112  generates a machine language instruction program that includes machine language instructions showing an SIMD operation, using the SIMD intermediate code program generated by the SIMD intermediate generation unit  111 .  
         [1546]    [1546]FIG. 23 shows an example of the machine language instruction program generated from the SIMD intermediate code program shown in FIG. 22.  
         [1547]    The following describes the machine language instructions in the machine language instruction program shown in FIG. 23.  
         [1548]    &lt;Machine language instruction 1&gt; 
         [1549]    This corresponds to SIMD intermediate code 1. The variable i in the SIMD intermediate code 1 is assigned to the D 0  register, and the contents of the D 0  register are cleared by subtracting the contents of the D 0  register from the contents of the D 0  register.  
         [1550]    &lt;Machine language instruction 2&gt; 
         [1551]    This corresponds to SIMD intermediate code 2. The pointer A in the SIMD intermediate code 2 in assigned to the D 1  register and the variable a is assigned to the register D 2 . Data is loaded from the 64-bit memory area shown by the contents of the D 1  register and stored in the register D 2 .  
         [1552]    &lt;Machine language instruction 3&gt; 
         [1553]    This corresponds to SIMD intermediate code 3. The pointer B in the SIMD intermediate code 3 is assigned to the register D 3  and the variable b is assigned to the register D 4 . Data is loaded from the 64-bit memory area shown by the contents of the register D 3  and stored in the register D 4 .  
         [1554]    Here, the SIMD intermediate code 4 is broken down into a machine language instruction 4 that is an ordinary operation instruction, and a machine language instruction 5 that is an SIMD correction instruction for correcting an ordinary operation instruction result to an SIMD operation result.  
         [1555]    &lt;Machine language instruction 4&gt; 
         [1556]    This corresponds to the former half of the SIMD intermediate code 4. The variable c in the SIMD intermediate code 4 is assigned to the register D 4 . The contents of the register D 2  and the contents of the register D 4  are added, and the result is stored in the register D 4 . In addition, the carry information for each eight bits is stored in an implicitly-determined implicit register.  
         [1557]    &lt;Machine language instruction 5&gt; 
         [1558]    This corresponds to the latter half of the SIMD intermediate code 4. Each eight bits of the contents of the register D 4  are corrected using the carry information stored in the implicit register in machine language instruction 4, to obtain an 8-bit SIMD addition result which is then stored in the register D 4 .  
         [1559]    &lt;Machine language instruction 6&gt; 
         [1560]    This corresponds to the SIMD intermediate code 5. The pointer C in the SIMD intermediate code 5 is assigned to the register D 5 , and the contents of the register D 4  are stored in the 64-bit memory area shown by the contents of the register D 5 .  
         [1561]    &lt;Machine language instruction 7&gt; 
         [1562]    This corresponds to the SIMD intermediate code 6. The contents of the register D 1  are increased by 8.  
         [1563]    &lt;Machine language instruction 8&gt; 
         [1564]    This corresponds to the SIMD intermediate code 7. The contents of the register D 3  are increased by 8.  
         [1565]    &lt;Machine language instruction 9&gt; 
         [1566]    This corresponds to the SIMD intermediate code 8. The contents of the register D 5  are increased by 8.  
         [1567]    &lt;Machine language instruction 10&gt; 
         [1568]    This corresponds to the SIMD intermediate code 9. The contents of the register D 0  are increased by 8.  
         [1569]    &lt;Machine language instruction 11&gt; 
         [1570]    This corresponds to the SIMD intermediate code 10. The value of each flag is updated according to a result of subtracting 64 from the contents of the D 0  register.  
         [1571]    &lt;Machine language instruction 12&gt; 
         [1572]    This corresponds to the SIMD intermediate code 11. When the values of the flags show that the result is “0 or less”, in other words, when a relationship between a zero flag (Z), an overflow flag (V) and a negative flag (N) fulfills a relationship “Z or (V xor N)=1”, the machine language program diverges to the machine language instruction 2, which is ten instruction previous.  
         [1573]    Note that although the above-described example of the program shows a case in which the data of the array subject to operation is char-type 8-bit data, the type of the array is not limited to being char-type. For example, when the data is short-type 16-bit data, four pieces of data may be treated at a time as 64-bit data. Furthermore, when the data is int-type 32-bit data, two pieces of data may be treated at a time as 64-bit data.  
         [1574]    &lt;Operations&gt; 
         [1575]    [1575]FIG. 24 shows an outline of operations of processing by the SIMD operation extraction unit  110  for generating a modified intermediate code program.  
         [1576]    In this processing eight, four or two data operations are performed at a time, according to whether the array type subject to operation is char-type, short-type or int-type. Here, it is supposed that the processor performs an operation for 64 bits of data at once with one operation instruction, and that char-type data is 8 bits, short-type data is 16 bits, and int-type data is 32 bits.  
         [1577]    The following describes an outline of processing for generating a modified intermediate code program, with use of FIG. 24.  
         [1578]    (1) The SIMD operation extraction unit  110  judges whether there are any unprocessed intermediate codes in the intermediate code program stored in the intermediate code buffer  104  (step S 1 ). When there are no unprocessed intermediate codes, the processing ends.  
         [1579]    (2) When there are one or more unprocessed intermediate codes, the SIMD operation extraction unit  110  treats one line of unprocessed code as a target for processing (hereinafter “target code”), and judges whether the target code is for performing an array operation (step S 2 ). When the target code is not for performing an array operation, the SIMD operation extraction unit  110  returns to step S 1  process remaining intermediate codes.  
         [1580]    (3) When the target code is for performing an array operation, the SIMD operation extraction unit  110  judges whether the target code is for performing a char-type array operation (step S 3 ).  
         [1581]    (4) When the target code is for performing a char-type array operation, the SIMD operation extraction unit  110  finds other codes to be processed that are for performing char-type array operations, converts the codes in groups of eight to char-type modified intermediate codes, and then returns to process remaining intermediate codes (step S 4 ).  
         [1582]    (5) When the target code is not a for performing char-type array operation, the SIMD operation extraction unit  110  judges whether the target code is for performing a short-type array operation (step S 5 ).  
         [1583]    (6) When the target code is for performing a short-type array operation, the SIMD operation extraction unit  110  finds other codes to be processed that are for performing short-type array operations, converts the codes in groups of four to short-type-use intermediate codes, and then returns to step S 1  to process remaining intermediate codes (step S 6 ).  
         [1584]    (7) When the target code is not for performing a short-type array operation, the SIMD operation extraction unit  110  judges whether the target code is an for performing int-type array operation (step S 7 ).  
         [1585]    (8) When the target code is for performing an int-type array operation, the SIMD operation extraction unit  110  finds other codes to be processed that are for performing int-type array operations, converts the codes in groups of two to int-type-use intermediate codes, and then returns to step S 1  process remaining intermediate codes (step S 8 ).  
         [1586]    (9) When the target code is not an int-type array operation, the SIMD operation extraction unit  110  treats the target code as a long-type data array operation, and then returns to step S 1  to process remaining intermediate codes without further processing the target code (step S 9 ).  
         [1587]    In this way, the compiler of the fourth embodiment of the present invention breaks a conventional SIMD operation into an operation instruction and an SIMD operation, and therefore is able to generate machine language instruction programs corresponding to each of the processors in the first to third embodiments. Furthermore, the compiler of the fourth embodiment is able to generate a program by which SIMD operations are executed for a plurality of types of operations with only SIMD correction instructions in addition to conventional instructions. Avoiding a dramatic increase in the number of instructions means that the machine language is relatively short, therefore reducing the program code size.  
         [1588]    Although the fourth embodiment discloses a compiler that translates a C language program to a machine language instruction program, the program that is translated is not limited to being a C language program, but instead may be any high-order language program. Furthermore, the program that is generated as a result of translating is not limited to being a machine language program, but may be any kind of program that is not a of a higher order than the high-order program. Furthermore, since in the present invention it is sufficient to translate the parts of the program that correspond to an SIMD operation to an ordinary operation instruction and an SIMD correction instruction, it is not always necessary to translate the whole program language. For example, the present invention may be a program conversion apparatus that converts a high-order language program that includes a syntax that corresponds to an SIMD operation to a same or different high-order language program that includes, instead of the syntax, an operation instruction and an SIMD correction instruction. Alternatively, the present invention may be a program conversion apparatus that converts a machine language program that includes an SIMD operation instruction to a same or different machine language program that includes, instead of the SIMD operation, an operation instruction and an SIMD correction instruction.  
         [1589]    Note that any of the programs of fourth embodiment may be recorded on a computer-readable recording medium and the recording medium traded, or the programs may be traded by being directly transferred over a network.  
         [1590]    Furthermore, a program that has operations such as those of any of the first to fourth embodiments of the present invention executed on a computer may be recorded on a computer-readable recording medium and the recording medium traded, or the programs may be traded by being directly transferred over a network.  
         [1591]    Here, the computer-readable recording medium may be, but is not limited to being, a detachable recording medium such as a floppy disk, a (CD) compact disk, an MO (magneto optical), a DVD (digital versatile disk) and a memory card, or a fixed recording medium such as a hard disk or a semiconductor memory.  
         [1592]    Although the present invention has been fully described by way of examples with reference to the accompanying drawings, it is to be noted that various changes and modifications will be apparent to those skilled in the art. Therefore, unless otherwise such changes and modifications depart from the scope of the present invention, they should be construed as being included therein.