js/src/jit-test/tests/sunspider/check-math-cordic.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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  */
    26 /////. Start CORDIC
    28 var AG_CONST = 0.6072529350;
    30 function FIXED(X)
    31 {
    32   return X * 65536.0;
    33 }
    35 function FLOAT(X)
    36 {
    37   return X / 65536.0;
    38 }
    40 function DEG2RAD(X)
    41 {
    42   return 0.017453 * (X);
    43 }
    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               ];
    53 function cordicsincos() {
    54     var X;
    55     var Y;
    56     var TargetAngle;
    57     var CurrAngle;
    58     var Step;
    60     X = FIXED(AG_CONST);         /* AG_CONST * cos(0) */
    61     Y = 0;                       /* AG_CONST * sin(0) */
    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     return CurrAngle;
    80 }
    82 ///// End CORDIC
    84 function cordic( runs ) {
    85   var actual;
    87   for ( var i = 0 ; i < runs ; i++ ) {
    88     actual = cordicsincos();
    89   }
    91   assertEq(actual, 1834995.3515519998)
    92 }
    94 cordic(25000);

mercurial