Home | History | Annotate | Download | only in sunspider-0.9.1
      1 /*
      2  * Copyright (C) Rich Moore.  All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY CONTRIBUTORS ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 /////. Start CORDIC
     27 
     28 var AG_CONST = 0.6072529350;
     29 
     30 function FIXED(X)
     31 {
     32   return X * 65536.0;
     33 }
     34 
     35 function FLOAT(X)
     36 {
     37   return X / 65536.0;
     38 }
     39 
     40 function DEG2RAD(X)
     41 {
     42   return 0.017453 * (X);
     43 }
     44 
     45 var Angles = [
     46   FIXED(45.0), FIXED(26.565), FIXED(14.0362), FIXED(7.12502),
     47   FIXED(3.57633), FIXED(1.78991), FIXED(0.895174), FIXED(0.447614),
     48   FIXED(0.223811), FIXED(0.111906), FIXED(0.055953),
     49   FIXED(0.027977)
     50               ];
     51 
     52 
     53 function cordicsincos() {
     54     var X;
     55     var Y;
     56     var TargetAngle;
     57     var CurrAngle;
     58     var Step;
     59 
     60     X = FIXED(AG_CONST);         /* AG_CONST * cos(0) */
     61     Y = 0;                       /* AG_CONST * sin(0) */
     62 
     63     TargetAngle = FIXED(28.027);
     64     CurrAngle = 0;
     65     for (Step = 0; Step < 12; Step++) {
     66         var NewX;
     67         if (TargetAngle > CurrAngle) {
     68             NewX = X - (Y >> Step);
     69             Y = (X >> Step) + Y;
     70             X = NewX;
     71             CurrAngle += Angles[Step];
     72         } else {
     73             NewX = X + (Y >> Step);
     74             Y = -(X >> Step) + Y;
     75             X = NewX;
     76             CurrAngle -= Angles[Step];
     77         }
     78     }
     79 }
     80 
     81 ///// End CORDIC
     82 
     83 function cordic( runs ) {
     84   var start = new Date();
     85 
     86   for ( var i = 0 ; i < runs ; i++ ) {
     87       cordicsincos();
     88   }
     89 
     90   var end = new Date();
     91 
     92   return end.getTime() - start.getTime();
     93 }
     94 
     95 cordic(25000);
     96