Patent Publication Number: US-8533248-B2

Title: Processing unit

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application is based upon and claims the benefit of priority of the prior Japanese Patent Application No. 2009-154890, filed on Jun. 30, 2009, the entire contents of which are incorporated herein by reference. 
     FIELD 
     The present invention relates to a processing unit which calculates mathematical functions. 
     BACKGROUND 
     Processing units which calculate mathematical functions, such as trigonometric functions, are used for various computers, including supercomputers. Such a processing unit normally calculates mathematical functions with approximation, using a Taylor series operation. For example, the mathematical function f(x) is given by the Taylor series operation expression as indicated by  FIG. 22 . 
     In order to calculate a value of the mathematical function f(x) in an arbitrary value (input argument) x using a Taylor series operation as indicated by  FIG. 22 , the calculation of the processing unit is divided into a pre-processing portion and a post-processing portion. The pre-processing portion determines an expansion point x 0  of the Taylor series operation, and a table of the Taylor series coefficient ((1/n!)·f (n) (x 0 )), corresponding to this expansion point. The post-processing portion executes the Taylor series operation in  FIG. 22  using the Taylor series coefficient table. 
     If the mathematical function is a sin function, for example, an expansion point x 0  of the Taylor series operation, as indicated by  FIG. 23 , is determined, and a Taylor series coefficient ((1/n!·f (n) (x 0 )) corresponding to this expansion point is determined. 
     In other words, since a sin function has periodicity, when an integral multiple of π/2 is an expansion point near an input argument x, the Taylor series expansion point x 0  is calculated by a quotient (q) of the input argument x divided by π/2. Then the expansion function and the Taylor series coefficient, corresponding to the remainder when the quotient (q) is divided by “4” (q %4), are determined. 
     If the remainder is “0”, for example, the expansion function is sin (x−xo), the Taylor series coefficient is ((1/n!)·f (n) (x 0 ))=(−1) n /(2*n+1)!. Therefore the Taylor series in  FIG. 22  is Σ(−1) n /(2*n+1)!*(x−x 0 ) (2n+1) . In  FIG. 23 , “**” indicates a power, “!” indicates a factorial, and “*” indicates multiplication. 
     In a prior art, determination of the Taylor series expansion function, data transfer between a floating point register and an integral register and computing processing using an integral computing unit for a mask operation, shift operation and the like execute to determine the Taylor series expansion function and to calculate an input argument for the expansion function before executing the Taylor series operation of a trigonometric function, by using such instructions as a load instruction and shift instruction, and.
     [Patent Document 1] Japanese Patent Application Laid-Open No. 2008-234076 (FIG. 1 to FIG. 7)   [Patent Document 2] Japanese Patent Application Laid-Open No. 2002-063152 (FIG. 1 to FIG. 7)   

     Along with the current demand for faster computer processing, faster speed is also demanded of a Taylor series operation for mathematical functions. In prior art, in order to determine a Taylor series expansion function and to calculate the input argument for the expansion function, a data transfer between a floating point register and an integral register and complicated processing including mask operation and shift operation are required using such instructions as a load instruction and shift instruction. Therefore overhead other than a floating point operation (e.g. integral operation instruction and memory access instruction) is generated. 
     In other words, many instructions are required to process an entire mathematical function operation, therefore factors that drop performance, such as hampering instruction that issues throughput, exist. 
     SUMMARY 
     With the foregoing in view, it is an object of the present invention to provide a processing unit that makes mathematical function operation faster. 
     In order to attain the above objects, in this invention, a Processing unit has floating point multiply-add circuit that receives three inputs, which are rs 1 , rs 2  and rs 3 , and executes floating point multiply-add operation; an OR circuit that computes OR of the most significant bit of output of the floating point multiply-add circuit and the least significant bit rs 2  [0] of the input rs 2 ; a selector that selects either the input rs 1  or the value “1.0”; and an EOR circuit that computes EOR of a bit rs 2  [1] that is one bit higher than the least significant bit of the input rs 2  and the most significant bit of the selector, wherein an expansion point and an expansion function of the Taylor series expansion of a trigonometric function are computed based on a first trigonometric function operation auxiliary instruction for defining the operation of rd=(rs 1 *rs 1 )|(rs 2  [0]&lt;&lt;63), and a second trigonometric function operation auxiliary instruction for defining the operation of rd=((rs 2  [0])? 1.0: rs 1 )^(rs 2  [1]&lt;&lt;63). 
     Further, to achieve the above objects, in this invention, a Processing unit has: a floating point multiply-add circuit that receives three inputs, which are rs 1 , rs 2  and rs 3 , and executes floating point multiply-add operation; an OR circuit that computes OR of the most significant bit of output of the floating point multiply-add circuit and an inversion signal of the least significant bit rs 2  [0] of the input rs 2 ; a selector that selects either the input rs 1  or the value “1.0”; a first EOR circuit that computes EOR of a bit rs 2  [1] that is one bit higher than the least significant bit of the input rs 2 ; and a second EOR circuit that computes EOR of the most significant bit of the selector and output of the first EOR circuit, wherein an expansion point and an expansion function of the Taylor series expansion of a trigonometric function are computed based on a third trigonometric function operation auxiliary instruction for defining the operation of rd=(rs 1 *rs 1 )|((˜rs 2  [0])&lt;&lt;63) and a fourth trigonometric function auxiliary instruction for defining the operation of rd=((rs 2  [0])? rs 1 : 1.0)^((rs 2  [1]^rs 2  [0])&lt;&lt;63)). 
     Since the OR circuit, selector and EOR circuit are disposed in the floating point production sum circuit, and an expansion point and expansion function of the Taylor series expansion of the trigonometric function are computed using the first trigonometric function operation auxiliary instruction for defining the operation of rd=(rs 1 *rs 1 )|(rs 2  [0]&lt;&lt;63) and the second trigonometric function operation auxiliary instruction for defining operation of rd=((rs 2  [0]) ? 1.0: rs 1 )^(rs 2 [1]&lt;&lt;63), or the third trigonometric function operation auxiliary instruction for defining operation of rd=(rs 1 *rs 1 )|((˜rs 2  [0])&lt;&lt;63) and the fourth trigonometric function operation auxiliary instruction for defining operation of rd=((rs 2  [0]) ? rs 1 : 1.0)^((rs 2  [1]^rs 2  [0])&lt;&lt;63)), a number of instructions can be decreased, and high-speed operation can be implemented. 
     Additional objects and advantages of the invention (embodiment) will be set forth in part in the description which follows, and in part will be obvious from the description, or may be learned by practice of the invention. The object and advantages of the invention will be realized and attained by means of the elements and combinations particularly pointed out in the appended claims. 
     It is to be understood that both the foregoing general description and the following detailed description are exemplary and explanatory only and are not restrictive of the invention, as claimed. 
    
    
     
       BRIEF DESCRIPTION OF DRAWINGS 
         FIG. 1  is a circuit diagram depicting the processing unit according to the first embodiment of the present invention; 
         FIG. 2  describes operation auxiliary instructions used in  FIG. 1 ; 
         FIG. 3  is a diagram depicting a computing processing of the operation auxiliary instruction  2  in  FIG. 2 ; 
         FIG. 4  is a diagram depicting a computing processing of the operation auxiliary instruction  3  in  FIG. 2 ; 
         FIG. 5  describes the Taylor series of a trigonometric function; 
         FIG. 6  describes the Taylor series operation in  FIG. 5 ; 
         FIG. 7  describes the instruction strings of the pre-processing of a sin function operation, which uses the trigonometric function operation auxiliary instruction according to the first embodiment; 
         FIG. 8  describes the instruction strings and content of the operation of the first embodiment in  FIG. 7 ; 
         FIG. 9  is a diagram depicting a configuration of a coefficient table set in  FIG. 1  according to an embodiment; 
         FIG. 10  describes instruction strings of a conventional post-processing and instruction strings of post-processing according to the present embodiment based on the assembler description; 
         FIG. 11  describes the relationship between operation codes based on assembler descriptions and the content of operations; 
         FIG. 12  describes a Taylor series operation sequence; 
         FIG. 13  describes a comparison of the number of instructions in the case of a non-SIMD (Single Instruction stream Multiple Data stream); 
         FIG. 14  describes a comparison of the operation throughput in the case of a non-SIMD; 
         FIG. 15  describes a comparison of the number of instructions in the case of an SIMD (Single Instruction stream Multiple Data stream); 
         FIG. 16  describes a comparison of the operation throughput in the case of an SIMD; 
         FIG. 17  is a circuit diagram depicting the processing unit according to the second embodiment of the present invention; 
         FIG. 18  describes the operation auxiliary instructions used in  FIG. 17 ; 
         FIG. 19  describes the Taylor series of the trigonometric function in  FIG. 17 ; 
         FIG. 20  describes the instruction strings of the pre-processing of a cosine function operation which uses a trigonometric function operation auxiliary instruction according to the second embodiment; 
         FIG. 21  describes the instruction strings of the second embodiment in  FIG. 20  and the content of the operations; 
         FIG. 22  is a diagram depicting a conventional Taylor series expansion of the trigonometric function; and 
         FIG. 23  describes a conventional processing to determine an expansion point and expansion function. 
     
    
    
     DESCRIPTION OF EMBODIMENTS 
     Embodiments of the invention will now be described in a sequence of the first embodiment of the processing unit, description on pre-processing, description on post-processing, second embodiment of the processing unit and other embodiments, but the disclosed Processing unit is not limited to these embodiments. 
     (First Embodiment of Processing Unit) 
       FIG. 1  is a circuit diagram of the processing unit according to the first embodiment of the present invention,  FIG. 2  describes operation auxiliary instructions used in  FIG. 1 , and  FIG. 3  and  FIG. 4  are diagrams depicting a computing processing of the operation auxiliary instructions thereof. 
     As  FIG. 1  depicts, dedicated trigonometric function operation auxiliary instructions are provided in the instruction type code  200  as instructions to determine the Taylor series expansion function and to execute processing to calculate the input argument to the expansion function (pre-processing) before executing the Taylor series operation of the trigonometric function depicted in  FIG. 2 . 
       FIG. 2  indicates an example of an assembler instruction of a sin function. The trigonometric function operation auxiliary instruction  2  (ftrismuld) and trigonometric function operation auxiliary instruction  3  (ftrisseld) are auxiliary instructions of the post-processing, and the trigonometric function operation auxiliary instruction  1  (ftrimaddd) is an auxiliary instruction in the later mentioned post-processing. 
     The trigonometric function operation auxiliary instruction  2  (ftrismuld) defines &lt;one register number of multiplication of multiply-add operation: rs 1 &gt;, &lt;the other register number of multiplication of multiply-add operation: rs 2 &gt; and &lt;output register number of operation result of multiply-add operation: rd&gt; in the operation target operand field. 
     The trigonometric function auxiliary instruction  2  (ftrismuld) is an instruction for computing rd=(rs 1 *rs 1 )|(rs 2  [0]&lt;&lt;63). In other words, as  FIG. 3  indicates, the arithmetic operation by the auxiliary instruction  2  executes to square the value of register rs 1 , and shift the data rs [0] in the [0] bit of the register rs 2  to the left by 63 bits (shifted to the most significant bit). The arithmetic operation by the auxiliary instruction  2  further executes to arithmetic OR of the 63 rd  bit of the square of the register rs 1  and rs 2  [0] in the result of shifting this value by 63 bits by the OR circuit  188 , to replace the 63 rd  bit of the square of the value in rs 1  (64 bits) with the OR operation result, and to store this resultant data in the output register rd. 
     The trigonometric function operation auxiliary instruction  3  (ftrisseld), on the other hand, defines &lt;one register number of the multiplication of the multiply-add operation: rs 1 &gt;, &lt;the other register number of the multiplication of the multiply-add operation: rs 2 &gt;, and &lt;output register number of operation result of multiply-add operation: rd&gt; in the operand field. 
     The trigonometric function operation auxiliary instruction  3  (ftrisseld) is an instruction for computing rd=((rs 2  [0]) ? 1.0: rs 1 )^(rs 2  [1]&lt;&lt;63). In other words, as  FIG. 4  depicts, the selector  184  is selected by rs 2  [0] in the [0] bit of the register rs 2 . The value “1.0” (64 bits) and the data in register rs 1  (64 bits) are input to the selector  184 . The selector  184  selects the value “1.0” if rs 2  [0]=1, and the data in register rs 1  if rs 2  [0]=0. Then the EOR circuit  186  computes EOR of the 63 rd  bit of the output of the selector  184  and the value rs 2  [1] in the “1” bit of the register rs 2 , replaces the 63 rd  bit of the output of the selector  184  with the EOR operation result, and stores this result data in the output register rd. 
     The trigonometric function operation auxiliary instruction  1  (ftrimmddd), to be used for the post-processing, defines &lt;one register number of multiplication of multiply-add operation: rs 1 &gt;, &lt;the other register number of multiplication of multiply-add operation: rs 2 &gt;, &lt;degree number of Taylor series: index&gt;, and &lt;output register number of operation result of multiply-add operation: rd&gt;. 
     The trigonometric function operation auxiliary instruction  1  (ftrimaddd) is an instruction for executing rd=(rs 1 *fabs (rs 2 )+T [rs 2  [63]] [index]). As mentioned later, this operation auxiliary instruction extracts the Taylor series coefficient of the degree specified by the index of the expansion function determined by T [rs [63]] from the table, and adds it with the result of multiplying the value in the register rs 1  by the absolute value (fabs (rs 2 )) in the register rs 2 . 
     Referring back to  FIG. 1 , the processing unit  1  has a memory (main memory)  110 , a cache memory  120  which stores a part of the data in the main memory  110 , a renaming register  130 , a register file  140 , a bypass data  150 , multiplexers  152  to  156  and a floating point multiply-add calculator  100 . 
     The register file  140  has all the registers with which the floating point multiply-add calculator  100  uses to execute an operation. The renaming register  130  is disposed for cancelling the reverse dependence of operand data and output dependence. The bypass data  150  is data (operation result data) that is used for bypassing to cancel a data hazard in the instruction pipeline of the processing unit  1 . The register value stored in the entry of the renaming register  130  is shifted to the register file  140  on retire. 
     A coefficient table set (ROM)  160 , selectors  170  and  172  and one input inversion type AND circuit (one input inversion type logical-multiply operation circuit)  174  are used for the later mentioned post-processing. The coefficient table set  160  stores a coefficient of each degree of the Taylor series which is described in  FIG. 9 . In this coefficient table set  160 , a Taylor series coefficient of the degree of corresponding expansion function is read from the selector  170  using the index for specifying a degree and the determined expansion function. 
     A selector  172  is operated by the above mentioned trigonometric function operation auxiliary instruction  1  (ftrimaddd), and outputs either the output of the selector  170  or data in the register rs 3 . A one input inversion type AND circuit  174  is used for post-processing, which is described later, and inverts the flag of the above mentioned trigonometric function operation auxiliary instruction  1  (ftrimaddd), and computes the AND of the inverted output and the 63 rd  bit rs 2  [63] in the register rs 2 . 
     A selector  180  is operated by the above mentioned trigonometric function operation auxiliary instruction  2  (ftrismuld), and outputs either the output of the selector  172  or the value “1.0” to the sum input of the floating point multiply-add calculator  100 . A selector  182  is operated by the above mentioned trigonometric function operation auxiliary instruction  2  (ftrismuld), and outputs either the output of the register rs 2  or the data in the register rs 1  to the multiply input of the floating point multiply-add calculator  100 . 
     A selector  184  is operated by the above mentioned trigonometric function operation auxiliary instruction  3  (ftrisseld). The selector  184  is input the value “1.0” (64 bits) and the data (64 bits) in the register rs 1 , and selects one of these data by the value rs 2  [0] in the “0” bit of the register rs 2 , as described in  FIG. 4 . An EOR circuit  186  computes the EOR of the value in the 63 rd  bit of the output of the selector  184  and the value rs 2  [1] in the “1” bit of the register rs 2 . 
     An OR circuit  188  computes the OR of the 63 rd  bit of the square of the data in the register rs 1  computed by the floating point multiply-add calculator  100  and rs 2  [0] after being shifted for 63 bits, as described in  FIG. 3 . A selector  190  selects either the 63 rd  bit of the data computed by the floating point multiply-add calculator  100  or the output of the OR circuit  188 . A selector  192  is operated by the above mentioned trigonometric function operation auxiliary instruction  3  (ftrisseld), and outputs either the output of the floating point multiply-add calculator  100  or the output of the selector  184 . 
     This processing unit  1  has a normal configuration which has the memory (main memory)  110 , the cache memory  120  which stores a part of the data in the main memory  110 , the renaming register  130 , the register file  140 , the bypass data  150 , the multiplexers  152  to  156  and the floating point multiply-add calculator  100 . 
     In addition to these components, the selectors  180 ,  182 ,  184   190  and  192 , EOR circuit  186  and OR circuit  188  are included for pre-processing. For post-processing as well, the coefficient table set  160 , the selectors  170  and  172  and AND circuit  174  are included. 
     (Description on Pre-Processing) 
       FIG. 5  describes the Taylor series,  FIG. 6  describes the Taylor series operation,  FIG. 7  is a diagram depicting the instruction strings for pre-processing for a sine function operation that uses the trigonometric function operation auxiliary instruction of the present embodiment, and  FIG. 8  describes the instruction strings of the present embodiment in  FIG. 7  and content of the operations. 
     In the pre-processing of executing the Taylor series operation, the expansion point of the Taylor series operation near the input argument is determined so that the Taylor series operation converges at a high degree, and the Taylor series expansion function and the Taylor series coefficient, when the series is expanded at this expansion point, are determined. 
     First the Taylor series expansion expression will be described with reference to  FIG. 5 . As described in  FIG. 23 , the Taylor series expansion expression of the sine function is given by an odd functional expression (y (2n+1) ) of y (=x−x 0 ). The Taylor series expansion expression of the cosine function, on the other hand, is given by an even functional expression (y 2n ) of y (=x−x 0 ). 
     If a coefficient of each degree of the Taylor series is a 3 , . . . a 15 , b 2 , . . . b 14 , a commonality appears in the Taylor series expansion expression of sine(y), cosine(y), −sine(y) and −cosine(y), as depicted in  FIG. 6 . In other words, sine(y) is a polynomial (y 0 −a 3 ·y 2 + . . . −a 15 ·y 14 ) of an even function multiplied by y, cosine(y) is a polynomial (y 0 −b 2 ·y 2 + . . . −b 14 ·y 14 ) multiplied by value “1.0”. In the same manner, −sine(y) is a polynomial (y 0 −a 3 ·y 2 + . . . −a 15 ·y 14 ) multiplied by −y, and −cosine(y) is a polynomial (y 0 −b 2 ·y 2 + . . . −b 14 ·y 14 ) multiplied by value “−1.0”. 
     In order to make the Taylor series operation in the post-processing faster using these relationships, “y” and “1.0” are selectively provided to the post-processing during pre-processing, in addition to computing the expansion point and determining the Taylor series expansion function. 
       FIG. 7  is a diagram depicting the instruction strings in the pre-processing of the sine function operation based on the assembler description according to prior art, and the instruction strings in the pre-processing of the sine function operation based on the assembler description according to the present embodiment. As  FIG. 7  indicates, according to the present embodiment, load instruction, shift instruction, mask instruction or the like in the instruction string which is necessary to the conventional, can be eliminated by using the trigonometric function operation auxiliary instruction  2  (ftrismuld) and the trigonometric function operation auxiliary instruction  3  (ftrisseld). And in this embodiment, such complicated processing as transfer processing, shift operation and mask operation can be omitted, and the operation speed can be increased. 
       FIG. 8  depicts a relationship between operation codes based on assembler descriptions and content of operations, which are described in concrete terms using the configuration in  FIG. 1 . First the input argument mem is loaded to x using the load instruction (lddf). Then bqx=((x*rp 2 )+bg) is computed by the multiply-add instruction fmaddd (floating multiply add double). 
     In this case 1/(π/2) is set in the register rp 2 , and the value “1.5*2**52” is set in the register bg. By this instruction, the floating point multiply-add calculator  100  computes the product of x of the register file  140  and rp 2 , and the sum of this product and bg. 
     Thereby a quotient qx=int (x/(π/2)), which determines the expansion function and sign, is obtained in the lower 51 bits of the mantissa part of the operation result bqx. The reason of adding the value “1.5*2**52”, is to round the decimals by adding a value of the 52th power. In other words, a rounding processing is executed. 
     The qx=bqx−bg is computed by the difference instruction fsubd (floating subtract double). The floating point multiply-add calculator  100  subtracts bg from bqx of the register file  140  to compute the difference qx using this instruction. The decimals are rounded by adding and subtracting bg. 
     Then y=x−(qx*p 2   a ) is computed by the multiply-add instruction fnmsubd (floating negative multiply subtract double). The higher value of “π/2” has been set in the register p 2   a . The floating point multiply-add calculator  100  computes the product of qx of the register file  140  and p 2   a  by this instruction, stores the result in the register, then reads this product and x, and computes the difference. 
     Then y=y−(qx*p 2   b ) is computed by the multiply-add instruction fnmsubd. The lower values of “π/2” has been set in the register p 2   b . The floating point multiply-add calculator  100  computes the product of qx of the register file  140  and p 2   b  by this instruction, stores the result in the register, then reads this product and y, and computes the difference. 
     Thereby (x−x 0 ) of the Taylor series operation is obtained as y. Two multiply-add instructions fnmsubd are used here because the value of π/2 is divided into a higher value and lower value for the computing, so as to increase accuracy in decimals. 
     Then y 2   t =(y*y)|(bqx [0]&lt;&lt;63) is computed by the trigonometric function operation auxiliary instruction  2  (ftrismuld). In other words, the selector  182 , which normally selects rs 2 , is switched by the instruction type code  200  “ftrismuld”, so that rs 1  is output from the selector  182 . As a result, the floating point multiply-add calculator  100  squares the value y of the register rs 1 . To the OR circuit  188 , data rs 2  [0] in the “0” bit of the register rs 2  is input, and the 63 rd  bit of the output y** 2  from the calculator  100  is input. The OR circuit outputs to the 63 rd  bit of the output of the calculator  100  via the selector  190 . 
     In other words, as depicted in  FIG. 3 , following operation is executed by the trigonometric function operation auxiliary instruction  2  (ftrismuld). The data is shifted to the left (shifted to the most significant bit), the OR of the 63 rd  bit of the square of the data in the register rs 1  and the data in rs 2  [0], after being shifted for 63 bits, is computed by the OR circuit  188 , the 63 rd  bit of the square of the data in rs 1  (64 bits) is replaced with the OR operation result, and this resultant data is stored in the output register rd of the register file  140  via the selector  192 . 
     As described in  FIG. 4 , the lower 51 bits of the mantissa part of bqx is a quotient qx, and the least significant (lowest) bit bqx [0] of bqx indicates whether the Taylor series function is a sine function or cosine function, so the 63 rd  bit of y 2   t  indicates the type of Taylor series function (sine or cosine), and 62 to 0 bits are the square data of y (x−x 0 ) described in  FIG. 6 . 
     Then rd=((rs 2  [0])? 1.0: rs 1 )^(rs 2  [1]&lt;&lt;63) is computed by the trigonometric function operation auxiliary instruction  3  (ftrisseld). Here ys=((bqx [0])? 1.0: y)^(bqx [1]&lt;&lt;63) is computed. 
     As indicated in  FIG. 4 , the selector  184  is selected by the value rs 2  [0] in the “0” bit of the register rs 2 . The selector  184 , to which the value “1.0” (64 bits) and the data in the register rs 1  (64 bits) are input, selects the value “1.0” if rs 2  [0] (bqx [0])=1, and selects the data y of the register rs 1  if rs 2  [0] (bqx [0])=0. Then the EOR circuit  186  calculates the EOR of the value in the 63 rd  bit of the output of the selector  184  and the value rs 2  [1] (bqx [1]) in the “1” bit of the register rs 2 , replaces the 63 rd  bit of the output of the selector  184  with the EOR operation result, and stores this resultant data in the output register rd via the selector  192 . 
     The 63 rd  bit of this output ys indicates a sign (+ or −) of the Taylor expansion function, and 62 to 0 bits indicate y (x−x 0 ) or “1.0” described in  FIG. 6 . 
     By disposing the trigonometric function operation auxiliary instructions  2  and  3  and the selectors  180 ,  182 ,  184 ,  190  and  192 , the EOR circuit  186  and the OR circuit  188 , which are operated by these instructions as described above, “y” and “1.0” of the Taylor series operation can be determined in addition to determining the Taylor series expansion function, with less number of instructions. As a result, speed of pre-processing can be increased. 
     (Description on Post-Processing) 
     Now post-processing using the trigonometric function operation auxiliary instruction  1  will be described.  FIG. 9  is a diagram depicting a configuration of the coefficient table set in  FIG. 1  according to an embodiment.  FIG. 10  describes the instruction strings of a conventional post-processing based on the assembler description and instruction strings of post-processing according to the present embodiment.  FIG. 11  depicts the relationship between operation codes based on assembler descriptions and the content of operations. 
     As  FIG. 9  indicates, the coefficient table set  160  has a sine function portion  160 - 1  which stores the coefficients of degrees 1 to 15 of the Taylor series&#39; sine function, and a cosine function portion  160 - 2  which stores the coefficients of degrees 1 to 15 of the Taylor series&#39; cosine function. 
     The selector  170  connected to the coefficient table set  160  selects a sine function or cosine function based on the set number of the coefficient table (bqx [0] and y 2   t [ 63] in  FIG. 4 ). The degree of the coefficient table set  160  is also specified based on the index which indicates the degree number of the Taylor series. 
       FIG. 10  depicts a comparison of the instruction strings of post-processing of the sin function operation based on the assembler description according to a prior art, and the instruction strings of post-processing of the sin function operation based on the assembler description according to the present embodiment. As  FIG. 10  depicts, according to the present embodiment, load instruction of instruction strings which is required by the conventional method can be eliminated by using the trigonometric function operation auxiliary instruction  1  (ftrimaddd), and therefore such complicated processing as transfer processing, shift operation and mask operation can be omitted, and operation speed can be increased. 
       FIG. 11  indicates a relationship between the operation codes based on assembler descriptions and the content of the operation.  FIG. 12  describes the operation sequence of  FIG. 11 . As  FIG. 12  indicates, the operation sequence is from the coefficient having the highest degree, and using this result the coefficient having the second highest degree is computed and added sequentially. In other words, a coefficient having the highest degree (1/15!) is called up, then ((the coefficient of the previous degree*y 2 ) and the coefficient of the current degree) is computed using the trigonometric function operation auxiliary instruction  1  (ftrimaddd). 
     The computing processing in  FIG. 11  will now be described in concrete terms using the configurations in  FIG. 1  and  FIG. 9 . First in accordance with the trigonometric function operation auxiliary instruction  1  (ftrimaddd), rd=((rs 1 *fabs(rs 2 )+T [rs 2  [63]] [index]) is executed. The rs 1 =co=0.0 is set first, and the coefficient table set  160  is accessed by rs 2  [63]=y 2   t [ 63] and index=7 (degree 15), then the coefficient (1/15!) of the degree 15 of the sine function is extracted and is input to the calculator  100  via the selector  172 . 
     Since the calculator  100  is set as rs 1 =co=0.0, the computing result r becomes r=1/15!, as depicted in  FIG. 12 . 
     Then the trigonometric function operation auxiliary instruction  1  (ftrimaddd) and the operation codes r, y 2   t,  6 and r are specified. The Taylor series coefficient of a degree specified by index=6 of the expansion function determined by T [y 2   t [ 63]] is extracted from the table  160  via the selectors  170  and  172 , using the operation auxiliary instruction  1 . 
     The 63 rd  bit of rs 2 =y 2   t , on the other hand, is input to the AND circuit  174 . Since flag “1” of the trigonometric function operation auxiliary instruction  1  (ftrimaddd) has been input to the inversion input of the AND circuit  174 , the output of the AND circuit  174  is “0”. Therefore the 63 rd  bit of rs 2 =y 2   t  is “0”, which is input to the calculator  100  via the selector  182 . In the register rs 1 , on the other hand, the above mentioned r has been stored, so the calculator  100  computes (r=r*y 2   t [ 62:0]+coefficient), and stores the result in the register file  140  as r. 
     In the same manner, the same operation is performed by the trigonometric function operation auxiliary instruction  1  (ftrimaddd) and the operation code, while decreasing the degree as 5, 4, 3, 2, 1 and 0 sequentially. Thereby the computing result r in the final step indicated in  FIG. 12  is obtained. 
     Then the multiply instruction (fmuld: multiply) and r, and rs 2 =ys and r, are specified. By this multiply instruction, the calculator  100  computes r=r*ys. The ys is y or 1.0, or −y or −1.0, so r=r*ys computed by the calculator  100  becomes the Taylor expansion series described in  FIG. 6 . 
     This result r is stored in the entry mem of the register file  140  by the store instruction (stdf). 
     By the trigonometric function operation auxiliary instruction  1 , the coefficient table set  160 , selectors  170  and  172  and the AND circuit  174 , which are operated by this instruction as described above, the Taylor series expansion function can be computed with less number of instructions, and as a result, speed of post-processing can be increased. 
     Now comparing a number of instructions and performance between the present embodiment and prior art.  FIG. 13  indicates a comparison of the number of instructions in the case of a non-SIMD (Single Instruction stream Multiple Data stream).  FIG. 14  depicts a comparison of the operation throughput in the case of a non-SIMD. 
     As  FIG. 13  indicates, there are many load instructions (ld), store instructions (st), and integral operation instructions (int) in the case of prior art. However, in the case of the present embodiment, the load instructions (ld), store instructions (st) and integral operation instructions (Int) are hardly used, and a number of instructions decreases to less than half (40%). 
     As  FIG. 14  indicates, when only the trigonometric functions are vector-operated, then operation throughput improves 1.4 times that of prior art. And when trigonometric functions are operated in parallel with other operations, the ld/st pipe (pipeline of load instruction/store instruction, which are memory access instructions) is not consumed, so operation throughput can be improved even more so. Since the number of instructions is small and instructions are limited to floating point operation instructions, appropriate instruction scheduling can be easily performed with software pipelining, which improves performance. 
       FIG. 15  depicts a comparison of the number of instructions in the case of an SIMD (Single Instruction stream Multiple Data stream).  FIG. 16  depicts a comparison of the operation throughput in the case of an SIMD. 
     As  FIG. 15  depicts, there are many load instructions (ld), store instructions (st) and integral operation instructions (Int) in the case of prior art. However, in the case of the present embodiment, the load instructions (ld), store instructions (st) and integral operation instructions (Int) are hardly used, and a number of instructions decreases to about ¼ (27%). Since the integral operation instructions are not included, the present embodiment is suitable for an SIMD. 
     As  FIG. 15  indicates, when only the trigonometric functions are vector-operated, then operation throughput improves 2.1 times that of prior art. 
     (Second Embodiment of Processing Unit) 
       FIG. 17  is a circuit diagram of the second embodiment of the processing unit of the present invention,  FIG. 18  describes an expansion point and expansion function of the Taylor series of the cosine function operation used for  FIG. 17 .  FIG. 19  describes the cosine operation auxiliary instruction used for  FIG. 17 .  FIG. 20  and  FIG. 21  describe the computing processing of the operation auxiliary instruction. 
     In  FIG. 17 , composing elements the same as  FIG. 1  are denoted with a same reference numbers. The difference from  FIG. 1  is that an inversion circuit  196  is disposed in the input stage of the OR circuit  190 , and an EOR circuit  194  is disposed in the input stage of the EOR circuit  186 . Also as  FIG. 17  depicts, a dedicated trigonometric function operation auxiliary instruction is provided in the instruction type code  200 , as an instruction to determine the Taylor series expansion function and to calculate an input argument to this expansion function (pre-processing step) before executing the Taylor series operation of a trigonometric function (cosine function) indicated in  FIG. 18 . 
     In  FIG. 18 , the definition of an expansion point and a Taylor series expression of the expansion function are the same as the case of the sin function in  FIG. 23 , but the expansion function corresponding to the value of the remainder of the quotient q is different from  FIG. 23 . 
       FIG. 19  indicates an example of the assembler instruction for a cosine function, and the trigonometric function operation auxiliary instruction  4  (ftricmuld) and the trigonometric function operation auxiliary instruction  5  (ftricseld) are used as the auxiliary instructions for the pre-process. In the same manner, the trigonometric function operation auxiliary instruction  1  (ftrimaddd) in  FIG. 2  is used as the auxiliary instruction for the post-process. 
     The trigonometric function operation auxiliary instruction  4  (ftricmuld) defines &lt;one register number of multiplication of multiply-add operation: rs 1 &gt;, &lt;the other register number of multiplication of multiply-add operation: rs 2 &gt; and &lt;output register number of operation result of multiply-add operation: rd&gt; in the operand field. 
     And the trigonometric function operation auxiliary instruction  4  (ftricmuld) is an instruction to compute rd=(rs 1 *rs 1 )|(˜rs 2  [0]&lt;&lt;63). In other words, as same as  FIG. 3 , the trigonometric function operation auxiliary instruction  4  (ftricmuld) executes following process. The value of the register rs 1  is squared, and the bitwise NOT (by the inversion circuit  196 ) of the data rs 2  [0] in the “0” bit of the register rs 2  is shifted to the left by 63 bits (shifted to the most significant bit), the OR of the 63 rd  bit of the square of the data in the register rs 1  and rs 2  [0] after being shifted 63 bits is computed, the 63 rd  bit of the square of the data in rs 1  (64 bits) is replaced with the OR operation result, and this resultant data is stored in the output register rd. 
     The trigonometric function operation auxiliary instruction  5  (ftricseld), on the other hand, defines &lt;one register number of multiplication of multiply-add operation: rs 1 &gt;, &lt;the other register number of multiplication of multiply-add operation: rs 2 &gt; and &lt;output register number of operation result of multiply-add operation: rd&gt; in the operand field. 
     And the trigonometric function operation auxiliary instruction  5  (ftricseld) is an instruction to compute rd=((rs 2  [0])? rs 1 : 1.0)^((rs 2  [1] rs 2  [0])&lt;&lt;63). In other words, as same as  FIG. 4 , the trigonometric function operation auxiliary instruction  5  (ftricseld) executes following process. The selector  184  is selected by the value rs 2  [0] of the “0” bit of the register rs 2 . The selector  184 , to which the value “1.0” (64 bits) and data in the register rs 1  (64 bits) are input, selects the value “1.0” if rs 2  [0]=0, and selects the data in the register rs 1  if rs 2  [0]=1. Then the EOR circuit  194  computes EOR of rs 2  [1] and rs 2  [0] in the “1” bit and “0” bit of register rs 2 . Then the EOR circuit  186  computes the EOR of the value in the 63 rd  bit of the output of the selector  184  and the output of the EOR circuit  194 , then the 63 rd  bit of the output of the selector  184  is replaced with the EOR operation result, and this resultant data is stored in the output register rd. 
       FIG. 20  compares the instruction strings of the pre-processing of a cosine function operation based on prior art and the instruction strings of the pre-processing of the cosine function operation based on the assembler description according to the present embodiment. As  FIG. 20  indicates, according to the present embodiment, load instruction, shift instructions, mask instructions or the like in instruction strings which are required by the conventional method can be eliminated by using the trigonometric function operation auxiliary instruction  4  (ftricmuld) and the trigonometric function operation auxiliary instruction  5  (ftricseld), therefore such complicated processing as transfer processing, shift operation and mask operation can be omitted, and speed of operation can be increased. 
       FIG. 21  describes in concrete terms the relationship between operation codes based on the assembler descriptions and the content of operation using the configuration in  FIG. 17 . First as same as the case of the sine function in  FIG. 8 , the input argument mem is loaded into x by the load instruction (lddf). 
     Then bqx=((x*rp 2 )+bg) is computed by the multiply-add instruction (fmaddd: multiply &amp; add). In this case, 1/(π/2) has been set in the register rp 2 , and the value “1.5*2**52” has been set in the register bg. By this instruction, the floating point multiply-add calculator  100  computes the product of x of the register file  140  and rp 2 , and the sum of this product and bg. 
     Thereby a quotient qx=int (x/(π/2)), which determines the expansion function and sign, is obtained in the lower 51 bits of the mantissa part of the operation result bqx. The reason to add the value “1.5*2**52” means that when a value of the 52 nd  power is added, the decimals are rounded, in other words, rounding processing is executed. 
     Then qx=bqx−bg is computed by the difference instruction (fsubd: subtract). The floating point multiply-add calculator  100  subtracts bg from bqx of the register file  140  to compute the difference qx using this instruction. The decimals are rounded by bg being added and subtracted. 
     Then y=x−(qx*p 2   a ) is computed by the multiply-add instruction (fnmsubd: multiply &amp; subtract). The higher value of “π/2” has been set in the register p 2   a . The floating point multiply-add calculator  100  computes the product of qx of the register file  140  and p 2   a  by this instruction, stores the result in the register, then reads this product and x, and computes the difference. 
     Then y=y−(qx*p 2   b ) is computed by the multiply-add instruction (fnmsubd: multiply &amp; subtract). The lower value of “π/2” has been set in the register p 2   b . The floating point multiply-add calculator  100  computes the product of qx of the register file  140  and p 2   b  by this instruction, stores [this resultant data] in the register, then reads this product and y, and computes the difference. 
     Thereby (x−x 0 ) of the Taylor series operation is obtained as y. Two multiply-add instructions fnmsubd are used here, because the value of π/2 is divided into a higher value and lower value for computing, so as to increase accuracy in decimals. 
     The operation thus far is the same as the sine function in  FIG. 8 . Then y 2   t =(y*y)|(˜bqx [0]&lt;&lt;63) is computed by the trigonometric function operation auxiliary instruction  4  (ftricmuld). In other words, the selector  182 , which normally selects rs 2 , is switched by the instruction type code  200  “ftricmuld”, and outputs rs 1  from the selector  182 . As a result, the floating point multiply-add calculator  100  squares the value y in the register rs 1 . 
     To the OR circuit  188 , the bit (bitwise NOT) as a result of inverting the data rs 2  [0] in the “0” bit of the register rs 2  by the inversion circuit  196  is input, and the 63 rd  bit of the output y** 2  from the calculator  100  is input. The OR circuit  188  outputs the resultant data to the 63 rd  bit of the output of the calculator  100  via the selector  190 . 
     In other words, as indicated in  FIG. 3 , the following operations are executed. The data is shifted to the left (shifted to the most significant bit). The OR circuit  188  executes the OR operation of the 63 rd  bit of the square of the data in the register rs 1  and rs 2  [0] after being shifted for 63 bits and inverted, and replaces the 63 rd  bit of the square of the data in rs 1  (64 bits) with the OR operation result. And this resultant data is stored, via the selector  192 , in the output register rd of the register file  140 . 
     As described in  FIG. 4 , the lower 51 bits of the mantissa part of bqx is a quotient qx and the least significant bit bqx [0] of bqx indicates whether the Taylor expansion function is a sine function or cosine function, so the 63 rd  bit of y 2   t  indicates the type of the Taylor expansion function (sin or cos), and 62 to 0 bits are the square data of y (x−x 0 ) described in  FIG. 6 . 
     Then rd=((rs 2  [0] (=bqx [0]))? rs 1  (=y): 1.0)^((rs 2  [1]^rs 2  [0])&lt;&lt;63) is computed by the trigonometric function operation auxiliary instruction  5  (ftricseld). Here ys=((bqx [0])? y: 1.0)^((bqx [1]^bqx [0])&lt;&lt;63) is computed. 
     As depicted in  FIG. 4 , the selector  184  is selected by the value rs 2  [0] in the “0” bit of the register rs 2 . The selector  184 , to which the value “1.0” (64 bits) and the data in the register rs 1  (64 bits) are input, selects the value “1.0” if rs 2  [0] (bqx [0])=0, and selects the data y in the register rs 1  if rs 2  [0] (bqx [0])=1. 
     Then the EOR circuit  194  computes the EOR of the values rs 2  [1] (bqx [1]) and rs 2  [0] (bqx [0]) of the “1” bit and “0” bit of the register rs 2 . Then the EOR circuit  186  computes the EOR of the value in the 63 rd  bit of the output of the selector  184  and the output of the EOR circuit  194 , replaces the 63 rd  bit of the output of the selector  184  with the EOR operation result, and stores this resultant data in the output register rd via the selector  192 . 
     The 63 rd  bit of this output ys indicates a sign (+ or −) of the Taylor expansion function, and 62 to 0 bits indicate y (x−x 0 ) or “1.0” described in  FIG. 6 . In the case of a cosine function, the remainder of q, as indicated in  FIG. 18 , corresponded to the expansion function, and “y” and “1.0” in  FIG. 6  are specified by adding the above mentioned inversion circuit  196  and the EOR circuit  194 . 
     By the trigonometric function operation auxiliary instructions  4  and  5 , and the selectors  180 ,  182 ,  184 ,  190  and  192 , EOR circuits  186  and  194 , OR circuit  188  and inversion circuit  196 , which are operated by these instructions, as described above, “y” and “1.0” of the Taylor series operation can be determined in addition to determining the Taylor series expansion function with less number of instructions. As a result, speed of pre-processing can be increased. 
     The post-processing is the same as the embodiment in  FIG. 9  to  FIG. 12 . 
     Other Embodiments 
     In the above embodiment, the auxiliary instructions for increasing speed, even in post-processing, are used, but the present invention can also be applied in the case of not using such auxiliary instructions. According to the configuration in  FIG. 17 , the sine function can also be computed in the same manner, and a configuration to increase speed for both the sine function and cosine function can also be used by using the auxiliary instructions  2  and  3  of the sine function. The instruction strings may be constituted by an SIDM. 
     The present invention was described above using the embodiments, but the present invention can be modified in many ways within the scope of the spirit of the present invention, and these variant forms shall not be excluded from the scope of the present invention. 
     Since the OR circuit, selector and EOR circuit are disposed in the floating point multiply-add circuit, and an expansion point and expansion function of the Taylor series expansion of the trigonometric function are computed using the first trigonometric function operation auxiliary instruction for defining the operating of rd=(rs 1 *rs 1 )|(˜rs 2  [0]&lt;&lt;63) and the second trigonometric function operation auxiliary instruction for defining the operation of rd=((rs 2  [0]) ? 1.0: rs 1 )^(rs 2  [1]&lt;&lt;63), or the third trigonometric function operation auxiliary instruction for defining the operation of rd=(rs 1 *rs 1 )|((˜rs 2  [0])&lt;&lt; 63 ) and the fourth trigonometric function operation auxiliary instruction for defining the operation of rd=((rs 2  [0]) ? rs 1 : 1.0)^((rs 2  [1]^rs 2  [0])&lt;&lt;63), a number of instructions can be decreased, and high-speed operation can be implemented. 
     All examples and conditional language recited herein are intended for pedagogical purposes to aid the reader in understanding the principles of the invention and the concepts contributed by the inventor to furthering the art, and are to be construed as being without limitation to such specifically recited examples and conditions, nor does the organization of such examples in the specification relate to a showing of the superiority and inferiority of the invention. Although the embodiments of the present inventions have been described in detail, it should be understood that the various changes, substitutions, and alterations could be made hereto without departing from the spirit and scope of the invention.