
/*
*  Copyright (C) 2008-2009 Advanced Micro Devices, Inc. All Rights Reserved.
*
*  This file is part of libacml_mv.
*
*  libacml_mv is free software; you can redistribute it and/or
*  modify it under the terms of the GNU Lesser General Public
*  License as published by the Free Software Foundation; either
*  version 2.1 of the License, or (at your option) any later version.
*
*  libacml_mv is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*  Lesser General Public License for more details.
*
*  You should have received a copy of the GNU Lesser General Public
*  License along with libacml_mv.  If not, see
*  <http://www.gnu.org/licenses/>.
*
*/



#include "../inc/libm_amd.h"
#include "../inc/libm_util_amd.h"

#define USE_VALF_WITH_FLAGS
#define USE_NAN_WITH_FLAGS
#define USE_SCALEDOUBLE_1
#define USE_SCALEDOWNDOUBLE
#define USE_HANDLE_ERRORF
#include "../inc/libm_inlines_amd.h"
#undef USE_VALF_WITH_FLAGS
#undef USE_NAN_WITH_FLAGS
#undef USE_SCALEDOUBLE_1
#undef USE_SCALEDOWNDOUBLE
#undef USE_HANDLE_ERRORF

#include "../inc/libm_errno_amd.h"

#ifndef WINDOWS
/* Deal with errno for out-of-range arguments
   (only used when _LIB_VERSION is _SVID_) */
static inline float retval_errno_edom(float x, float y)
{
  struct exception exc;
  exc.arg1 = (double)x;
  exc.arg2 = (double)y;
  exc.type = DOMAIN;
  exc.name = (char *)"atan2f";
  exc.retval = HUGE;
  if (!matherr(&exc))
    {
      (void)fputs("atan2f: DOMAIN error\n", stderr);
      __set_errno(EDOM);
    }
  return exc.retval;
}
#endif

#ifdef WINDOWS
#pragma function(atan2f)
#endif

float FN_PROTOTYPE(atan2f)(float fy, float fx)
{
  /* Array atan_jby256 contains precomputed values of atan(j/256),
     for j = 16, 17, ..., 256. */

  static const double atan_jby256[  241] = {
    6.24188099959573430842e-02,  /* 0x3faff55bb72cfde9 */
    6.63088949198234745008e-02,  /* 0x3fb0f99ea71d52a6 */
    7.01969710718705064423e-02,  /* 0x3fb1f86dbf082d58 */
    7.40829225490337306415e-02,  /* 0x3fb2f719318a4a9a */
    7.79666338315423007588e-02,  /* 0x3fb3f59f0e7c559d */
    8.18479898030765457007e-02,  /* 0x3fb4f3fd677292fb */
    8.57268757707448092464e-02,  /* 0x3fb5f2324fd2d7b2 */
    8.96031774848717321724e-02,  /* 0x3fb6f03bdcea4b0c */
    9.34767811585894559112e-02,  /* 0x3fb7ee182602f10e */
    9.73475734872236708739e-02,  /* 0x3fb8ebc54478fb28 */
    1.01215441667466668485e-01,  /* 0x3fb9e94153cfdcf1 */
    1.05080273416329528224e-01,  /* 0x3fbae68a71c722b8 */
    1.08941956989865793015e-01,  /* 0x3fbbe39ebe6f07c3 */
    1.12800381201659388752e-01,  /* 0x3fbce07c5c3cca32 */
    1.16655435441069349478e-01,  /* 0x3fbddd21701eba6e */
    1.20507009691224548087e-01,  /* 0x3fbed98c2190043a */
    1.24354994546761424279e-01,  /* 0x3fbfd5ba9aac2f6d */
    1.28199281231298117811e-01,  /* 0x3fc068d584212b3d */
    1.32039761614638734288e-01,  /* 0x3fc0e6adccf40881 */
    1.35876328229701304195e-01,  /* 0x3fc1646541060850 */
    1.39708874289163620386e-01,  /* 0x3fc1e1fafb043726 */
    1.43537293701821222491e-01,  /* 0x3fc25f6e171a535c */
    1.47361481088651630200e-01,  /* 0x3fc2dcbdb2fba1ff */
    1.51181331798580037562e-01,  /* 0x3fc359e8edeb99a3 */
    1.54996741923940972718e-01,  /* 0x3fc3d6eee8c6626c */
    1.58807608315631065832e-01,  /* 0x3fc453cec6092a9e */
    1.62613828597948567589e-01,  /* 0x3fc4d087a9da4f17 */
    1.66415301183114927586e-01,  /* 0x3fc54d18ba11570a */
    1.70211925285474380276e-01,  /* 0x3fc5c9811e3ec269 */
    1.74003600935367680469e-01,  /* 0x3fc645bfffb3aa73 */
    1.77790228992676047071e-01,  /* 0x3fc6c1d4898933d8 */
    1.81571711160032150945e-01,  /* 0x3fc73dbde8a7d201 */
    1.85347949995694760705e-01,  /* 0x3fc7b97b4bce5b02 */
    1.89118848926083965578e-01,  /* 0x3fc8350be398ebc7 */
    1.92884312257974643856e-01,  /* 0x3fc8b06ee2879c28 */
    1.96644245190344985064e-01,  /* 0x3fc92ba37d050271 */
    2.00398553825878511514e-01,  /* 0x3fc9a6a8e96c8626 */
    2.04147145182116990236e-01,  /* 0x3fca217e601081a5 */
    2.07889927202262986272e-01,  /* 0x3fca9c231b403279 */
    2.11626808765629753628e-01,  /* 0x3fcb1696574d780b */
    2.15357699697738047551e-01,  /* 0x3fcb90d7529260a2 */
    2.19082510780057748701e-01,  /* 0x3fcc0ae54d768466 */
    2.22801153759394493514e-01,  /* 0x3fcc84bf8a742e6d */
    2.26513541356919617664e-01,  /* 0x3fccfe654e1d5395 */
    2.30219587276843717927e-01,  /* 0x3fcd77d5df205736 */
    2.33919206214733416127e-01,  /* 0x3fcdf110864c9d9d */
    2.37612313865471241892e-01,  /* 0x3fce6a148e96ec4d */
    2.41298826930858800743e-01,  /* 0x3fcee2e1451d980c */
    2.44978663126864143473e-01,  /* 0x3fcf5b75f92c80dd */
    2.48651741190513253521e-01,  /* 0x3fcfd3d1fc40dbe4 */
    2.52317980886427151166e-01,  /* 0x3fd025fa510665b5 */
    2.55977303013005474952e-01,  /* 0x3fd061eea03d6290 */
    2.59629629408257511791e-01,  /* 0x3fd09dc597d86362 */
    2.63274882955282396590e-01,  /* 0x3fd0d97ee509acb3 */
    2.66912987587400396539e-01,  /* 0x3fd1151a362431c9 */
    2.70543868292936529052e-01,  /* 0x3fd150973a9ce546 */
    2.74167451119658789338e-01,  /* 0x3fd18bf5a30bf178 */
    2.77783663178873208022e-01,  /* 0x3fd1c735212dd883 */
    2.81392432649178403370e-01,  /* 0x3fd2025567e47c95 */
    2.84993688779881237938e-01,  /* 0x3fd23d562b381041 */
    2.88587361894077354396e-01,  /* 0x3fd278372057ef45 */
    2.92173383391398755471e-01,  /* 0x3fd2b2f7fd9b5fe2 */
    2.95751685750431536626e-01,  /* 0x3fd2ed987a823cfe */
    2.99322202530807379706e-01,  /* 0x3fd328184fb58951 */
    3.02884868374971361060e-01,  /* 0x3fd362773707ebcb */
    3.06439619009630070945e-01,  /* 0x3fd39cb4eb76157b */
    3.09986391246883430384e-01,  /* 0x3fd3d6d129271134 */
    3.13525122985043869228e-01,  /* 0x3fd410cbad6c7d32 */
    3.17055753209146973237e-01,  /* 0x3fd44aa436c2af09 */
    3.20578221991156986359e-01,  /* 0x3fd4845a84d0c21b */
    3.24092470489871664618e-01,  /* 0x3fd4bdee586890e6 */
    3.27598440950530811477e-01,  /* 0x3fd4f75f73869978 */
    3.31096076704132047386e-01,  /* 0x3fd530ad9951cd49 */
    3.34585322166458920545e-01,  /* 0x3fd569d88e1b4cd7 */
    3.38066122836825466713e-01,  /* 0x3fd5a2e0175e0f4e */
    3.41538425296541714449e-01,  /* 0x3fd5dbc3fbbe768d */
    3.45002177207105076295e-01,  /* 0x3fd614840309cfe1 */
    3.48457327308122011278e-01,  /* 0x3fd64d1ff635c1c5 */
    3.51903825414964732676e-01,  /* 0x3fd685979f5fa6fd */
    3.55341622416168290144e-01,  /* 0x3fd6bdeac9cbd76c */
    3.58770670270572189509e-01,  /* 0x3fd6f61941e4def0 */
    3.62190922004212156882e-01,  /* 0x3fd72e22d53aa2a9 */
    3.65602331706966821034e-01,  /* 0x3fd7660752817501 */
    3.69004854528964421068e-01,  /* 0x3fd79dc6899118d1 */
    3.72398446676754202311e-01,  /* 0x3fd7d5604b63b3f7 */
    3.75783065409248884237e-01,  /* 0x3fd80cd46a14b1d0 */
    3.79158669033441808605e-01,  /* 0x3fd84422b8df95d7 */
    3.82525216899905096124e-01,  /* 0x3fd87b4b0c1ebedb */
    3.85882669398073752109e-01,  /* 0x3fd8b24d394a1b25 */
    3.89230987951320717144e-01,  /* 0x3fd8e92916f5cde8 */
    3.92570135011828580396e-01,  /* 0x3fd91fde7cd0c662 */
    3.95900074055262896078e-01,  /* 0x3fd9566d43a34907 */
    3.99220769575252543149e-01,  /* 0x3fd98cd5454d6b18 */
    4.02532187077682512832e-01,  /* 0x3fd9c3165cc58107 */
    4.05834293074804064450e-01,  /* 0x3fd9f93066168001 */
    4.09127055079168300278e-01,  /* 0x3fda2f233e5e530b */
    4.12410441597387267265e-01,  /* 0x3fda64eec3cc23fc */
    4.15684422123729413467e-01,  /* 0x3fda9a92d59e98cf */
    4.18948967133552840902e-01,  /* 0x3fdad00f5422058b */
    4.22204048076583571270e-01,  /* 0x3fdb056420ae9343 */
    4.25449637370042266227e-01,  /* 0x3fdb3a911da65c6c */
    4.28685708391625730496e-01,  /* 0x3fdb6f962e737efb */
    4.31912235472348193799e-01,  /* 0x3fdba473378624a5 */
    4.35129193889246812521e-01,  /* 0x3fdbd9281e528191 */
    4.38336559857957774877e-01,  /* 0x3fdc0db4c94ec9ef */
    4.41534310525166673322e-01,  /* 0x3fdc42191ff11eb6 */
    4.44722423960939305942e-01,  /* 0x3fdc76550aad71f8 */
    4.47900879150937292206e-01,  /* 0x3fdcaa6872f3631b */
    4.51069655988523443568e-01,  /* 0x3fdcde53432c1350 */
    4.54228735266762495559e-01,  /* 0x3fdd121566b7f2ad */
    4.57378098670320809571e-01,  /* 0x3fdd45aec9ec862b */
    4.60517728767271039558e-01,  /* 0x3fdd791f5a1226f4 */
    4.63647609000806093515e-01,  /* 0x3fddac670561bb4f */
    4.66767723680866497560e-01,  /* 0x3fdddf85bb026974 */
    4.69878057975686880265e-01,  /* 0x3fde127b6b0744af */
    4.72978597903265574054e-01,  /* 0x3fde4548066cf51a */
    4.76069330322761219421e-01,  /* 0x3fde77eb7f175a34 */
    4.79150242925822533735e-01,  /* 0x3fdeaa65c7cf28c4 */
    4.82221324227853687105e-01,  /* 0x3fdedcb6d43f8434 */
    4.85282563559221225002e-01,  /* 0x3fdf0ede98f393cf */
    4.88333951056405479729e-01,  /* 0x3fdf40dd0b541417 */
    4.91375477653101910835e-01,  /* 0x3fdf72b221a4e495 */
    4.94407135071275316562e-01,  /* 0x3fdfa45dd3029258 */
    4.97428915812172245392e-01,  /* 0x3fdfd5e0175fdf83 */
    5.00440813147294050189e-01,  /* 0x3fe0039c73c1a40b */
    5.03442821109336358099e-01,  /* 0x3fe01c341e82422d */
    5.06434934483096732549e-01,  /* 0x3fe034b709250488 */
    5.09417148796356245022e-01,  /* 0x3fe04d25314342e5 */
    5.12389460310737621107e-01,  /* 0x3fe0657e94db30cf */
    5.15351866012543347040e-01,  /* 0x3fe07dc3324e9b38 */
    5.18304363603577900044e-01,  /* 0x3fe095f30861a58f */
    5.21246951491958210312e-01,  /* 0x3fe0ae0e1639866c */
    5.24179628782913242802e-01,  /* 0x3fe0c6145b5b43da */
    5.27102395269579471204e-01,  /* 0x3fe0de05d7aa6f7c */
    5.30015251423793132268e-01,  /* 0x3fe0f5e28b67e295 */
    5.32918198386882147055e-01,  /* 0x3fe10daa77307a0d */
    5.35811237960463593311e-01,  /* 0x3fe1255d9bfbd2a8 */
    5.38694372597246617929e-01,  /* 0x3fe13cfbfb1b056e */
    5.41567605391844897333e-01,  /* 0x3fe1548596376469 */
    5.44430940071603086672e-01,  /* 0x3fe16bfa6f5137e1 */
    5.47284380987436924748e-01,  /* 0x3fe1835a88be7c13 */
    5.50127933104692989907e-01,  /* 0x3fe19aa5e5299f99 */
    5.52961601994028217888e-01,  /* 0x3fe1b1dc87904284 */
    5.55785393822313511514e-01,  /* 0x3fe1c8fe7341f64f */
    5.58599315343562330405e-01,  /* 0x3fe1e00babdefeb3 */
    5.61403373889889367732e-01,  /* 0x3fe1f7043557138a */
    5.64197577362497537656e-01,  /* 0x3fe20de813e823b1 */
    5.66981934222700489912e-01,  /* 0x3fe224b74c1d192a */
    5.69756453482978431069e-01,  /* 0x3fe23b71e2cc9e6a */
    5.72521144698072359525e-01,  /* 0x3fe25217dd17e501 */
    5.75276017956117824426e-01,  /* 0x3fe268a940696da6 */
    5.78021083869819540801e-01,  /* 0x3fe27f261273d1b3 */
    5.80756353567670302596e-01,  /* 0x3fe2958e59308e30 */
    5.83481838685214859730e-01,  /* 0x3fe2abe21aded073 */
    5.86197551356360535557e-01,  /* 0x3fe2c2215e024465 */
    5.88903504204738026395e-01,  /* 0x3fe2d84c2961e48b */
    5.91599710335111383941e-01,  /* 0x3fe2ee628406cbca */
    5.94286183324841177367e-01,  /* 0x3fe30464753b090a */
    5.96962937215401501234e-01,  /* 0x3fe31a52048874be */
    5.99629986503951384336e-01,  /* 0x3fe3302b39b78856 */
    6.02287346134964152178e-01,  /* 0x3fe345f01cce37bb */
    6.04935031491913965951e-01,  /* 0x3fe35ba0b60eccce */
    6.07573058389022313541e-01,  /* 0x3fe3713d0df6c503 */
    6.10201443063065118722e-01,  /* 0x3fe386c52d3db11e */
    6.12820202165241245673e-01,  /* 0x3fe39c391cd41719 */
    6.15429352753104952356e-01,  /* 0x3fe3b198e5e2564a */
    6.18028912282561737612e-01,  /* 0x3fe3c6e491c78dc4 */
    6.20618898599929469384e-01,  /* 0x3fe3dc1c2a188504 */
    6.23199329934065904268e-01,  /* 0x3fe3f13fb89e96f4 */
    6.25770224888563042498e-01,  /* 0x3fe4064f47569f48 */
    6.28331602434009650615e-01,  /* 0x3fe41b4ae06fea41 */
    6.30883481900321840818e-01,  /* 0x3fe430328e4b26d5 */
    6.33425882969144482537e-01,  /* 0x3fe445065b795b55 */
    6.35958825666321447834e-01,  /* 0x3fe459c652badc7f */
    6.38482330354437466191e-01,  /* 0x3fe46e727efe4715 */
    6.40996417725432032775e-01,  /* 0x3fe4830aeb5f7bfd */
    6.43501108793284370968e-01,  /* 0x3fe4978fa3269ee1 */
    6.45996424886771558604e-01,  /* 0x3fe4ac00b1c71762 */
    6.48482387642300484032e-01,  /* 0x3fe4c05e22de94e4 */
    6.50959018996812410762e-01,  /* 0x3fe4d4a8023414e8 */
    6.53426341180761927063e-01,  /* 0x3fe4e8de5bb6ec04 */
    6.55884376711170835605e-01,  /* 0x3fe4fd013b7dd17e */
    6.58333148384755983962e-01,  /* 0x3fe51110adc5ed81 */
    6.60772679271132590273e-01,  /* 0x3fe5250cbef1e9fa */
    6.63202992706093175102e-01,  /* 0x3fe538f57b89061e */
    6.65624112284960989250e-01,  /* 0x3fe54ccaf0362c8f */
    6.68036061856020157990e-01,  /* 0x3fe5608d29c70c34 */
    6.70438865514021320458e-01,  /* 0x3fe5743c352b33b9 */
    6.72832547593763097282e-01,  /* 0x3fe587d81f732fba */
    6.75217132663749830535e-01,  /* 0x3fe59b60f5cfab9d */
    6.77592645519925151909e-01,  /* 0x3fe5aed6c5909517 */
    6.79959111179481823228e-01,  /* 0x3fe5c2399c244260 */
    6.82316554874748071313e-01,  /* 0x3fe5d58987169b18 */
    6.84665002047148862907e-01,  /* 0x3fe5e8c6941043cf */
    6.87004478341244895212e-01,  /* 0x3fe5fbf0d0d5cc49 */
    6.89335009598845749323e-01,  /* 0x3fe60f084b46e05e */
    6.91656621853199760075e-01,  /* 0x3fe6220d115d7b8d */
    6.93969341323259825138e-01,  /* 0x3fe634ff312d1f3b */
    6.96273194408023488045e-01,  /* 0x3fe647deb8e20b8f */
    6.98568207680949848637e-01,  /* 0x3fe65aabb6c07b02 */
    7.00854407884450081312e-01,  /* 0x3fe66d663923e086 */
    7.03131821924453670469e-01,  /* 0x3fe6800e4e7e2857 */
    7.05400476865049030906e-01,  /* 0x3fe692a40556fb6a */
    7.07660399923197958039e-01,  /* 0x3fe6a5276c4b0575 */
    7.09911618463524796141e-01,  /* 0x3fe6b798920b3d98 */
    7.12154159993178659249e-01,  /* 0x3fe6c9f7855c3198 */
    7.14388052156768926793e-01,  /* 0x3fe6dc44551553ae */
    7.16613322731374569052e-01,  /* 0x3fe6ee7f10204aef */
    7.18829999621624415873e-01,  /* 0x3fe700a7c5784633 */
    7.21038110854851588272e-01,  /* 0x3fe712be84295198 */
    7.23237684576317874097e-01,  /* 0x3fe724c35b4fae7b */
    7.25428749044510712274e-01,  /* 0x3fe736b65a172dff */
    7.27611332626510676214e-01,  /* 0x3fe748978fba8e0f */
    7.29785463793429123314e-01,  /* 0x3fe75a670b82d8d8 */
    7.31951171115916565668e-01,  /* 0x3fe76c24dcc6c6c0 */
    7.34108483259739652560e-01,  /* 0x3fe77dd112ea22c7 */
    7.36257428981428097003e-01,  /* 0x3fe78f6bbd5d315e */
    7.38398037123989547936e-01,  /* 0x3fe7a0f4eb9c19a2 */
    7.40530336612692630105e-01,  /* 0x3fe7b26cad2e50fd */
    7.42654356450917929600e-01,  /* 0x3fe7c3d311a6092b */
    7.44770125716075148681e-01,  /* 0x3fe7d528289fa093 */
    7.46877673555587429099e-01,  /* 0x3fe7e66c01c114fd */
    7.48977029182941400620e-01,  /* 0x3fe7f79eacb97898 */
    7.51068221873802288613e-01,  /* 0x3fe808c03940694a */
    7.53151280962194302759e-01,  /* 0x3fe819d0b7158a4c */
    7.55226235836744863583e-01,  /* 0x3fe82ad036000005 */
    7.57293115936992444759e-01,  /* 0x3fe83bbec5cdee22 */
    7.59351950749757920178e-01,  /* 0x3fe84c9c7653f7ea */
    7.61402769805578416573e-01,  /* 0x3fe85d69576cc2c5 */
    7.63445602675201784315e-01,  /* 0x3fe86e2578f87ae5 */
    7.65480478966144461950e-01,  /* 0x3fe87ed0eadc5a2a */
    7.67507428319308182552e-01,  /* 0x3fe88f6bbd023118 */
    7.69526480405658186434e-01,  /* 0x3fe89ff5ff57f1f7 */
    7.71537664922959498526e-01,  /* 0x3fe8b06fc1cf3dfe */
    7.73541011592573490852e-01,  /* 0x3fe8c0d9145cf49d */
    7.75536550156311621507e-01,  /* 0x3fe8d13206f8c4ca */
    7.77524310373347682379e-01,  /* 0x3fe8e17aa99cc05d */
    7.79504322017186335181e-01,  /* 0x3fe8f1b30c44f167 */
    7.81476614872688268854e-01,  /* 0x3fe901db3eeef187 */
    7.83441218733151756304e-01,  /* 0x3fe911f35199833b */
    7.85398163397448278999e-01}; /* 0x3fe921fb54442d18 */

  /* Some constants. */

  static double pi = 3.1415926535897932e+00, /* 0x400921fb54442d18 */
             piby2 = 1.5707963267948966e+00, /* 0x3ff921fb54442d18 */
             piby4 = 7.8539816339744831e-01, /* 0x3fe921fb54442d18 */
       three_piby4 = 2.3561944901923449e+00; /* 0x4002d97c7f3321d2 */

  double u, v, vbyu, q, s, uu, r;
  unsigned int swap_vu, index, xzero, yzero, xnan, ynan, xinf, yinf;
  int xexp, yexp, diffexp;

  double x = fx;
  double y = fy;

  /* Find properties of arguments x and y. */

  unsigned long long ux, aux, xneg, uy, auy, yneg;

  GET_BITS_DP64(x, ux);
  GET_BITS_DP64(y, uy);
  aux = ux & ~SIGNBIT_DP64;
  auy = uy & ~SIGNBIT_DP64;
  xexp = (int)((ux & EXPBITS_DP64) >> EXPSHIFTBITS_DP64);
  yexp = (int)((uy & EXPBITS_DP64) >> EXPSHIFTBITS_DP64);
  xneg = ux & SIGNBIT_DP64;
  yneg = uy & SIGNBIT_DP64;
  xzero = (aux == 0);
  yzero = (auy == 0);
  xnan = (aux > PINFBITPATT_DP64);
  ynan = (auy > PINFBITPATT_DP64);
  xinf = (aux == PINFBITPATT_DP64);
  yinf = (auy == PINFBITPATT_DP64);

  diffexp = yexp - xexp;

  /* Special cases */

  if (xnan)
#ifdef WINDOWS
    {
      unsigned int ufx;
      GET_BITS_SP32(fx, ufx);
      return handle_errorf("atan2f", ufx|0x00400000, _DOMAIN, 0, EDOM, fx, fy);
    }
#else
    return fx + fx; /* Raise invalid if it's a signalling NaN */
#endif
  else if (ynan)
#ifdef WINDOWS
    {
      unsigned int ufy;
      GET_BITS_SP32(fy, ufy);
      return handle_errorf("atan2f", ufy|0x00400000, _DOMAIN, 0, EDOM, fx, fy);
    }
#else
    return (float)(y + y); /* Raise invalid if it's a signalling NaN */
#endif
  else if (yzero)
    { /* Zero y gives +-0 for positive x
         and +-pi for negative x */
#ifndef WINDOWS
      if ((_LIB_VERSION == _SVID_) && xzero)
        /* Sigh - _SVID_ defines atan2(0,0) as a domain error */
        return retval_errno_edom(x, y);
      else
#endif
      if (xneg)
	{
	  if (yneg) return valf_with_flags((float)-pi, AMD_F_INEXACT);
          else return valf_with_flags((float)pi, AMD_F_INEXACT);
	}
      else return (float)y;
    }
  else if (xzero)
    { /* Zero x gives +- pi/2
         depending on sign of y */
      if (yneg) return valf_with_flags((float)-piby2, AMD_F_INEXACT);
      else valf_with_flags((float)piby2, AMD_F_INEXACT);
    }

  if (diffexp > 26)
    { /* abs(y)/abs(x) > 2^26 => arctan(x/y)
         is insignificant compared to piby2 */
      if (yneg) return valf_with_flags((float)-piby2, AMD_F_INEXACT);
      else return valf_with_flags((float)piby2, AMD_F_INEXACT);
    }
  else if (diffexp < -13 && (!xneg))
    { /* x positive and dominant over y by a factor of 2^13.
         In this case atan(y/x) is y/x to machine accuracy. */

      if (diffexp < -150) /* Result underflows */
        {
          if (yneg)
            return valf_with_flags(-0.0F, AMD_F_INEXACT | AMD_F_UNDERFLOW);
          else
            return valf_with_flags(0.0F, AMD_F_INEXACT | AMD_F_UNDERFLOW);
        }
      else
        {
          if (diffexp < -126)
            {
              /* Result will likely be denormalized */
              y = scaleDouble_1(y, 100);
              y /= x;
              /* Now y is 2^100 times the true result. Scale it back down. */
              GET_BITS_DP64(y, uy);
	      scaleDownDouble(uy, 100, &uy);
              PUT_BITS_DP64(uy, y);
	      if ((uy & EXPBITS_DP64) == 0)
		return valf_with_flags((float)y, AMD_F_INEXACT | AMD_F_UNDERFLOW);
	      else
		return (float)y;
             }
          else
            return (float)(y / x);
        }
    }
  else if (diffexp < -26 && xneg)
    { /* abs(x)/abs(y) > 2^56 and x < 0 => arctan(y/x)
         is insignificant compared to pi */
    if (yneg) return valf_with_flags((float)-pi, AMD_F_INEXACT);
    else return valf_with_flags((float)pi, AMD_F_INEXACT);
    }
  else if (yinf && xinf)
    { /* If abs(x) and abs(y) are both infinity
         return +-pi/4 or +- 3pi/4 according to
         signs.  */
    if (xneg)
      {
      if (yneg) return valf_with_flags((float)-three_piby4, AMD_F_INEXACT);
      else return valf_with_flags((float)three_piby4, AMD_F_INEXACT);
      }
    else
      {
      if (yneg) return valf_with_flags((float)-piby4, AMD_F_INEXACT);
      else return valf_with_flags((float)piby4, AMD_F_INEXACT);
      }
    }

  /* General case: take absolute values of arguments */

  u = x; v = y;
  if (xneg) u = -x;
  if (yneg) v = -y;

  /* Swap u and v if necessary to obtain 0 < v < u. Compute v/u. */

  swap_vu = (u < v);
  if (swap_vu) { uu = u; u = v; v = uu; }
  vbyu = v/u;

  if (vbyu > 0.0625)
    { /* General values of v/u. Use a look-up
         table and series expansion. */

      index = (int)(256*vbyu + 0.5);
      r = (256*v-index*u)/(256*u+index*v);

      /* Polynomial approximation to atan(vbyu) */

      s = r*r;
      q = atan_jby256[index-16] + r - r*s*0.33333333333224095522;
    }
  else if (vbyu < 1.e-4)
    { /* v/u is small enough that atan(v/u) = v/u */
      q = vbyu;
    }
  else /* vbyu <= 0.0625 */
    {
      /* Small values of v/u. Use a series expansion */

      s  = vbyu*vbyu;
      q = vbyu -
	vbyu*s*(0.33333333333333170500 -
		s*(0.19999999999393223405 -
		   s*0.14285713561807169030));
    }

  /* Tidy-up according to which quadrant the arguments lie in */

  if (swap_vu) {q = piby2 - q;}
  if (xneg) {q = pi - q;}
  if (yneg) q = - q;
  return (float)q;
}

weak_alias (__atan2f, atan2f)
